Wants to move fast
Confident, impatient, loses interest the moment something feels like busywork. Needs challenge and a reason to keep going — so his version leans on harder tasks, longer reading, and a progression system that actually escalates.
StudyMate is a learning companion I built for my two sons. It teaches across their school subjects, keeps track of what they've already covered, reads with them, talks with them, and quietly tells me how they're going. It isn't for sale. It's the hardest thing I've built, and it runs at home every day.
Every tutoring app I looked at made the same assumption: one student, one level, one way of learning. My two are eighteen months apart and could not be less alike. The same app would have been wrong for at least one of them, and probably both.
So the design started from a constraint rather than a feature list — one codebase, two genuinely different experiences, with the differences expressed as configuration rather than forked code.
Confident, impatient, loses interest the moment something feels like busywork. Needs challenge and a reason to keep going — so his version leans on harder tasks, longer reading, and a progression system that actually escalates.
Capable, but complex text loses him halfway through and he stops. His version has a reading mode that takes a long sentence apart and shows him the spine of it, plus a gentler pace and a lower starting reading level that rises as he does.
Anyone can wire a chat window to a language model. What took the time was deciding what the thing should refuse to do.
Real-time voice conversation was the obvious choice and I built toward it — until I costed it properly. Two boys, forty minutes a day, came to roughly $185 a month against a budget I'd set at $100.
The alternative — record, transcribe, respond, speak — lands around $88 with about a second of latency. For a child asking a question about homework, one second is nothing. I shelved the better technology because it wasn't the better decision.
The app asks how they're feeling, and that data shapes how it responds — a low mood shortens the session and softens the tone. It would have been trivial to surface all of it on my dashboard.
I show myself a weekly average and nothing more. If a fourteen-year-old knows a bad Tuesday gets reported to his father, he stops answering honestly, and then the feature is worse than useless — it's just surveillance that also breaks the thing it was measuring.
Get three in a row wrong and the app notices — but there's no penalty, no lost streak, and the word "failed" appears nowhere. It steps in, offers help, and the score is untouched.
The same rule governs praise: the companion character is banned from saying "Great job!" It has to name the specific thing that was done well, or say nothing. Generic encouragement from a computer is worth exactly what it costs to generate.
A hard rule in the system prompt, not a guideline: the AI never compares them, in either direction, for any reason. No "your brother finished this in ten minutes," no "you're doing better than he did."
It's the single easiest way to make a child hate a piece of software, and the easiest thing in the world for a language model to do by accident while trying to be motivating.
The thing that makes it feel like a tutor rather than a chatbot is memory — and memory that survives closing the app. It's stored in three layers, each with a different lifespan and a different job.
Held in memory, kept separately per subject. Switching from maths to English doesn't wipe the maths thread — come back an hour later and it's still there.
Strengths, weak points, reading level, what's been covered. This is what gets loaded into every conversation so the tutor starts already knowing who it's talking to.
Every archived conversation, score and session, in a local database. This is what the progress tracking and the parent dashboard read from.
The interesting bit happens on close. When the app quits, every subject that was used that day gets distilled — the conversation is condensed into what actually mattered, folded into Layer 2, and the raw transcript archived to Layer 3. Next time it opens, the tutor has forgotten the chatter and kept the substance.
Different subjects go to different models, chosen on what each is good at and what it costs. Maths and language don't need the same engine.
Real news articles pulled in and rewritten to the right reading level, with fallbacks so the pipeline never leaves a child with a blank page.
They read a passage out loud; it scores pace and accuracy, and nudges the reading level up when they've earned it.
Screenshot, PDF, spreadsheet or scan — parsed on the machine itself. Documents never get shipped to a cloud service.
A question button that's live on every screen and bypasses the task system entirely. Curiosity shouldn't have to wait for the exercise to finish.
Break reminders that adapt to mood, and a daily ceiling that arrives as encouragement rather than a lockout.
A points system tuned so that showing up on a bad day still counts for something.
Native-quality Mandarin pronunciation for listening practice, alongside speaking and character work.
A separate small server on the home network showing progress, highlights and a weekly letter. Never exposed to the public internet.
This is the part that transfers to client work. Building fast with AI is easy; building something that still works in six months is a different discipline.
A single file records what is actually implemented, separately from what was planned. When code and documentation disagree, that's treated as a question to answer — not something to paper over by editing whichever one is easier.
Certain areas — how memory works, how sessions are kept, how data is stored — can't be changed as a side effect of some other task. Touching them halts the work and requires an explicit decision first.
Changes to anything core get reviewed by an independent AI reviewer that only reports problems and has no authority to approve its own suggestions. It catches real bugs. It doesn't get to decide architecture.
Thirteen numbered stages, each with its own acceptance criteria, each signed off before the next one starts. No stage gets marked done because it looks done.
StudyMate is in pre-pilot. The core is built and tested and the boys use it, but a handful of end-to-end checks are still open and it has never been packaged as an installer.
It is not a commercial product, not available to buy, not used by any school, and not something I'm claiming otherwise. It's here because it's the most honest demonstration I have of how I build — including the parts that aren't finished.
Most business problems are considerably simpler than teaching two teenagers. If something in your week keeps eating an hour, tell me what it is and I'll map out what an assistant for it would look like.