Inspiration

It started without a plan. I was sketching concepts for all three genre tracks at once, mostly to see what would stick. One of those sketches began life as a survival game, and at some point it was obvious the genre was the wrong suit for it — everything interesting about the idea was management, not survival. The moment I moved it across, ideas started arriving faster than I could sort them. Some were thrown out the same hour. Some stayed and grew teeth.

What came out is Welcome to Heaven™: heaven as a subscription that expires, hell as the premium resort that outbid it for the brand, and eternity that turns out to be a seventy-second plan. The tone picked itself after that. A resort that calls its staff Associates and its audit a Performance Improvement Plan is funnier than any dungeon.

What it does

Welcome to Heaven™ is a portrait, single-player management game that runs in a browser. You are the manager on the front desk, and souls arrive as dockets with two stats.

Swipe up to check one into a suite: Sanctity earns Aura toward Head Office's daily quota, and Skepticism raises Suspicion. Swipe down to seat it at a desk downstairs: a trusting soul earns Credits for upgrades, but adds Noise. Swipe left to turn it away. Contracts run seventy seconds — then the halo burns out, and you have to tap that guest into the service lift before they work out where they are.

Between shifts you answer a contract card, read the news from Earth, and spend Credits on suites, desks, attractions, supplies and a shift manager. Suspicion at 100 is an audit. A second missed quota is a restructuring. Surviving day eight is a merger.

How I built it

Solo, with Claude Code as the other half of the pair. The honest description of the process is: I threw ideas at it, it cut about half of them, turned some of the rest into something adjacent and better, and then built the survivor. Pitch, discard, assemble, play, repeat — for sixty-eight sessions over twenty days, with a build log that recorded the failed turns as carefully as the good ones.

The build itself is deliberately plain: Canvas 2D, no libraries, no build step beyond concatenating the source files into one readable index.html, a 216-pixel internal resolution scaled by whole numbers, and not a single network request. Every sprite is generated by code — pixel grids defined in the source and drawn at runtime, so the build ships no image files at all; the PNGs that exist were produced afterwards by a script that converts those same grids into the format, for looking at and editing outside the game. The music is code as well — one procedural engine with three arrangements crossfaded by the Suspicion meter, shipped as rendered files with the live synth kept as the fallback.

The piece I did not expect to need is the tooling. A headless harness plays the real game through the same functions the touch layer calls, so dozens of full sessions across four play styles run in about a second — which meant balance changes could be measured before they were argued about. A pre-flight script fails the build on things I would otherwise ship blind: a line of text too wide for its plate, an archetype with no sprite, a debug marker left in the file.

Challenges I ran into

Balance and progression took far more attempts than I expected. The worst part was not being wrong — it was being wrong in disguise. More than once a fix looked like it had landed, and all that had really happened was that the same problem changed shape. The clearest example: turning away everything except the most gullible souls won 85% of runs, against 54% for careful play, because every high-value guest also happened to be a safe one. No amount of tuning constants would have fixed that. Swapping which stat drives which resource did, because it made the most valuable guest the most dangerous one.

Sound was fussier than it looked. What sounded fine on one device fell apart on another — one mobile browser gave the three music stems three separate clocks, and an older phone drifted almost half a second with audible seeks in the first twenty seconds. Finding out why was much harder than fixing it once I knew.

And the visuals turned out to be the least pleasant stretch of the whole project. On paper it was the most straightforward work left. In practice it was the part that fought back hardest and took the most passes to stop looking wrong.

Accomplishments that I'm proud of

  • The gesture controls. The whole game is one thumb: swipe a docket up, down or left, tap a guest into the lift. The card follows the finger, commits at a threshold you can feel rather than one you have to learn, and lets go cleanly if you change your mind halfway. It took a lot of quiet passes to get there, and the result is the part I am happiest with — nobody has to be told how to play it.
  • A complete loop with win, lose and reset inside twelve minutes, on a difficulty curve that was measured rather than guessed at.
  • A balance process that catches its own mistakes. Dealing two fixed cards on the first day looked like a clean teaching change until the strategy probe showed it had quietly reopened the exploit; it shipped anyway, with the receipt written down.
  • Zero dependencies, zero network requests, and the same game on a small phone and a desktop window.

What I learned

  • Without real hands on a pile of different phones, balance work and the non-obvious bugs move slowly. A lot of problems simply do not exist until a real device touches them.
  • The genuine surprise was audio. Having an AI write the soundtrack as code worked almost perfectly, and the result left a much stronger impression than I was prepared for.
  • A mechanic needs an off-state. If there is no situation where a player would decline it, it is not a decision — it is a constant with a gesture in front of it.
  • A tutorial line has to answer a question the player has already asked. Anything that arrives before its question is scenery.
  • Half a system is worse than none, which is why the cut list is long and lives in the future vision instead of the build.

What's next for Welcome to Heaven™

More live playtesting first — the target is that a judge can win after a few defeats without flattening the variety of viable builds. After that: new modes, proper animation, and a deeper progression with more room for different builds, so that no two runs feel like the same shift. Then the things deliberately kept out of the prototype — a room-planning grid for the fake paradise, Associates with disguise levels and strikes, guest reviews that change who shows up, and a story running across Earth's final quarter.

Built With

Share this project:

Updates

Submission history