Skip to main content
Ghost Code’s title screen — the arcade cabinet framing the Phantom mascot, Start and Settings glowing below the wordmark.
Ghost Code’s title screen — the arcade cabinet framing the Phantom mascot, Start and Settings glowing below the wordmark.

Solo builder · AI-assisted

Sky Halisky

Ghost Code

Retro arcade trainer for CLI commands — guide the Phantom, capture the right token. 56 cards, vanilla JS, zero dependencies, runs in any browser.

Status
Live — public, no backend
Role
Solo builder · AI-assisted
Year
2026

Tech

  • Vanilla JS
  • HTML
  • CSS
  • GitHub Pages

Tags

  • tools
  • game
  • learning

The problem

Learning Claude Code, macOS shortcuts, and Git felt like grinding through flashcards — and flashcards are forgettable. The commands only stick when your hands have run them under pressure. I wanted a way to turn command memorization into something you’d actually want to come back to, without any server, account, or install.

The approach

I built an original arcade game from scratch in vanilla JS: no frameworks, no build step, one file you can open in any browser. The Phantom — an original character I designed — floats through a synthwave cabinet. Four command tokens appear each round; capture the right one, dodge the wrong ones. Wrong answers cost a spirit life. The constraint of zero dependencies forced every feature to be exactly as heavy as it needed to be, nothing more.

Designing the Phantom was as important as the game loop. A mascot with personality keeps you playing. I went through six character iterations before landing on the neon ghost silhouette — distinct, playful, and readable at small sizes.

What shipped

Fifty-six command cards spanning Claude Code, macOS, and Git — organized so earlier rounds are forgiving, later rounds are unforgiving. WCAG AA-accessible: keyboard-navigable, sufficient contrast throughout, no motion traps. One-file deploy to GitHub Pages; no backend, no account, no tracking. The Phantom is entirely original.

Reflection

The best constraint I gave myself was “zero dependencies.”

It eliminated every architectural debate and forced the game to be exactly what it needed to be. I’d reach for that constraint more often.


— Sky Halisky · Okanagan Valley, British Columbia

A Brief Account

Inside the build

See it in motion.

  • A seeded round in motion — same maze, both themes.

More work

Continue reading.

  • Flagstone's live barrier map — severity pins over downtown Kelowna street tiles, the flag count and filter controls up top.
    Flagstone's live barrier map — severity pins over downtown Kelowna street tiles, the flag count and filter controls up top.

    Flagstone

    Mobile app for flagging accessibility barriers — broken ramps, missing tactile paths — pinned to a real city map. Privacy-first: no tracking, no data sold.

  • The Claude Corp front door — the fifteen-role pipeline under the editorial hero.
    The Claude Corp front door — the fifteen-role pipeline under the editorial hero.

    Claude Corp

    A 15-role AI team governed by a written Constitution. Each agent owns a domain; an orchestrator runs the cycles. The infrastructure behind this portfolio.

Have something like this?
Write to me.

Send me an email