2026-10-21

It has been a while since I last posted, and the reason is simple: I have been busy being a dad. That comes first and always will. In the quieter evenings I have still been building, and three projects have come out of it: The Bounty: Contract Hacker, Dino Dash and Ember.

The one I have spent the most time with is the game. In The Bounty you are a freelancer taking bounties from factions and companies, routing through hijacked devices to reach a target, doing the job and getting out before security works out where you came from.

It started as a straight homage to the hacker sims from around the turn of the century: grey windows, a world map of phone lines, email from an anonymous agency. It played well. It also looked exactly like the year it was paying tribute to, and when I sat down with it on the phone the question was obvious: how do you keep the game and lose the decade?

> Rename, do not redesign

The answer that worked was to treat it as a translation job. Every mechanic survived, it just needed a word from this decade. Bouncing through relay computers became hopping through hijacked smart cameras, home routers and cloud VMs. The trace became a detection meter that moves through Anomaly, Alert and Incident, which is how a real security team would talk about you. The investigation that follows you home became a threat hunt, working back along your route one hop at a time. Firewalls and proxies became auth gates and sentinels. Bank accounts became wallets.

None of the numbers changed. The same route still buys the same number of seconds. But the fiction now matches the job I actually do, and that makes the decisions in the game feel more real than the old phone-line map ever did.

> Email is not how anyone talks

The old version delivered everything by email, which is not how anyone receives a job from a criminal any more. So the inbox became a chat app with named contacts, typing indicators and threads grouped by sender, and the news page became a social feed with handles and share counts. It is a cosmetic change on paper, but it changes how the story reads. A handler who sends you three short messages feels like a person. A handler who sends you a memo feels like a template.

> More reasons to come back

The original had one story arc and then an endless board of procedural jobs, which is fine until it is not. I added three factions who post the bounties, each with a rival who notices when you work for the other side, and perks that change the maths of a job rather than just adding a bonus. There is a Daily Bounty at double pay with a streak, and two more story arcs, each ending in a choice that changes the world afterwards. The last one has a real ending.

> The rules have no idea there is a screen

The decision that made all of this cheap was made on day one: the game rules live in one module with no DOM in it. That meant I could rewrite the entire interface, every screen and every bit of copy, and then prove nothing had broken by playing the game headlessly in Node. The test runs the tutorial, builds faction standing until the perks unlock, plays all three story arcs and gets itself burned, checking the state after every step.

It is plain JavaScript, no framework and no build step, wrapped as an iOS app with Capacitor so it gets haptics and a proper home screen icon. It is running on my phone now, and the plan is TestFlight next, then the App Store.

The other two are on the projects page: Dino Dash, a dinosaur stunt racer whose most important testers are my three and six year olds, and Ember, my own Debian build.