Inspiration

I built Mitten for my own kid. I wanted them to pick up words in more than one language, and every app I tried was either a flashcard deck in a costume or a game that taught nothing. Kids don't want lessons. They want to race, slice fruit and solve a mystery, and they want it to be about their things: dinosaurs, space, the cat next door.

So the question became: can a parent describe a game in one sentence and get back something a child actually wants to play, with the learning hidden inside it?

What it does

A parent picks a language, a kind of game, and what their child loves, or types their own word list ("the words from this week at school"). Mitten builds a finished, painted game around it:

  • Word Rush: hear a word, steer your kart to the right sign
  • Fruit Storm: slice the letters of the word in order
  • Temple Dash: run the temple and turn at the doorway showing the word
  • The Missing Crown: hear a word, then find that object in a painted room
  • plus Adventure, Wish Garden and more: eight game families in total, and eleven ready-made games that are free and unlimited

Behind a grown-ups gate, parents get a report of every word their child has met, from "just met" to "mastered", and can choose how much help the game gives: Helpful, On their own or Challenge.

Four rules shaped every screen:

  1. The learning hides inside the play. No quizzes, ever. You don't answer "what is perro?"; you drive through the dog.
  2. Leisure, never anxiety. Learning moments are untimed and nobody fails.
  3. Personal, not samey. Fixed machinery must still produce games that feel different.
  4. Suggestions sit beside the free-text box. Presets never replace what a parent types.

How we built it

Mitten was built by one parent, with AI tools doing most of the typing. The path there was not a straight line.

Starting on Replit. I started on Replit, because it got an idea running fastest. It did, but the credits ran out almost as quickly. I bought more, and the agent kept looping and spending. At some point I had to be honest with myself: I was paying for motion, not progress.

Moving to Claude Code. I exported the project, cloned it to my own machine, and carried on with Claude Code. That changed how I worked. Instead of asking for a feature and hoping, I kept a running project log of what shipped, what was half-done and every bug that had already cost me an afternoon, so each session started from the truth rather than from memory. That was enough to get the first version into a closed test with real families.

Chasing game feel. The first version worked, but it didn't feel like a game. It felt like a form with pictures. So I used Astra to mock up what each screen and game should look like, and Claude Code built toward those mocks. From there it became a loop: record the game on a phone, review it frame by frame against the mocks and against the games kids already love, write down every rough edge, fix, record again. Some games went through more than fifteen of these rounds before they felt right.

One decision that held everything together. Early on I decided the AI would never write the game itself. It writes a plan for the game, a blueprint that is checked against strict rules, and a fixed game engine plays it. That meant I could let the AI be creative about the story, the words and the world, while the thing a child actually touches was built and tested once, by hand. Every polish pass improved every game the AI would ever make.

Money, from day one. RevenueCat handles subscriptions on both stores. The app and the server agree on who the customer is, and the server checks the Premium entitlement itself before building a new game, so a limit can't be bypassed from the phone. Each custom game costs real money to generate, so we limit how many games a parent can build, never what kind: one free, then 5 a month on Premium. The ready-made games stay free and unlimited.

Challenges

  • App Store review for a kids' app. Our first iOS submission was rejected under guideline 5.6. We went through the Resolution Center and then a formal appeal to the App Review Board before approval. Lesson: write the review notes as if the reviewer is suspicious of "AI" and "kids" in the same sentence, and answer before they ask.
  • Google Play production access. It was refused the first time ("requires more testing"). We ran a proper closed test with real families, reapplied, and got it.
  • Making AI output safe to render. Early on, over a third of generation jobs fell back to a seed game. Every quality gate had to be ordered, explained and fed back into a correction pass. The rule that saved us: a mapping cannot fix a collision. One game family was briefly stored under another's name and shipped broken within the hour.
  • Bugs you only see on a real device. A Spanish game that said "coche" but asked the child to slice C-A-R. A game that froze when the screen rotated back to portrait while the page was still closing. Every one of them now has a test that fails on the old behaviour.

Accomplishments that we're proud of

  • Kids asked for it. My kid started playing Mitten, then his friends joined in, and they kept asking me when it would be in the store so they could ask their parents to install it. No metric has felt better than that.
  • My first app, live on both stores. I'm a web developer and had never published a mobile app. Mitten is my first, and it's a kids' app, built solo, approved on the App Store (after a rejection and an appeal) and on Google Play (after being refused production access once).
  • Eight kinds of game on one engine, and eleven ready-made games that work offline, free and unlimited.
  • A child who can't read yet can play alone. Every word is spoken, nothing is timed, and nobody loses.
  • Real languages, spelled properly. Spanish, French, German, Hindi, Malayalam and Arabic word packs, and a child in a Spanish game slices p-e-r-r-o, not d-o-g.
  • AI that can't hurt a game. The AI never puts code on a child's screen; it only writes a plan the engine checks and plays. When a generation fails every check, the parent gets a hand-made game, not an error.
  • Polish we can prove. Thousands of automated tests, and a test for every bug a real device showed us, written so it fails on the old behaviour.

What we learned

  • Constrain the model, not the child. A schema plus a fixed engine gave us creative variety and safety. Free-form generated code would have given us neither.
  • Test the thing a parent sees, not the thing we merged. Most of our worst bugs passed every unit test and failed on a phone in a kid's hands.
  • Pricing follows cost structure. Measuring what a generation really costs decided the whole paywall.

What's next for Mitten

More word packs, sharing a child's worlds with grandparents, and letting a finished world suggest the next one based on the words the child is still learning.

Built With

Share this project:

Updates

Submission history