The problem
Hitme is for people who are tired of wellness apps that talk down to them. It blocks the apps you pick. You bank minutes by staying off them, then spend those minutes slowly or bet them against the house at blackjack and seven other games. The stakes are minutes, never real money.
Who did what
I wrote the product rules, locked the game payouts and made the calls the audit listed as mine, such as how much a loss should cost. Claude Code built the app, the game engine and the Kotlin module that does the blocking. Pushes, store submissions and production builds wait for my approval.
Constraints
- Android only, with one portrait layout in dark mode.
- No backend of its own and no analytics.
- The game engine is pure TypeScript with a seeded random generator, so a test can deal the same hand every time.
Math.random()is banned in game logic. - The blocker has to hold up against its own user trying to get around it.
The trade-off
Losing a bet used to cost nothing, which gave players about +38% expected value in the riskiest mode. In 0.6.0 a loss locks the blocked apps for six times the bet, capped at four hours, even with minutes in the bank. The game got harsher so the blocker would work.
Outcome
- Version 0.5.2 is public on Google Play. 0.6.0 is built but not yet tested on a device.
- Before 0.6.0, an audit confirmed 114 defects out of 166 raw findings, 2 of them critical. Most are fixed; 4 were deferred and 1 I chose to leave as it is. Six review rounds over the fixes found 80 more problems, mostly caused by the fixes themselves.
- During the audit the TypeScript tests went from 648 to 1,163 and the Kotlin tests from 151 to 251, all passing.
- 167 commits from April to October 2026.
How it was built
- Three project agents, each with its own memory folder:
blackjack-engineowns the game logic,ui-builderports the design mocks (“Tokens are law”), andsecurity-auditorhunts for ways around the blocker. - The security auditor’s threat model is the user: “Hitme defends against the user themselves.” Its memory keeps a log of every bypass it found.
- The 0.6.0 audit ran 17 finder agents, then 2 or 3 verifiers per finding. Every behaviour fix needed a test that failed against the old code.
- A
port-mockskill turns a design mock into a screen step by step.
