// All project data
const PROJECTS = [
  {
    id: 'bloom-sort',
    title: 'Bloom Sort',
    tagline: 'A globally launched casual puzzle, taken from prototype to LiveOps.',
    description: 'Color-sort puzzle with a 2D-meets-3D visual identity. I led full-cycle development including gameplay, store modules, analytics and the SpinWheel butterfly module.',
    role: 'Lead Game Developer',
    studio: 'Mindstorm Studios',
    year: '2024',
    duration: '12 mo',
    status: 'live',
    statusLabel: 'Live · LiveOps',
    engine: 'Unity 2022 LTS',
    platform: 'iOS · Android',
    artwork: 'bloom',
    aspect: 'portrait',
    icon: 'data/bloom-sort/icon.webp',
    cover: 'data/bloom-sort/cover.webp',
    heroImage: 'data/bloom-sort/hero.webp',
    stack: ['C#', 'Unity', 'Addressables', 'Firebase', 'GameAnalytics', 'Unity IAP'],
    stats: [
      { lbl: 'Lifecycle', val: 'Concept → LiveOps' },
      { lbl: 'Platforms', val: 'iOS + Android' },
      { lbl: 'Modules', val: 'Store, SpinWheel, LiveOps' },
      { lbl: 'Build size cut', val: '−22%' },
    ],
    overview: 'Bloom Sort is a casual color-sort puzzle that ships globally on iOS and Android. I owned the title end-to-end, from initial mechanic prototyping through global launch and into LiveOps. The brief was deceptively simple — make a color-sort game that feels alive — and the engineering challenge was building a content pipeline that lets designers ship new event seasons without coder involvement.',
    role_breakdown: [
      'Owned core gameplay loop, level data format and undo/redo systems.',
      'Architected the SpinWheel "Butterfly Effect" module — 2D UI elements that hand off cleanly to 3D physics objects mid-animation.',
      'Built the in-game Store with secure IAP transaction handling and receipt validation.',
      'Wired in GameAnalytics and Firebase for funnel tracking, A/B testing and Remote Config-driven LiveOps.',
      'Mentored an associate dev through prototype-to-shipping cycles for adjacent titles.',
    ],
    postmortem: [
      { kind: 'Won', text: 'The 2D→3D visual handoff for SpinWheel held up across 4 device tiers and became a template for later modules.' },
      { kind: 'Won', text: 'Remote Config-driven economy let live designers tune drop rates without binary updates — saved at least 6 release cycles.' },
      { kind: 'Learned', text: 'I underestimated how much QA bandwidth LiveOps events would eat. Next time I would build event-replay tooling on day one, not month nine.' },
      { kind: 'Learned', text: 'Early Addressables groups were too granular. Consolidating them later was painful but cut load times by ~40%.' },
    ],
    credits: [
      { role: 'Lead Dev', name: 'Zeeshah Butt' },
      { role: 'Game Design', name: 'Mindstorm Design' },
      { role: 'Art Direction', name: 'Mindstorm Art' },
      { role: 'Producer', name: 'Mindstorm Production' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.bloom.sort&pli=1' },
      { kind: 'App Store', url: 'https://apps.apple.com/us/app/bloom-sort/id6472342841' },
      { kind: 'Play Online', url: 'https://www.crazygames.com/game/bloom-sort' },
      { kind: 'Trailer', url: 'data/bloom-sort/trailer.mkv' },
    ],
    screenshots: [
      'data/bloom-sort/ss0.webp',
      'data/bloom-sort/ss1.webp',
      'data/bloom-sort/ss2.webp',
      'data/bloom-sort/ss3.webp',
      'data/bloom-sort/ss4.webp',
      'data/bloom-sort/ss5.webp',
      'data/bloom-sort/ss6.webp',
      'data/bloom-sort/ss7.webp',
      'data/bloom-sort/ss8.webp',
      'data/bloom-sort/ss9.webp',
      'data/bloom-sort/ss10.webp',
      'data/bloom-sort/ss11.webp',
      'data/bloom-sort/ss12.webp',
      'data/bloom-sort/ss13.webp',
      'data/bloom-sort/ss14.webp',
      'data/bloom-sort/ss15.webp',
      'data/bloom-sort/ss16.webp',
      'data/bloom-sort/ss17.webp',
    ],
  },
  {
    id: 'fps-commando',
    title: 'FPS Commando',
    tagline: 'High-performance mobile FPS with a custom in-house ad mediation network.',
    description: 'Current flagship project. SOLID-driven state machine architecture, custom interface-based ads framework, draw-call optimization for low-end devices.',
    role: 'Game Developer',
    studio: 'Imagination AI',
    year: '2025',
    duration: 'Ongoing',
    status: 'wip',
    statusLabel: 'In Development',
    engine: 'Unity 2023 LTS',
    platform: 'Android · iOS',
    artwork: 'fps',
    aspect: 'landscape',
    icon: 'data/fps-commando/icon.webp',
    cover: 'data/fps-commando/cover.webp',
    heroImage: 'data/fps-commando/cover.webp',
    stack: ['C#', 'Unity', 'New Input System', 'ScriptableObjects', 'Frame Debugger', 'Profiler'],
    stats: [
      { lbl: 'ANR rate', val: '−30%' },
      { lbl: 'Architecture', val: 'State Machine + SO' },
      { lbl: 'Ads', val: 'In-house mediation' },
      { lbl: 'Draw calls', val: 'UI atlas optimized' },
    ],
    overview: 'A high-performance FPS title for mobile with custom ad mediation. The interesting part isn\'t the shooting — that\'s table stakes — it\'s the in-house ads framework. We needed the ability to swap ad networks, change waterfall logic, and run experiments without shipping client builds. So I designed an interface-based mediation system controlled entirely by remote-configurable JSON.',
    role_breakdown: [
      'Designed the state-machine + ScriptableObject architecture used across all FPS modes.',
      'Built the custom in-house Ads Network framework (interface-based, JSON-configurable at runtime).',
      'Reduced ANR and Low Memory Kill rates by ~30% via UI atlasing and texture audit.',
      'Implemented economy systems: Weapon Store, Coin Store and IAP integration.',
    ],
    postmortem: [
      { kind: 'Won', text: 'JSON-driven ad config means the data team can run experiments without us. That removed a full release-blocker class of work.' },
      { kind: 'Won', text: 'State machine + SO architecture made it trivial to add new game modes without touching shipped code.' },
      { kind: 'Learned', text: 'Should have invested in a custom inspector for the SO graph earlier — designers were intimidated by the raw asset view.' },
    ],
    credits: [
      { role: 'Game Developer', name: 'Zeeshah Butt' },
      { role: 'Studio', name: 'Imagination AI' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.sgs.antiterrorism.counterattack.commandomissiongame&hl=en' },
      { kind: 'Trailer', url: 'data/fps-commando/trailer.mp4' },
    ],
    screenshots: [
      'data/fps-commando/ss0.webp',
      'data/fps-commando/ss1.webp',
      'data/fps-commando/ss2.webp',
      'data/fps-commando/ss3.webp',
      'data/fps-commando/ss4.webp',
      'data/fps-commando/ss5.webp',
    ],
  },
  {
    id: 'match-ball-3d',
    title: 'Match Ball 3D',
    tagline: 'Real-time multiplayer with Nakama backend and a refactored chat module.',
    description: 'Casual physics title where I integrated Nakama middleware for cloud saves and real-time chat. Refactored the chat module to eliminate GC spikes during scroll.',
    role: 'Associate Game Developer',
    studio: 'Mindstorm Studios',
    year: '2023',
    duration: '6 mo',
    status: 'live',
    statusLabel: 'Live',
    engine: 'Unity 2021 LTS',
    platform: 'iOS · Android',
    artwork: 'match',
    aspect: 'portrait',
    icon: 'data/match-ball-3d/icon.webp',
    cover: 'data/match-ball-3d/cover.webp',
    heroImage: 'data/match-ball-3d/cover.webp',
    stack: ['C#', 'Unity', 'Nakama', 'UGUI', 'Firebase'],
    stats: [
      { lbl: 'Backend', val: 'Nakama (RT + saves)' },
      { lbl: 'GC spikes', val: 'Eliminated' },
      { lbl: 'Module', val: 'Chat refactor' },
      { lbl: 'Status', val: 'Shipped' },
    ],
    overview: 'A casual physics title that needed a backend. I integrated Nakama middleware for cloud-based player progression and real-time in-game chat. The chat module had a known GC spike issue during scroll — refactored it to use object pooling and a virtualized list, eliminating the spikes.',
    role_breakdown: [
      'Integrated Nakama middleware for player progression saves and real-time chat.',
      'Refactored the Chat Module — virtualized list, pooled prefabs, eliminated GC spikes during scroll.',
      'Optimized UI rendering passes for low-end Android devices.',
    ],
    postmortem: [
      { kind: 'Won', text: 'Virtualized chat list scaled to 500+ messages without dropping a frame.' },
      { kind: 'Learned', text: 'First time integrating a third-party backend; should have stubbed the Nakama API earlier for faster local iteration.' },
    ],
    credits: [
      { role: 'Backend Integration', name: 'Zeeshah Butt' },
      { role: 'Studio', name: 'Mindstorm Studios' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.match.match3d' },
      { kind: 'Trailer', url: 'data/match-ball-3d/trailer.webm' },
    ],
    screenshots: [
      'data/match-ball-3d/ss0.webp',
      'data/match-ball-3d/ss1.webp',
      'data/match-ball-3d/ss2.webp',
      'data/match-ball-3d/ss3.webp',
      'data/match-ball-3d/ss4.webp',
      'data/match-ball-3d/ss5.webp',
      'data/match-ball-3d/ss6.webp',
      'data/match-ball-3d/ss7.webp',
      'data/match-ball-3d/ss8.webp',
      'data/match-ball-3d/ss9.webp',
      'data/match-ball-3d/ss10.webp',
      'data/match-ball-3d/ss11.webp',
      'data/match-ball-3d/ss12.webp',
      'data/match-ball-3d/ss13.webp',
      'data/match-ball-3d/ss14.webp',
    ],
  },
  {
    id: 'reckless-rick',
    title: 'Reckless Rick',
    tagline: 'Archero-style action prototype, mentored from spec to playable.',
    description: 'An Archero-style top-down shooter prototype. Mentored an associate dev through the build, conducting code reviews and architecture guidance.',
    role: 'Mentor / Code Review',
    studio: 'Mindstorm Studios',
    year: '2024',
    duration: '2 mo',
    status: 'proto',
    statusLabel: 'Prototype',
    engine: 'Unity',
    platform: 'Mobile',
    artwork: 'rick',
    aspect: 'portrait',
    icon: 'data/reckless-rick/icon.webp',
    cover: 'data/reckless-rick/cover.webp',
    stack: ['C#', 'Unity', 'State Machine'],
    stats: [
      { lbl: 'Genre', val: 'Action / Roguelite' },
      { lbl: 'My role', val: 'Mentor + reviewer' },
      { lbl: 'Status', val: 'Internal prototype' },
    ],
    overview: 'An Archero-style action roguelite prototype built by an associate dev I was mentoring. I conducted code reviews, paired on architecture, and helped them ship a playable build inside 2 months.',
    role_breakdown: [
      'Architecture mentorship — guided state machine + ability system design.',
      'Code review on every PR.',
      'Paired on the trickiest performance and gameplay-feel problems.',
    ],
    postmortem: [
      { kind: 'Won', text: 'The associate dev shipped three prototypes in the time we expected one. Mentorship pays compound interest.' },
      { kind: 'Learned', text: 'I tended to over-prescribe early on. By prototype three I learned to ask more, prescribe less.' },
    ],
    credits: [
      { role: 'Build', name: 'Associate Dev (mentored)' },
      { role: 'Mentor', name: 'Zeeshah Butt' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.reckless.rick&hl=en' },
    ],
    screenshots: [
      'data/reckless-rick/ss0.webp',
      'data/reckless-rick/ss1.webp',
      'data/reckless-rick/ss2.webp',
      'data/reckless-rick/ss3.webp',
      'data/reckless-rick/ss4.webp',
      'data/reckless-rick/ss5.webp',
      'data/reckless-rick/ss6.webp',
      'data/reckless-rick/ss7.webp',
      'data/reckless-rick/ss8.webp',
      'data/reckless-rick/ss9.webp',
      'data/reckless-rick/ss10.webp',
      'data/reckless-rick/ss11.webp',
      'data/reckless-rick/ss12.webp',
      'data/reckless-rick/ss13.webp',
      'data/reckless-rick/ss14.webp',
      'data/reckless-rick/ss15.webp',
      'data/reckless-rick/ss16.webp',
      'data/reckless-rick/ss17.webp',
    ],
  },
  {
    id: 'roll-em-all',
    title: 'Roll Em All',
    tagline: 'Physics-based ball roller prototype.',
    description: 'A casual physics prototype focused on satisfying ball physics and level pacing. Mentorship project.',
    role: 'Mentor / Code Review',
    studio: 'Mindstorm Studios',
    year: '2024',
    duration: '1 mo',
    status: 'proto',
    statusLabel: 'Prototype',
    engine: 'Unity',
    platform: 'Mobile',
    artwork: 'roll',
    aspect: 'portrait',
    icon: 'data/roll-em-all/icon.webp',
    cover: 'data/roll-em-all/cover.webp',
    stack: ['C#', 'Unity', 'Physics'],
    stats: [
      { lbl: 'Genre', val: 'Hyper-casual' },
      { lbl: 'Focus', val: 'Physics feel' },
    ],
    overview: 'A physics-based ball roller prototype emphasizing tactile feel and short session length. Mentored an associate dev through the build.',
    role_breakdown: [
      'Reviewed physics tuning and level layout decisions.',
      'Code review on the build pipeline.',
    ],
    postmortem: [
      { kind: 'Won', text: 'Fast iteration cycles — went from spec to playable in about 4 weeks.' },
    ],
    credits: [
      { role: 'Build', name: 'Associate Dev (mentored)' },
      { role: 'Mentor', name: 'Zeeshah Butt' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.rollballs.all' },
    ],
    screenshots: [
      'data/roll-em-all/ss0.webp',
      'data/roll-em-all/ss1.webp',
      'data/roll-em-all/ss2.webp',
    ],
  },
  {
    id: 'seek-city',
    title: 'Seek City',
    tagline: 'Hidden-object exploration prototype.',
    description: 'A hidden-object exploration prototype with stylized urban environments.',
    role: 'Mentor / Code Review',
    studio: 'Mindstorm Studios',
    year: '2024',
    duration: '1 mo',
    status: 'proto',
    statusLabel: 'Prototype',
    engine: 'Unity',
    platform: 'Mobile',
    artwork: 'city',
    aspect: 'portrait',
    icon: 'data/seek-city/icon.webp',
    cover: 'data/seek-city/cover.webp',
    stack: ['C#', 'Unity', 'UGUI'],
    stats: [
      { lbl: 'Genre', val: 'Hidden object' },
      { lbl: 'Setting', val: 'Stylized urban' },
    ],
    overview: 'A hidden-object exploration prototype set in stylized urban environments. Mentored the associate dev who built it.',
    role_breakdown: [
      'Architecture review for the discovery / scoring system.',
      'Helped tune progression curves.',
    ],
    postmortem: [
      { kind: 'Won', text: 'Solid foundation that could spin into a full title with more art investment.' },
    ],
    credits: [
      { role: 'Build', name: 'Associate Dev (mentored)' },
      { role: 'Mentor', name: 'Zeeshah Butt' },
    ],
    links: [
      { kind: 'Play Store', url: 'https://play.google.com/store/apps/details?id=com.seek.city' },
    ],
    screenshots: [
      'data/seek-city/ss0.webp',
      'data/seek-city/ss1.webp',
      'data/seek-city/ss2.webp',
      'data/seek-city/ss3.webp',
      'data/seek-city/ss4.webp',
      'data/seek-city/ss5.webp',
      'data/seek-city/ss6.webp',
      'data/seek-city/ss7.webp',
      'data/seek-city/ss8.webp',
      'data/seek-city/ss9.webp',
      'data/seek-city/ss10.webp',
      'data/seek-city/ss11.webp',
      'data/seek-city/ss12.webp',
      'data/seek-city/ss13.webp',
      'data/seek-city/ss14.webp',
    ],
  },
];

const TECH_STACK = [
  {
    title: 'Core',
    items: ['C#', 'Unity 2D / 3D', 'Data Structures & OOP', 'SOLID principles', 'Design Patterns'],
  },
  {
    title: 'Unity Ecosystem',
    items: ['Addressables', 'New Input System', 'UGUI', 'ScriptableObjects', 'Profiler & Frame Debugger'],
  },
  {
    title: 'Backend & Analytics',
    items: ['Nakama', 'Firebase Auth & Analytics', 'GameAnalytics', 'Remote Config'],
  },
  {
    title: 'Tools & DevOps',
    items: ['Git & GitHub', 'Jenkins (CI/CD)', 'Asana', 'Jira', 'Android · iOS'],
  },
];

const EXPERIENCE = [
  {
    date: 'Dec 2024 — Now',
    isNow: true,
    company: 'Imagination AI',
    logo: 'IA',
    role: 'Game Developer',
    summary: 'Architecting FPS titles with a SOLID-driven state machine + ScriptableObject foundation, and shipping a custom in-house ad mediation framework controlled entirely by remote JSON.',
    achievements: [
      { num: '−30%', label: 'ANR & LMK rate' },
      { num: 'In-house', label: 'Ads framework' },
      { num: 'Atlased', label: 'UI draw calls' },
    ],
  },
  {
    date: 'Dec 2023 — Dec 2024',
    company: 'Mindstorm Studios',
    logo: 'MS',
    role: 'Game Developer',
    summary: 'Owned Bloom Sort end-to-end from concept through global launch and LiveOps. Built the SpinWheel "Butterfly Effect" 2D-to-3D visual module, secure store implementations, and mentored an associate developer through three prototypes.',
    achievements: [
      { num: 'Bloom Sort', label: 'Shipped globally' },
      { num: '3', label: 'Prototypes mentored' },
      { num: '2D ↔ 3D', label: 'Visual handoff' },
    ],
  },
  {
    date: 'Aug 2022 — Dec 2023',
    company: 'Mindstorm Studios',
    logo: 'MS',
    role: 'Associate Game Developer',
    summary: 'Integrated Nakama middleware for Match Ball 3D — cloud saves and real-time in-game chat. Refactored the chat module, eliminating GC spikes. Built core gameplay for a hex-grid Match-3 puzzle.',
    achievements: [
      { num: 'Nakama', label: 'Backend integration' },
      { num: '0', label: 'GC spikes after refactor' },
      { num: 'Hex Match-3', label: 'Core gameplay' },
    ],
  },
];

window.PROJECTS = PROJECTS;
window.TECH_STACK = TECH_STACK;
window.EXPERIENCE = EXPERIENCE;
