2026·Education · K–12
Most money apps assume you already know what you are looking at. Penny Wise starts where a kid actually is: what a coin is worth, how to hand someone the right change, how to spread a fixed amount across a week. Short two-minute Tutorials walk through it, then open-ended Labs let them play with the idea until it sticks.
The important design decision is what it refuses to do. It is not a fixed curriculum and it does not drift into investing, credit or taxes — it stays at everyday basics, because that is the layer where the confusion actually starts.

Workflow decisions:
- One activity at a time — Lessons are deliberately small — a single question on screen, check the answer, move on. For a twelve-year-old who has never thought about what a coin is worth, a wall of text is a wall of nothing.
- Tutorials and Labs — Tutorials are two-minute guided steps; Labs are open-ended sandboxes. The split lets a beginner be walked through the basics and then poke at the idea without a script telling them what to do next.
- Progress that persists — XP, lessons completed, courses enrolled and courses completed are all tracked server-side, so progress survives closing the tab and carries across sessions on the dashboard.
- Stays at the basics — Counting money, making change, simple budgeting. No investing, credit or taxes — the scope is everyday money, and staying inside it is what makes the rest land.

Architecture choices:
- Frontend: Next.js (App Router), React, Tailwind CSS
- API: Node.js, Express, Mongoose
- Database: MongoDB
- Auth: JWT, bcrypt
- Tests: Jest, Supertest, Testing Library
Impact:
- A twelve-year-old can count a pile of coins correctly after the first module.
- Making change stops being a guess and becomes something they can work out.
- A first budget is something they build themselves, not one handed down.
- The same content scales across a class, since progress is tracked per account.
A note on credit: this was open-source team work, and my GitHub history on the repository shows what I contributed against a shared codebase. The frontend and API split into their own frontend/ and backend/ packages so several people could work in parallel without stepping on each other, with Jest and Supertest on both sides to keep the seams honest.