- Status
- ActiveIn active development.
- Started
- Updated
- Role
- Game Design, Systems Architecture, Economy Design, QA, Release Management, Development Orchestration
- Built with
Overview
Bounce Tax is an endless arcade game for iPhone and iPad built on one joke taken completely seriously: every bounce is taxed.
You steer a ball down an endless procedurally generated shaft with one thumb. The ball’s mass is simultaneously its size, its health and its key — big balls smash through barriers, small balls slip through loopholes, and every hard landing takes a slice of mass as tax. Shrink to nothing and you are audited, which is death. Distance descended is the score.
The design goal was never twitch speed. It was skill plus permanent progression: ordinary runs should last 20–30 seconds, a good run should feel earned, and 1,000m should be exceptional.
The Loop
The interesting property of the mechanic is that the resource you spend and the resource you survive on are the same thing. There is no separate health bar to watch, so difficulty communicates itself visually — a struggling player is literally smaller.
Depth is the difficulty curve. The shaft tightens with descent and layers in harsher tax brackets, moving hazards, ice, spikes, saws, phantom platforms, breakable barriers and stage-specific themes.
The systems stacked on top of that are all designed to make a run swing:
- Streaks raise the coin multiplier until a taxed bounce breaks them, so clean play compounds and one sloppy landing costs real money.
- Tax Holiday is the fever meter: charge it with clean play and taxes stop entirely while coins double.
- Loopholes reward threading gaps only a small ball fits through — the game’s way of paying you for being nearly dead.
- Jackpot smashes turn breakable barriers into coin showers when you are heavy enough to break them.
- Power-ups — Tax Shield, Filing Extension, Wrecking Ball, Magnet and Capital Flight, the last turning you into a high-speed untaxable wrecking machine for a few seconds.
- Landmarks — H&R Block, IRS Field Office, Big Four HQ, The Treasury, The Caymans, Fort Knox — give depth recognisable destinations instead of leaving it an abstract number.
The CPA Exam
The first 500m of every run is a licensing gauntlet. Dedicated room templates bring barriers and spikes from the first drop, deliberately ahead of the ordinary difficulty ramp, and retire once the exam is passed — so the deep game never sees them and the shaft visibly opens up on the other side.
Passing is treated like earning a licence. The game tracks total passes, consecutive passes, fastest pass and clean no-tax-bounce passes, with CPA-themed achievements — Senior CPA, Partner, Big Four Material — carrying exclusive ball unlocks. The pass line was later moved from 350m to 500m so that clearing the exam lands exactly on the IRS Field Office landmark.
The Tax Vault
The prestige layer is deliberately independent of how well you played. Every banked run contributes Audit progress regardless of coins earned; completing an Audit cracks a vault, and ten of them finish a Tax Season. Filing a season grants permanent Audit-efficiency prestige and starts a harder one without touching upgrades or collection.
The filing screen is presented as an absurd tax return — Distance Declared, Income Reported, Loopholes Exploited, Sharp-Object Deductions — ending in a taxpayer classification like RECKLESS, FLIGHT RISK or MOSTLY COMPLIANT.
Meta progression
Coins buy permanent upgrades across bounce protection, spike and saw survival, starting mass, income, fever, smashing and power-ups. Gems are far scarcer and go to revives, premium balls and deeper ball training. There are roughly 101 collectible balls with different unlock methods and small perks, and each ball trains through many levels — so collecting one is the beginning of its progression rather than the end.
Retention systems sit inside the run loop rather than beside it: an IRS Letter every six to eight runs offering a rewarded-ad refund boost on the next one, daily envelopes with deterministic rewards, Special Audits that make one run unusually valuable, and locked achievement balls shown as silhouettes with rumour text instead of exposed unlock conditions.
The results screen is built around one more run. Rather than showing ten progress bars, it surfaces the single strongest piece of unfinished business — 12m short of a personal best, a CPA streak just lost, a death short of the next landmark. Every run banks coins and Audit progress, so almost nothing feels wasted.
How It Is Built
Bounce Tax is a React Native / Expo / TypeScript app, started from my own AppStarter foundation rather than from scratch, so the boring shipping surface — navigation, theming, settings, storage, error handling — existed on day one.
The architecture keeps the game and the app strictly apart:
src/game/core/is the simulation, with no React or Expo imports at all: a custom deterministic 2D physics engine running a 240 Hz fixed step, procedural assembly of 20 authored chunk templates, and the bounce-tax/pop/revive rules. Seeded RNG throughout —Math.randomnever appears in the simulation.- Skia draws it at 60 fps, with the renderer, HUD and result sheets layered over a simulation that neither knows nor cares about them.
- Two files hold every tunable number:
constants.tsfor how the world feels — gravity, tax rate, corridor widths, difficulty ramp — andbalance.tsfor how progression pays. Tuning is a numbers edit, never a code hunt. - Zustand over a versioned, sanitising save handles the meta layer, with migration paths built in before there were any users to break.
The property I care about most is the solvability contract. Generated rooms are machine-checked for a valid path before they can appear, and a headless autopilot runs the simulation without a renderer to prove both solvability and balance in CI. It is the difference between a death reading as a missed read and a death reading as the game cheating.
That is enforced by the test suite — over 300 automated tests covering the engine, chunk validity, solvability, economy, progression, saves, ads and the screens themselves — with regression coverage added alongside each new system rather than after it.
How It Was Made
The working process is the same one I use across my projects: I am the product and game designer and the final decision-maker, ChatGPT is the design and review partner for mechanics, economy math and player psychology, and Claude Code is the implementation agent inside the repository.
The leverage comes from where the thinking happens. The mechanic, the economy curves, the UX and the edge cases get argued out first; only then does the implementation prompt get written, and it is explicit about modifying the existing architecture rather than re-scaffolding it. Thirty-plus recorded sessions of that, each with a handoff note, is how a joke about bounce physics became a game with a prestige loop.
Shipping
The iOS build goes out through EAS and App Store Connect, not just a simulator. Set up for Apple: bundle identifier com.bouncetax.app, Game Center entitlement with a Classic leaderboard for best distance, iPhone and iPad support, portrait-only gameplay, TestFlight and App Store Connect metadata, and the ad and IAP requirements that come with shipping a free game.
A validated App Store binary exists as 1.0.0, build 7. Game Center was the piece that forced a correction to the build setup on the way there — an entitlement is not real until a build carries it.
The Tuning Position
The first balancing pass is not sacred. The written CPA design says a fresh ball should struggle badly with the opening gauntlet; playtesting showed an unupgraded Level 1 ball cruising far past where it had any business surviving.
The tempting fix is to rewrite the fiction so the implementation is “correct”. The right fix is to treat it as a tuning defect and make the game match the design. That is the work in front of the launch: ordinary runs at 20–30 seconds, longer runs earned by upgrades and skill, and 1,000m staying exceptional.
Milestones
The mechanic found its joke
Mass became size, health and key at once, so every bounce spends the thing keeping you alive.
Deterministic engine and solvability contract
A 240 Hz fixed-step simulation in pure TypeScript, with generated rooms machine-checked for a valid path before they can ship.
The Tax Vault prestige loop
Added Audits, Tax Seasons and the tax-return filing screen, so a bad run still pays into something permanent.
The CPA Exam
Turned the opening stretch into a licensing gauntlet with its own streaks, records and achievement balls, and moved the pass line to 500m.
Validated App Store binary
1.0.0 build 7 cleared validation through EAS and App Store Connect with Game Center, IAP and ads wired. Launch pending.

Bounce Tax



