08 / 10Launched

Titan. A cinematic survival game. Play free in your browser.

Role
Creator · game design, art direction and engineering
Built on
False Earth by Ming-Jyun Hung (MIT) ↗
Platform
Browser game
Status
Launched
Stack
Three.js (WebGPU + TSL), React Three Fiber, React, Zustand, TypeScript, Vite, Vercel Functions, Upstash Redis

Overview

Titan is a survival game that runs in the browser. The crew is gone and you are not. You grow food in bone-white dust, scavenge enough air to breathe, rebuild a buried rover and drive it to the wreck before time runs out. Its tagline is “Don’t Wait to Be Saved”, and its first chapter is The Botanist. It began as Mission B150: a Kubrick-white survival game, entirely in the browser, after The Martian.

My role

Titan is built on False Earth, an open-source WebGPU world by Ming-Jyun Hung (MIT). The grass, the terrain, the character and the animation system are his work. The game is mine: the game design and survival systems, the world and its art direction, the story and missions, controller support, the interface, the audio, the performance work and the release. I made it in nine days in June 2026, across 162 commits, every one written with Claude as my coding partner.

I set the bar at AAA and kept an audit of what a console survival game has that mine didn’t yet, ordered by how much each item moves perceived quality per unit of effort. Then I worked down the list.

What it does

  • Coupled survival. Oxygen, water, power and food feed each other. Lose power and your air drains twice as fast; water grows crops, crops feed you. A day lasts a hundred seconds, and rescue comes on Sol 12, about twenty minutes in.
  • A guided goal ladder. Eight milestones, from stepping inside the hab to driving to the crash site. Each one is a checkpoint, so dying never sends you back to Sol 1.
  • Storms you can’t fully predict. Sirens are exact. The ARES terminal only estimates, up to 40% of a day out, and it reports facts, never strategy.
  • An ending. Past the last milestone, the sun goes down for the only time in the game, the headlamps come on, and a four-shot sequence closes Chapter 1.
  • Any input. Keyboard and mouse, PlayStation or Xbox controllers with haptic rumble, or a touch joystick on phones.
  • Suit audio made in code. Wind, breathing, the low-oxygen heartbeat and the airlock hiss are synthesized as you play, under recorded footsteps and a music bed.

Decisions and trade-offs

  • Eternal noon. I cut day and night on purpose. The bone-white, always-noon world is the art direction, so darkness is saved for the ending.
  • Gravity that feels right, not real. It’s set higher than the real value, because the real value read as broken, not heroic.
  • Cut to the one thing. On day three I cut every side quest, from the lava tube to the ziplines. They pulled focus from what the mission is about: the rover. A WebGPU water simulation with swimming went too, retired as a per-frame fluid sim for a decorative pond, along with caves and multiplayer.
  • Then spend the savings. To pay for the side content I’d cut the grass to 640 by 640 blades, about 55% fewer. Once the side content was gone I put it back: about a million blades across the play area, in three levels of detail, growing only where the game happens.
  • The first minute. Shader pipelines compiling mid-game froze the page, so I built a freeze probe that flags any frame over 120 milliseconds, moved the compile behind the loading screen, and spread it out one pipeline at a time so Chrome never flags the tab. The first load went from 63 MB to 19 MB, and the scene from thirteen lights to five.
  • Know where runs end. Each milestone fires an analytics event, so I can see where players drop off. The leaderboard ranks by quest points, then the fewest days, then the fewest metres walked.

How it’s built

Three.js on WebGPU with TSL shaders, inside React Three Fiber. The grass is computed on the GPU with indirect draws, and a trail texture flattens it where you walk. World props anchor to the ground with the same height function the terrain shader uses, so nothing floats, and the visor reflects the world through a live cube camera. All gameplay tuning lives in one balance file. The leaderboard runs on a small Vercel function over Upstash Redis.

Timeline

  • 10 June 2026. The fork from False Earth, the survival core, and the opener rebuilt inside the engine.
  • 11 June. A clean-slate character controller, and Chapter 1 ending at the crash site.
  • 12 June. Every side quest cut.
  • 14 June. The freeze probe and the analytics funnel.
  • 16 June. The mission briefing, checkpoints and the tagline.
  • 18 June. One shader pipeline at a time, and a loading screen that says how long.

Where it is now

Live and free to play. It needs a WebGPU browser (Chrome, Edge or Safari 26+), and the first load can take a few minutes while shaders compile. I prototyped shared presence, where you’d see other explorers walking the same planet, then took it off the title screen.

Want something like this for your product?

I help founders and teams design, build and ship apps.