Main menu, procedural space themeGameplay with the virtual joystick and absorb radiusForm branchingGame over with leaderboard and revive
Context
A mobile game made by three people. One rule: smaller than you is food, bigger than you is death. You steer a cosmic creature with a single virtual joystick, eat, grow, see further and eat bigger things, while larger polluted bodies hunt you in the dark. Work started on April 23, 2026 and the team is running closed testing toward a September 20 Google Play release.
Roles: I (SJ) own the player, absorb/growth, form branching, save, backend and monetization; HJ owns camera, scenes and menus, lobby and background; WJ owns objects and spawning, threats, difficulty, traits and game feel.
What I built
Player and absorb/growth: Rigidbody movement, size comparison on contact and automatic absorption, growth by volume conservation (sum V = s³, cube root back). The scale punch is separate from growth so feedback survives even when the growth path changes. Six growth stages with automatic transitions, per-stage absorb filters and a zoom-out punch on transition.
Form branching: a fork mid-growth into suction (wide radius), condensed (strong pull) or drifter (fast). Data, controller and selection UI, with the view behind IFormSelectionView so HJ can swap the UI.
Input and save: a self-bootstrapping virtual joystick overlay, a single-file JSON save with an auto save/load binder.
Backend (UGS): anonymous login, cloud save (run save and meta progress under different keys so deleting the run on death never wipes permanent progress), leaderboards that accept only scores a verification script passed, with failures held for retry and rejections dropped. The principle: the game works fully offline when anything fails.
Google Play Games: anonymous accounts are linked to GPGS so the PlayerId survives, device-change recovery, native leaderboard UI with a fallback, gamer-tag sync.
Release work and monetization: Play Console setup, keystore passwords from environment variables, privacy policy and account-deletion pages on a public Pages repo, account deletion in-game, app icon and splash, a rewarded-ad revive button.
How the team works
Interface contracts first: absorption was split by agreeing IAbsorbable { float Size; void OnAbsorbed(GameObject) } up front: I own detection, judgement and growth, WJ owns the implementations and spawning.
Feature branch → PR → main, with scene-conflict rules written down in the first week.
Claude Code as a team tool: the repo’s CLAUDE.md requires syncing with teammates’ work before starting, recording to the backlog after, and writing design decisions with reasons and alternatives. Slash commands (/spec, /decide, /issue, /done, /sync) drive it; over 140 decisions are on record, and a new member gets the commands and codegraph hooks from one setup.ps1.
Minutes by bot: the Discord meeting bot I built records, transcribes and summarizes the weekly meeting into a separate repo.
Lessons
A backend that swallows failures quietly is right for a mobile game: offline, not signed in, GPGS missing are all no-ops, so the game starts first on any device.
Release is policy before code. The day we checked the closed-testing requirement (12 testers × 14 days) in the console set the release date.