Inspiration

Most learning apps run on a clock and a scoreboard. A child who stalls gets a red flash, a buzzer, and a streak that starts to punish them. For a child with ADHD or dyslexia, that is the moment they stop trying. We wanted to build the opposite: the lesson adapts to the child, and the child never has to adapt to the lesson. So Moye has no timer anywhere. This was also built to help my namesake cousin.

What it does

Moye is a free learning app for kids with ADHD, dyslexia, and neurotypical kids. It shows one question at a time and reads it aloud on request. A wrong answer gets a hint, with no buzzer and no lost points. Moyin the honey badger stays beside the child, and any lesson can be stopped without losing the honey already earned.

  • Placement: six skippable questions find the child's real starting level.
  • Curriculum: the sums follow the child's curriculum and currency, such as naira on the Nigerian curriculum.
  • Voice: narration works in English, Nigerian Pidgin, Yoruba, Hausa and Igbo.
  • Reading support: a dyslexia panel changes spacing, font, text size and motion in one tap.
  • Rewards: honey buys cosmetics for Moyin, capped at 50 drops a day, after which the app says "Done for today".
  • Grown-ups: parents and teachers get a plain-language weekly report and a class list.

It works with no signup and installs as an offline app.

How we built it

Moye is built with Next.js 16, React 19, TypeScript and Tailwind, and it installs as a PWA. A service worker precaches the screens, and the fonts are served from the app, so lessons and dyslexia spacing work with the network off. Read-aloud uses the browser's own speech.

The rules that matter are plain functions, with no model in the loop:

  • lib/mastery.ts: Bayesian knowledge tracing moves a child between three difficulty tiers.
  • lib/honey.ts: the honey economy and daily cap.
  • lib/streak.ts: streaks that rest instead of resetting.

The How Moye Decides page re-runs those same functions on committed cases, so anyone can check them. Lessons and all 90 questions are JSON validated with zod, and a test renders every question in every theme and locale. State lives in local storage, with optional Postgres through Drizzle that the app never needs. The repo has 159 tests, and the full demo path passes both online and with the network off.

Challenges we ran into

  • Keeping the demo honest offline. The whole path had to run with Wi-Fi off, so nothing could depend on a live service.
  • Read-aloud cut off mid-sentence. Browsers dropped speech utterances early until we kept them alive.
  • Layout under accessibility settings. Dyslexia spacing and large text broke headers and rows at phone width, and we fixed them down to 375px.
  • Hydration errors for returning visitors. Saved comfort settings caused a mismatch between the server render and the first browser render.
  • Calm and still useful. Removing timers, red flashes and lost points meant difficulty had to move for a better reason than a clock.

Accomplishments that we're proud of

  • A product with no timer, no buzzer and no streak guilt that still adapts.
  • Every decision is arithmetic you can read, and the working is shown on a public page.
  • It runs fully offline and sends nothing to a server.
  • A child's honey survives stopping a lesson at any moment.
  • Five narration languages, including Nigerian Pidgin, Yoruba, Hausa and Igbo.

What we learned

  • Calm is a design constraint you have to enforce everywhere: copy, colour, motion and the order of screens all matter, not just removing a timer.
  • Accessibility settings change layout, so we test them at phone width instead of assuming they work.
  • Keeping decisions in plain tested functions made the app easier to trust and to check.
  • Writing down what is real, what is partial and what is unmeasured kept us from overstating anything.

What's next for Moye

  • Measure whether it works. Today there is no study, no control group and no learning outcome data, so we make no efficacy claim. We want to run it with real classrooms.
  • Share a class across devices. Classroom mode is local only. A join code labels a class but doesn't open it elsewhere, because there is no server.
  • Grow the reading and phonics subject. It is 10 skills and 30 questions in English, a first pass and not a full curriculum.
  • Add a hosted sync option for families and teachers who want it, without changing the offline default.

Built With

Share this project:

Updates

Submission history