Three Prompts, One Glider: How Sunset Glider Grew a Shooter and Collision Detection
Two weeks ago I built a chill ring-collecting glider game. This week it's a shooter with enemy dirigibles and collision detection, and the entire "design doc" for that evolution is three plain-English prompts. Not three sprints. Not three branches. Three paragraphs of asking.

This post walks through all three prompts verbatim, what each one produced, and the one honest wrinkle along the way — because the wrinkle is the actual lesson.
v1: the whole spec was one prompt
Here's everything I typed to get the original game:
Build a relaxing glider that soars over low-poly islands collecting glowing rings against the clock. SMOOTH delta-time flight (no choppiness), gentle banking controls, a clear goal (collect all rings / beat the timer), warm sunset light. Make it feel purposeful and chill.
What came back: you fly through 12 glowing rings on a circular course. The timer starts at 78 seconds and each ring buys you 6 more. Banking and climbing flight physics, a third-person chase camera, low-poly islands under a sunset sky.
It built, passed verification, and installed on the first attempt. The settle record literally reads: outcome "installed", reason "installedOK", attempt 1.
v2: "make it a shooter"
Two weeks later I wanted more. Here is the entire change request:
This is a cool game but for the next version: 1) Make it a shooter so the rings can be shot to help complete the round. 2) Have interesting floating dirigibles that shoot at the glider and can be shot down.
The result: Space or X fires tracer bullets. You can shoot rings to collect them instead of threading them. Four patrolling enemy dirigibles shoot back — with lead-predicted aim, so they aim where you're going, not where you are. Dirigibles take 3 hits to bring down, with procedural explosion audio when they go.
The honest wrinkle: the first v2 attempt wrote the shooting and dirigible code but ran out of its turn budget before wiring it into the game loop. The build "worked" — but nothing shot. A follow-up iteration session wired it up.
Here's why I'm telling you that instead of hiding it: when an iteration costs a prompt instead of an afternoon, a failed attempt is a shrug, not a setback. I read the result, asked it to finish the wiring, and it did. So call it three prompts and one nudge. That's the whole recovery story.
v3: collisions, please
Later that same evening, one more ask:
This game is great! The only change is that there is no collision detection of the glider into the islands or the dirigibles, which is not very realistic. Collisions into these game pieces should result in destruction of the players glider.
Now clipping an island or hitting a dirigible destroys your glider. Clip an island and you get "Clipped an island — Your glider caught an updraft from the islands." Hit a dirigible and you get "Collision with dirigible — Your glider struck a patrol dirigible." Under the hood, islands use a horizontal-distance plus height-threshold check; dirigibles use a straightforward 3D distance check. Simple, appropriate, and it changes how you fly.
And all three versions are still installed side by side — v1, v2, v3. Iterating never destroys the previous version.
Run facts
For the people who want the specifics:
- The harness drives a coding-agent CLI, not a chat API. mChatAI+ supports Claude Code, Codex, and Gemini CLIs; all three Sunset Glider builds ran Claude Code.
- Both iteration sessions ran on Claude Haiku 4.5 (
claude-haiku-4-5) — a small, cheap model. Verified from the session transcripts. Prompt-sized changes do not need a frontier model. (v1's exact model wasn't preserved in the surviving record, so I won't claim one.) - mchatai-source pieces used — that's the platform's open, public content registry on GitHub:
- the
miniapp-canvas-gamerecipe ui.mini-header(MiniHeader.js — standard mini-app header chrome)resources.swatches(Swatches.js — curated color palettes)- rule packs
entities.glider-rings-rulesand, from v2 on,entities.dirigibles-shooter
- the
Reusable Lego, not boilerplate the model has to reinvent.
What the platform actually did
The prompts are the fun part, but the unglamorous machinery is why this works:
- Workspace prep. For each iteration, the harness set up a workspace with the app's existing source, a MINIAPP.md manifest, focused agent instructions ("modify in place, keep it offline + self-contained"), and the vendored components from mchatai-source.
- Verification before install. Every build gets loaded and render-checked, and the platform auto-iterates on failures.
- Offline-safety. Generated mini-apps are made offline-safe — no surprise network dependencies.
- Side-by-side versions. v1, v2, and v3 all stayed installed. "Trying the shooter idea" never risked the chill original.
- One publish flow. A single publish ships a self-contained bundle to the Community Hub — playable in any browser, nothing for the player to install.
No three.js. Really.
I'll admit I assumed the harness would reach for three.js. It didn't, and the result is better for it.
Sunset Glider is one self-contained HTML file, about 40 KB (v1 was ~28 KB). No three.js, no WebGL, no frameworks, no CDN scripts, no build step. It runs fully offline.
- Rendering is vanilla JavaScript on a 2D canvas with hand-rolled 3D projection math: painter's-algorithm depth sorting, linear distance fog, additive-blend glow on the rings, tracers, and particles. That glow is most of the "warm sunset" feel.
- Audio is 100% procedural via the Web Audio API — filtered-noise wind, a major-scale chime when you collect a ring, layered low-frequency booms for explosions. Zero audio files.
- The flight model is smoothed roll/pitch inputs, yaw coupled to bank angle, drag pulling you back toward cruise speed, and altitude clamps. That's the "SMOOTH delta-time flight" line from prompt one, honored.
Forty kilobytes for a flying shooter with enemy AI, flight physics, and audio it synthesizes on the fly. I find that genuinely delightful.
Go fly it
Play it right now, in your browser: Sunset Glider.
If you want to see exactly how it was made, the detail page has the full Build Materials — the original prompt, the complete build transcript, the agent instructions, harness context notes, the mini-app manifest, and a downloadable source archive. Sign in free at mchatai.com to read them. It's the whole remix kit; nothing is hidden.
And if you'd rather be typing prompts than reading mine: mChatAI+ is a native macOS app, AIWizard is the builder, and it works with Claude, GPT, Gemini, or local models — bring your own API keys, local-first and private by default. Get mChatAI+ here.
Three prompts. One glider. Your turn.
— Lawrence