Inspiration

Brewmancer started at the kitchen table. My son is six. The whole idea is his. He wanted a game about a wizard who brews potions and has to survive his own experiments gone wrong: the monsters, the attacks, the potions, how everything should move and fight. He designed it on paper. I am the one who can type.

So we made it. A little browser game: one wizard, fifteen minutes, an endless horde of failed alchemical experiments. Your brews fire themselves. You move, you position, you outlive. He drew every mob and told me how it should behave ("this one runs away when you get close, then throws stuff"), invented the attacks and what each brew should do, and I went and implemented exactly that. When a build felt wrong, he was the first to say so.

We played it together on the laptop for a couple of months. Then he asked the question that changed the project: could his friends play it on their parents' phones?

That is the real reason this app exists. The browser version was ours. The iOS app is for other parents and kids: something a family can pick up on a phone or an iPad, with no account, no ads, no timers, and nothing that a six-year-old can accidentally buy. A game a child can be proud of showing to someone.

What it does

Brewmancer is a pixel-art survivor roguelike for iPhone and iPad.

  • One Brewmancer, one 15-minute run, a boss at the end.
  • Weapons fire automatically; you draft upgrades mid-run and discover reactions between brews.
  • Three expeditions with completely disjoint content: different enemies, bosses, weapons, reactions, active powers, terrain, and music. Nothing is a reskin.
  • Base Lab is free forever: the full expedition, its boss, its leaderboard, the whole upgrade pool.
  • Brewmancer Pro is a single $4.99 lifetime unlock for The Verdant Still and The Starfall Conduit. No subscription, nothing to cancel.
  • Game Center leaderboards, fully offline play, no account, no ads, no tracking.

The mobs, the attacks, the active abilities, the bosses: they come from my son, not from me. My job was to build what he described and to keep it fair. When we argued about an ability, he usually turned out to be right, and I had to rebalance the whole draft pool around him. The expeditions themselves started as his "what if" questions: what if the plants fight back (that became The Verdant Still), what if you could bounce a shot off a wall (that became the Prism Scepter in The Starfall Conduit), what if the floor could pull you around (that became the Gravity Rails).

How we built it

Chapter one: the browser. TypeScript and PixiJS, built with Vite. Keyboard, mouse, and Xbox controller support. It is still live and free at brewmancer.online, because that version belongs to the two of us and I never wanted to put a price on it.

Chapter two: the wrong iOS app. My first attempt was the obvious one: wrap the web game in a React Native WebView. It worked, technically. It also felt wrong. The transition between the native shell and the game was disconnected, touch controls fought the browser, and the whole thing looked like a website in a box. My son noticed before I admitted it.

Chapter three: the real one. I rebuilt the game natively in Swift. SwiftUI owns the product: home, expedition selection, settings, the Field Guide, the paywall, the HUD overlays. SpriteKit owns the real-time gameplay. The browser game became a read-only reference for mechanics, timing, and art language, and every enemy, weapon, and reaction was reimplemented with hand-authored, nearest-neighbor pixel art.

Money, done carefully. Purchases go through the RevenueCat SDK on top of StoreKit 2. Pro is a non-consumable, so a family buys it once and it is theirs on every device; access is rebuilt from RevenueCat's entitlement and never from a local flag. The paywall shows Apple's localized price, restore is strictly user-initiated, and the free tier is a complete game rather than a demo. Because I want a child to be able to play this, there is nothing in the app that nudges anyone toward spending.

Everything else. GameKit for leaderboards, PostHog for anonymous run metrics so I can see where difficulty spikes, and a privacy manifest that declares exactly what the app does: no collection, no tracking.

Challenges we ran into

  • Touch is not a keyboard. Moving and casting at the same time on a phone took several iterations. The final design lets a second finger cast while the movement finger stays down, and level-up drafts use a two-step confirm so a small thumb cannot pick the wrong upgrade by accident.
  • Three expeditions that share nothing. Keeping the rosters fully disjoint (six basic attacks, six reactions, ten passives, eight active powers, plus enemies, bosses, terrain, and music per expedition) meant the draft system, HUD, and Field Guide all had to be content-driven rather than hard-coded.
  • Throwing away a working app. Shipping the WebView wrapper would have been faster. Rebuilding natively was the right call, but deleting months of work was not easy.
  • Listening to a six-year-old. Nothing humbles you like a kid handing your phone back and saying "this part is boring." He was right, and that part got cut.

Accomplishments that we're proud of

  • The app is live on the App Store, released August 20, 2026, and a child can show it to his friends.
  • The free tier is a whole game. Nobody has to pay to have a good time.
  • Every expedition feels like a different world, and every creature and attack in them was designed on paper by a six-year-old before a single line of code.
  • A monetization model I am not embarrassed to explain to other parents: one price, once, forever.

What we learned

  • Kids are brutal, honest playtesters, and the game is better for it.
  • The right platform matters more than the fast platform. A game that feels native gets played; a game that feels wrapped gets deleted.
  • RevenueCat let me stop thinking about receipts and entitlement edge cases and go back to thinking about enemies and reactions, which is what my son actually cares about.

What's next for Brewmancer: Roguelike

  • More expeditions, designed the same way: by him, on paper, at the kitchen table, before I write anything.
  • Balance passes driven by real run data and by whatever players tell me is unfair or boring.
  • Keeping the browser version free and up to date, so anyone can try it without a download.

Built With

Share this project:

Updates

Submission history