A fast, offline mental-math trainer with deep practice analytics.
Ten practice modes, six themes, installable PWA — and every stat is computed on your device.
▶ Live demo · Features · Analytics · Getting started · Privacy
Math Workout generates mathematically sound problems across addition, subtraction, multiplication, division, roots and exponents, times you against the clock, and then shows you exactly where you're slow and what trips you up — speed trends, accuracy, carry-load difficulty and per-question error anatomy. It's a PWA: install it, and it works fully offline.
- 10 practice modes — Addition, Subtraction, Multiplication, Division, mixed sets, Arithmetic Memory, Multiplication Tables, Square Root, Cube Root and Exponents.
- Difficulty levels that scale the numbers sensibly for each mode.
- Time vs. question limits — race a 60-second clock or complete a fixed set.
- Multiplication Tables module — drill only the tables you choose (e.g. just the 13× and 14×).
- Learn mode — step-by-step methods for the trickier modes.
- Six themes (light, dark, forest, sunset, purple, nothing-light), responsive and mobile-first.
- Installable PWA — offline-capable via a service worker; add it to your home screen.
- Backup & restore — export/import your entire history as a single JSON file.
The part that makes it more than a quiz. Everything below is computed on your device from your saved history, with charts powered by Chart.js:
- Speed & accuracy trends over time (rolling median, first-attempt rate).
- Carry-load difficulty — how much harder carries/borrows make a question for you.
- Error anatomy — which columns (units, tens, …) and magnitudes you miss most.
- Most-missed & slowest questions, attempts distribution, per-day activity, and more.
100% local. No account, no backend, no analytics beacon. Your practice history lives only in your
browser's localStorage, and the backup file stays on your machine. Nothing is ever uploaded.
Requires Node 18+.
git clone https://github.com/kktheglider/MathWorkout.git
cd MathWorkout
npm install
npm run dev # http://localhost:5173Build for production:
npm run build # outputs to dist/
npm run preview # preview the production buildIt's a static Vite build — deploy dist/ to any static host (Vercel, Netlify, GitHub Pages,
Cloudflare Pages, S3). It's configured to serve from the root by default. To host it under a
sub-path (e.g. example.com/math/), set base: '/math/' in vite.config.js — the router and service
worker read the same base automatically.
React 19 · Vite 8 · React Router 7 · Chart.js / react-chartjs-2 · lucide-react · oxlint. No backend, no database — a pure client-side app.
MIT — see LICENSE.

