{
  "stats": [
    { "n": "9", "label": "products shipped" },
    { "n": "3", "label": "live multiplayer games" },
    { "n": "2", "label": "Stripe-billed SaaS" },
    { "n": "5+", "label": "languages & platforms" }
  ],
  "capabilities": [
    {
      "icon": "rocket",
      "title": "Build & ship products",
      "body": "Full-stack apps taken all the way to production: frontend, database, auth, billing, deploy, and the support inbox after launch. Mostly solo, with real people on the other end."
    },
    {
      "icon": "bolt",
      "title": "Real-time & multiplayer",
      "body": "Live multiplayer rooms with a server that owns the rules: turn logic, 3D dice physics, spectators, and Discord Activities you can play right inside a voice call."
    },
    {
      "icon": "gear",
      "title": "Enterprise automation",
      "body": "Power Apps and Power Automate that take a multi-day approval chain and turn it into one click, inside the Microsoft 365 stack a team already lives in."
    },
    {
      "icon": "spark",
      "title": "AI tooling & advisory",
      "body": "I build with Claude, Gemini and MCP, and help teams actually adopt them: prompt and agent design, Claude Code, and wiring AI into the tools they already use."
    }
  ],
  "projects": [
    {
      "name": "OpenGateSP",
      "tier": "featured",
      "flagship": true,
      "private": false,
      "thumb": "./assets/img/opengatesp.png",
      "tags": ["SharePoint", "Open source"],
      "blurb": "A free, open-source alternative to ShareGate, the SharePoint tool that bills enterprises thousands a year. It moves old file shares into SharePoint without mangling the folder dates, and it tells you who outside the company can actually see a site. The same engine sits behind a themed Windows app and a PowerShell module, and an AI assistant can drive it over MCP. You download it, double-click, and it sets itself up.",
      "features": [
        "Migrate a file share into SharePoint with the folder structure and timestamps intact",
        "See who outside the company can reach a site, and where permission inheritance broke",
        "Provision new sites and bulk-edit metadata from a CSV",
        "One engine behind a Windows GUI and a PowerShell module, plus an MCP server for Claude or Codex",
        "Warm Gruvbox light and deep Tokyo Night Moon dark, with a one-click toggle",
        "App-only certificate auth for headless, scheduled runs"
      ],
      "tech": ["PowerShell", "WPF", "PnP PowerShell", "MCP", "TypeScript"],
      "liveUrl": "https://github.com/sameer-zahir/opengatesp/releases/latest",
      "sourceUrl": "https://github.com/sameer-zahir/opengatesp"
    },
    {
      "name": "Squintless",
      "tier": "featured",
      "private": false,
      "thumb": "./assets/img/squintless.png",
      "tags": ["Dev tool", "Open source"],
      "blurb": "A one-command setup that makes your whole terminal easy on the eyes, on Windows, macOS and Linux. One calm palette runs across the terminal, the shell prompt, git diffs and your Claude Code statusline, in your pick of warm Gruvbox light or deep Tokyo Night Moon. The contrast is tuned to real legibility targets, not guesswork, because I built it for my own eyes first.",
      "features": [
        "Two cohesive palettes: warm Gruvbox light and deep Tokyo Night Moon dark",
        "One command on Windows, macOS and Linux, plus the PowerShell Gallery and Scoop",
        "Themes the terminal, the oh-my-posh prompt, git-delta diffs, and tools like zoxide / eza / bat / lazygit",
        "JetBrains Mono Nerd Font with HiDPI / OLED-tuned rendering",
        "A matching Claude Code theme and a curated ccstatusline, shipped as a plugin",
        "Idempotent and non-destructive: it backs up every file it touches, and uninstalls clean"
      ],
      "tech": ["PowerShell", "Bash / Zsh", "oh-my-posh", "git-delta"],
      "liveUrl": "https://sameerzahir.com/squintless/",
      "sourceUrl": "https://github.com/sameer-zahir/squintless"
    },
    {
      "name": "PeekaScan",
      "tier": "featured",
      "private": true,
      "thumb": "./assets/img/tcgscanner.png",
      "tags": ["SaaS", "AI vision"],
      "blurb": "Right-click any card image on the web and PeekaScan tells you what it is and what it's worth. A Chrome and Firefox extension backed by a FastAPI service that reads the card with Gemini vision, then pulls live market prices, a projected grade, and 90 days of history. Real subscription billing, real collectors using it.",
      "features": [
        "Right-click any card image → identify it with Gemini 3.1 Flash Lite vision",
        "Live ungraded + PSA 7–10 prices with 90-day history charts",
        "AI-projected grade & EV from centering / corners / edges / surface",
        "eBay active-listings feed + PriceCharting market data",
        "Three Stripe tiers, Google OAuth, Postgres, live on the Chrome & Firefox stores"
      ],
      "tech": ["Chrome MV3", "FastAPI", "PostgreSQL", "Stripe", "Gemini Vision", "Google OAuth"],
      "liveUrl": "https://peekascan.com",
      "sourceUrl": null
    },
    {
      "name": "Ludo",
      "tier": "featured",
      "private": true,
      "thumb": "./assets/img/ludo.png",
      "tags": ["Real-time", "3D physics"],
      "blurb": "Real-time multiplayer Ludo with a board you can actually look around. It renders in React Three Fiber, the dice tumble on real Rapier physics, and a server owns the rules so nobody can fudge a roll. Three dice variants, four board themes, replays, spectators, and a Discord Activity you can play in a voice call.",
      "features": [
        "3D board with physically-simulated dice (R3F + Rapier)",
        "Server-authoritative Colyseus netcode: clients send intents only",
        "Three dice modes: classic, accumulate, and drag-drop double-dice",
        "Four board themes + an in-app GLB calibration workshop",
        "81-test rules engine, match replays, superlatives, and spectators"
      ],
      "tech": ["React Three Fiber", "Rapier", "Colyseus", "Node", "Prisma"],
      "liveUrl": "https://ludo-web-production-200c.up.railway.app",
      "sourceUrl": null
    },
    {
      "name": "Vortex Brackets",
      "tier": "featured",
      "private": true,
      "thumb": "./assets/img/animebracket.png",
      "tags": ["Real-time multiplayer", "SaaS"],
      "blurb": "A real-time tournament platform for settling arguments. Players drop in YouTube clips or answers and vote them head-to-head down a live bracket until one thing wins. Nine game modes, a Discord Activity for playing in a voice call, Stripe Pro subscriptions, and the unglamorous monitoring that keeps it all standing.",
      "features": [
        "Nine game modes from one config table, including a local 'Couch Party' mode",
        "Native Discord Activity: play embedded in a voice channel",
        "Live WebSocket voting via Colyseus, with spectating + host-grace timers",
        "Stripe Pro tier ($5.99/mo) with Google + Discord OAuth",
        "Cloudflare Turnstile bot protection and Sentry monitoring"
      ],
      "tech": ["React", "Vite", "Colyseus", "WebSocket", "Stripe", "Discord SDK"],
      "liveUrl": "https://vortexbrackets.com",
      "sourceUrl": null
    },
    {
      "name": "Trivia Vortex",
      "tier": "grid",
      "private": true,
      "thumb": "./assets/img/triviavortex.png",
      "tags": ["Real-time", "Party game"],
      "blurb": "A Jackbox-style party trivia game with an alien streak. Put it on the TV, everyone joins from their phone by QR code, then races through Gen-Z trivia and nine minigames. Real-time rooms, phase-aware audio, and 135+ hand-built animations doing the heavy lifting on feel.",
      "features": [
        "Host-on-TV + up to 8 phones joining by QR",
        "Nine TMP-style minigames + a ghost mode after elimination",
        "549-question Gen-Z bank across 13 categories",
        "Claude Haiku 4.5 generates roasts at question reveal (with fallback)",
        "Reference-tier motion design: framer-motion + 135+ keyframes"
      ],
      "tech": ["React", "Vite", "FastAPI", "WebSocket", "framer-motion"],
      "liveUrl": "https://triviavortex-production.up.railway.app",
      "sourceUrl": null
    },
    {
      "name": "Gruvbox Word",
      "tier": "grid",
      "private": false,
      "thumb": "./assets/img/gruvbox-word.png",
      "tags": ["Web app", "Open source"],
      "blurb": "A calm, offline-first writing app for anyone who can't decide between Word and Markdown, so it does both: a familiar toolbar sitting over a live Markdown core. Exports to Word, Markdown, HTML and PDF. Zero dependencies, installs as a PWA, and wears the same Gruvbox and JetBrains Mono look as the rest of my stuff.",
      "features": [
        "Hybrid editing: a Word-style toolbar plus live Markdown shortcuts",
        "Export to Word (.doc), Markdown, HTML and PDF",
        "Installable PWA that works fully offline",
        "Multiple documents with autosave + a live outline",
        "Zero dependencies: vanilla HTML/CSS/ES-modules"
      ],
      "tech": ["Vanilla JS", "PWA", "Service Worker", "Cloudflare"],
      "liveUrl": "https://word.sameerzahir.com",
      "sourceUrl": "https://github.com/sameer-zahir/gruvbox-word"
    },
    {
      "name": "SickOfCodeBlocks",
      "tier": "grid",
      "private": false,
      "thumb": "./assets/img/sickofcodeblocks.png",
      "tags": ["Dev tool", "npm + MCP"],
      "blurb": "The thing I wanted every time I pasted terminal output into Slack and it arrived as garbage. A CLI, library, and MCP server that strips ANSI codes, progress bars, and noise out of terminal, Salesforce, and AI output, so what lands in the ticket is just the text. Published on npm.",
      "features": [
        "Collapses progress bars & spinners via carriage-return replay",
        "Rebuilds box-drawing tables (docker ps, kubectl) into aligned columns",
        "Output presets for Teams, Slack, Email, plus secret redaction",
        "One engine, four forms: CLI, library, MCP server, browser playground",
        "Zero runtime dependencies; runs 100% client-side"
      ],
      "tech": ["TypeScript", "npm", "MCP", "CLI"],
      "liveUrl": "https://sameer-zahir.github.io/SickOfCodeBlocks/",
      "sourceUrl": "https://github.com/sameer-zahir/SickOfCodeBlocks"
    },
    {
      "name": "Teevio",
      "tier": "grid",
      "private": true,
      "thumb": "./assets/img/teevio.png",
      "tags": ["Android TV", "Native"],
      "blurb": "A native Android TV app for people who still reach for the remote. Built in Kotlin and Jetpack Compose, it's a D-pad-first IPTV client for live channels, movies and series over Xtream Codes, with Media3 ExoPlayer playback, an EPG, favourites, history and offline caching.",
      "features": [
        "D-pad-first 10-foot TV UI with fast channel-zapping",
        "Live TV, VOD movies, and series via the Xtream Codes API",
        "Media3 ExoPlayer (HLS) with retry/backoff + low-latency buffers",
        "Favorites, watch history and a short-EPG overlay",
        "Clean architecture: Room caching + Retrofit + Hilt DI"
      ],
      "tech": ["Kotlin", "Jetpack Compose", "Media3 ExoPlayer", "Room", "Hilt"],
      "liveUrl": null,
      "sourceUrl": null
    }
  ],
  "caseStudies": [
    {
      "kicker": "Enterprise · Power Platform",
      "title": "Approval chains that used to take days",
      "body": "Built Power Apps front-ends and Power Automate flows that took multi-day, multi-step approval chains and turned them into a guided process that runs itself, wired straight into the Microsoft 365 and Dataverse stack the team already used.",
      "metric": "Days → minutes",
      "metricLabel": "process time"
    },
    {
      "kicker": "Enterprise · Power Platform",
      "title": "One app instead of a dozen spreadsheets",
      "body": "Replaced a tangle of fragile shared spreadsheets with a Dataverse-backed Power App: role-based views, real validation, and notifications that fire on their own. One place a team could trust, instead of guessing which file was current.",
      "metric": "1 app",
      "metricLabel": "from scattered spreadsheets"
    },
    {
      "kicker": "Advisory · AI adoption",
      "title": "Getting teams past the AI demo",
      "body": "Sat down with colleagues and teams to get AI past the demo and into the actual work: Claude and Claude Code set up properly, MCP servers wired in, and prompts and agents designed around what they were really trying to get done.",
      "metric": "Hands-on",
      "metricLabel": "setup & coaching"
    }
  ],
  "skills": [
    { "group": "Frontend", "items": ["React", "Vite", "Tailwind", "Vanilla JS", "Three.js / R3F", "Framer Motion"] },
    { "group": "Backend", "items": ["FastAPI", "Node.js", "Colyseus", "WebSockets", "PostgreSQL", "SQLite", "Prisma"] },
    { "group": "Platforms & Ops", "items": ["Stripe", "OAuth", "Discord Activities", "Chrome MV3", "Railway", "Cloudflare", "GitHub Actions"] },
    { "group": "Mobile / TV", "items": ["Kotlin", "Jetpack Compose", "Android TV", "Media3 ExoPlayer", "Room", "Hilt"] },
    { "group": "Enterprise", "items": ["Power Apps", "Power Automate", "Dataverse", "SharePoint"] },
    { "group": "AI", "items": ["Claude", "Gemini", "MCP", "Agent & prompt design", "Claude Code"] }
  ],
  "thoughts": [
    {
      "title": "Five grand a year for ShareGate, so I built our own",
      "dek": "We pay about five grand a year for ShareGate. Then the one piece I wanted, the part an AI can drive, sat behind more licensing. So I built my own over a couple of evenings and put it out free.",
      "date": "Jun 2026",
      "readTime": "4 min read",
      "url": "/thoughts/so-i-built-my-own-sharegate/"
    },
    {
      "title": "An afternoon, not a degree",
      "dek": "10:21pm, sixteen hours in, eyes on fire. The night I pointed hundreds of AI agents at my own eye strain, and what it told me about what building just became.",
      "date": "Jun 2026",
      "readTime": "3 min read",
      "url": "/thoughts/an-afternoon-not-a-degree/"
    }
  ]
}
