Blog

Notes from the workshop

What we've learned building and shipping our own apps, written up for anyone planning one.

RSS feed

Badges without counters: awarding achievements from data we already had

How we added tiered badges to Braineos with one new table, no stored progress counters, and a backfill that had to share a database with three live sites.

Lessons in steps, and text that reads your way

How we split CertBrain and Finance Brain lessons into steps without touching a word of their content, and added reader text settings that never flash the wrong size on load.

Shipping a web game as its own Android app, from code we already had

How Brain Defense went from a canvas game on braineos.com to its own Play Store app, reusing the game's rules byte for byte and rebuilding only what the phone needed.

Learner analytics from data you already have

How we gave Braineos learners a Progress page and profile totals without a schema change, a chart library or a single estimated number.

Balancing a tower defense game where gold comes from flashcards

How we turned an old idle tower defense prototype into a quiz game for Braineos, and used a headless bot to tune it so knowing the cards wins and ignoring them loses.

CertBrain is on Google Play: the third app from one mobile codebase

CertBrain's Android app is live. The third app built from one React Native codebase was mostly configuration, plus one new feature, a diagnostic you can take before you sign in.

Scoring exam readiness from spaced repetition

How we turned Leitner review boxes into a per-domain readiness score for CertBrain, why one weak domain blocks "ready", and the cramming bug we had to fix first.

Finance Brain is on Google Play: one React Native app, two store listings

Finance Brain's Android app is live. Here's how one mobile codebase now builds two apps with their own names, icons and Play listings, and what we fixed on the way.

Introducing CertBrain: exam prep where every question has a source

CertBrain is our new study site for the AWS Certified AI Practitioner exam. Here's how a third product launched on the same platform, and why we treated the content as the hard part.

One codebase, several products

How we turned a flashcard app into a platform that launches focused learning sites, without forking the code or maintaining two apps.

What Google Play checks before your app goes live

The forms, URLs and testing rules that stand between a finished Android build and the Play Store, from a studio that ships its own apps through them.

Learning a codebase with flashcards and Claude Code

We built a Claude Code plugin that turns a folder of code into a spaced-repetition deck of its key concepts. Here's why, and what makes a good card about code.

One pipeline, many sites: our Docker and Woodpecker setup

How a small studio deploys several independent apps from one CI server and one modest droplet, and the scheduling gotcha that silently stopped a site from deploying.

Two events and a funnel: what we measure with PostHog

Why our apps track only a sign-up and one meaningful first action, why we chose PostHog Cloud over self-hosting, and the questions that small setup answers.

How we run a team of AI coding agents

Several Claude Code sessions working at once, across several apps. The roles, the shared issues repo, and the status files and decisions log that keep them coordinated.

Adding AI features without surprise bills

Quotas, cheap models for small jobs, and features that fail quietly. The patterns we use to put AI into apps with predictable costs.

Async development with Claude Code's Remote Control

Starting agent work at the desk and checking in from a phone. How we use Remote Control to keep long-running coding sessions moving away from the keyboard.