Inspiration

Kids in preschool and early elementary school often meet numbers as abstract symbols before they ever get to touch what those numbers represent. A soroban (abacus) makes numbers physical: every bead you move is a unit you can see, count, and group. We wanted a simple, focused app that lets a child build a number on a 100-bead soroban with their own finger — nothing more, nothing less — and that also respects how a parent actually wants to manage a kids' app: know who's signed in, control the subscription, and be able to delete the account and data on request.

What it does

AiDEPT for Abacus shows a target number and asks the child to build it by dragging beads on an on-screen 100-bead soroban (10 rows of 10). A counting mode is pre-selected when the parent first sets the child up, and it can be switched at any time from the home screen:

  • Count one by one — every bead counts as one, for children just learning to count
  • Count by place value — beads are grouped by place value (ones, tens, hundreds...), including carrying and borrowing, for children ready for place-value thinking

A problem only counts once the child actually moves a bead on it — opening the screen or tapping "Check" alone doesn't use it up. Two wrong tries bring up a hint. The app is free for 3 problems a day; after that, a simple parental gate (add two two-digit numbers) stands between the child and the subscription screen, so a young child can't accidentally start a purchase.

Signing in with a Google or Apple account is required to use the app — not because the practice screen needs an account, but because purchases, purchase restore, the child's counting-mode setting, and account deletion all need to be tied to somebody. We learned the hard way (see below) that skipping this creates a real problem.

Finishing problems earns stamps. The child collects one stamp a day on a monthly calendar, and points toward opening new sticker series — fruit, flowers, animals, sea creatures, dinosaurs and the characters from our own children's programme. Ten points opens one series of twelve stickers, and the child picks which sticker to place. The goal is that a child who finishes today's practice has something to come back for tomorrow.

How we built it

  • React Native (Expo, TypeScript) for the app itself, sharing UI and i18n infrastructure with our sibling apps in the same monorepo
  • Firebase Authentication (Google and Apple Sign-In) gates every screen behind a single AuthRedirectGate — there is no path into practice, paywall, or account screens without being signed in
  • Firestore stores the child's counting-mode preference against the signed-in account, replacing an earlier on-device-only design
  • RevenueCat, backed by a Node.js backend on Google Cloud Run, handles the monthly/annual subscription, purchase restore, and — on account deletion — cleans up the RevenueCat customer record and revokes the Sign in with Apple token so a deleted account can't silently keep using paid features
  • A per-device free-quota counter (a device identifier and that day's count, with no name, email, or account ID attached) enforces "3 problems a day"

Challenges we ran into

The biggest one arrived late: during our own pre-submission testing, we found that a device could purchase a subscription without ever signing in, which meant we had no way to know who had actually paid. Earlier TestFlight builds had sign-in as optional, on the assumption that requiring an account for a kids' counting app was unnecessary friction. That assumption was wrong the moment real money was involved. We redesigned the app around a mandatory, single-entry-point login gate, removed anonymous Firebase sign-in entirely, and rebuilt the Google/Apple sign-in flows to be as direct and simple as possible for a parent to complete once.

We also had to carry forward local data from before that change: devices that had used an earlier build already had a counting-mode preference saved anonymously on-device. Rather than discard it, we migrate that local preference into the newly signed-in account the first time each returning device logs in.

Accomplishments that we're proud of

  • A single, well-tested authorization gate (resolveAuthGate, with its own unit tests) that every screen in the app goes through — no screen can accidentally ship unauthenticated
  • A free daily quota and parental gate that add just enough friction to protect a child from an accidental purchase, without adding friction to actually practicing math
  • Full account deletion, including RevenueCat customer cleanup and Apple Sign-In token revocation, verified end to end

What we learned

Requirements you write down before you have real users are hypotheses, not facts — "sign-in should be optional to reduce friction" sounded reasonable until real-device testing showed it broke the one thing that actually mattered (knowing who paid). Building a small, isolated app is a good way to learn that lesson cheaply, on a soroban-practice screen, before it happens somewhere more expensive.

What's next

A practice log for parents — how long each problem took, which ones needed a second try — so a parent can see progress without standing over the child's shoulder. And continuing to build out the rest of the counting-mode content beyond the initial 100-bead soroban screen.

Built With

Share this project:

Updates

posted an update —

Behind the build: how we shipped two apps in a month with a team of AI agents

We published a write-up of how this project was built, in Japanese, on note.

AiDEPT for Parents and AiDEPT for Abacus were both built and released on the App Store within about a month. I wrote none of the code myself. Working around a day job, I gave instructions mostly from my phone, and a team of AI agents (Claude Code) did the development. My role was to make decisions and do the final checks.

Part 1 (free) covers how the team grew from a single agent to six, split by role, and what actually became the bottleneck: not how fast the AI writes code, but how fast a human can review and decide.

Read Part 1 (Japanese): https://note.com/aigent_co/n/n2cc7ab9a253b

Log in or sign up for Devpost to join the conversation.

Submission history