Practice apps for anything you want to learn

The mill that makes you good at anything.

A quizmill pack is a real practice app that finds your weak spots and keeps them coming back until they stick — for exams, school, work, kids, or plain curiosity. Free, offline, no sign-up.

Coming soon — type any topic and quizmill writes the whole pack for you.

12weak spots
3left by Friday

The main event

It hunts your weak spots.

Most quiz apps give you a score and a shrug. quizmill keeps a map of every question you have answered and spends your time on the red squares.

Your question mapDay 1
Weak Shaky Getting there Solid
12weak spots left in this pack

Day one: half the pack unmet, and a dozen questions already red.

1Get it wrong → into the queue

One wrong answer is enough. The question joins your mistake queue, and the count sits on the home screen until you clear it.

2Review serves only those

The review flow re-asks exactly the questions you have not rescued — oldest miss first, so a stale mistake cannot hide under today’s slips.

3Normal practice leans the same way

Sessions favour questions you have never seen. Once the set runs dry, the repeat round takes your mistakes and whatever you have not seen for longest.

4Get it right → rescued

One correct answer clears it — and so does getting any question on the same topic right, because what you were missing was the concept, not that sentence.

Try it

Can you get 5/5 first try?

The bundled Solar System pack, live — not a screenshot. Miss one and it goes into the mistake queue; here it comes straight back so you can watch the rescue in one sitting.

Solar System Practice · live

Who it's for

Whatever you're learning.

Same engine, wildly different packs.

🎓

Exams

GCSEs, A-levels, professional certs, driving theory. Set a pass mark and it estimates whether you are ready yet — honestly, with a confidence band.

GCSE BiologyA-level ChemistryDriving theory
✏️

School

Ten minutes on the bus, or before bed. Short sessions, no login, nothing collected.

The periodic tableFractions & decimalsFrench vocabulary
🧸

Kids

Two-option questions, pictures instead of paragraphs, stickers to earn and an arcade to unlock.

Times tablesCapital citiesThe human body
💼

Work

Onboarding, certs, product knowledge. Keep the pack in a private repo — it never leaves your control.

Kubernetes networkingAWS Solutions ArchitectGDPR basics
💬

Languages

Verb tables, vocabulary, the grammar that never sticks. Drilling is exactly what languages want.

Spanish subjunctiveJLPT N5 kanjiGerman cases
🌍

Just curious

No syllabus and no exam — just the things you would like to actually know.

Capitals of the worldMusic theoryHuman anatomy
Music Theory Practice · image questions

Not just words

Questions can be pictures.

A pack can put an image on the question — read the stave, name the planet, spot the bone — or make the images the answers and ask you to pick one. That unlocks music, maps, anatomy, and the non-verbal reasoning that school entrance exams love.

Try both kinds here — this is the new Music Theory Practice pack, where 81 of the 102 questions are image-based.

No lock-in, ever

Your questions are yours.
We just built the mill.

✈

Offline first, not offline “supported”

Every pack installs to your home screen and keeps a copy of itself on the device, so it opens on a plane, on the tube, or in a classroom with no signal. Your progress, streak and weak-spot map stay on the device — and sync, if you want it, goes to a database you own.

◧

Packs are files you own

pack.json, questions.json, scenarios.json — three plain files you can read, copy and back up anywhere. Keep them private, share them with a class, carry them on a USB stick. Anything you generate here you can download and run yourself, forever, with no part of us involved.

⚙

We make the engine and the registry

That is the whole business: a good practice engine, and a registry to find packs worth practising. Not your data, not your attention, not a subscription to your own revision notes. Delete your account — there isn't one — and your packs still run.

Sync without an account

Your progress, in a database you own.

Practise on the phone at breakfast and the laptop at night, or let a parent see how the revision is going — with the history saved to your own free Cloudflare account, not ours. Under the hood it's a small database that belongs to you, on a free plan with room to spare.

🔑

A key, not an account

QM-H3KDA-P9RWX-T2MNQ-C7FGB

No email, no password, no sign-up flow. The app generates a key locally; type it on another device and the two are linked — like a wifi password for your practice history. The server never stores the key itself, only a scrambled fingerprint of it.

∞

Free, and it stays up

  • 100k syncs a day
  • 100k answers saved a day
  • 5 GB of space
  • £0 — and it never expires

Orders of magnitude more than practice generates — and nothing expires while you are not looking, so the pack you pick up after the summer holidays still has its history.

▲

And the app is yours to host

A pack app is just a folder of files, so it can live on your own free Cloudflare website — your address, your account. It works the same on GitHub Pages, Netlify, or a USB stick.

One sync database quietly serves every pack you own.

Or just say this to your coding agent

Set up quizmill sync on my own Cloudflare account and deploy this pack to Pages.

That is the whole instruction. The step-by-step guide ships with the project, so a coding agent — or a technical friend — can do it in about two minutes. You never touch a dashboard, and none of it belongs to us.

The registry

Find a pack. Or publish yours.

Any GitHub repo with a valid pack is installable by anyone, private repos included. Write a good pack once and everyone gets to practise it.

« find one, run one, publish one »
npx quizmill list
npx quizmill run quizmill/pack-world-capitals
npx quizmill validate my-topic && git push

Browse the full directory →

Swap packs like cartridges

Every pack becomes its own app.

Name, icon, colour and categories all come from the pack itself — and you never reinstall to change subject. The app has a pack shelf: browse the directory from inside it, insert a pack with one tap, eject it, swap back. Progress is kept per pack, so switching costs nothing.

⊕ Add to Home Screen — works offline

Three ways in

However you like to work.

available now

Run a published pack

Pick one from the directory and start practising in a minute.

  • Every pack is a full app — weak spots, stickers, charts
  • Works on your phone, offline, free
  • One command if you like terminals, none if you don't
Browse the packs →
for makers

Write your own

A pack is a folder of files. Write it, or hand it to your coding agent.

  • npx quizmill new my-topic and edit the JSON
  • The validator is the contract — agents loop until it's clean
  • Nothing leaves your computer unless you publish it
Read the docs
coming soon

Type a topic

Say what you want to learn and quizmill writes the whole pack — categories, questions, explanations — then opens it as your app.

  • Every question checked before it ships
  • A guided step-by-step builder for when details matter
  • Your topic, your level, your app — in about a minute
claude — ~/quizmill
{
  "schemaVersion": 2,
  "id": "gcse-physics",
  "title": "GCSE Physics",
  "homeSubtitle": "Forces, waves, electricity.",
  "themeColor": "#8b3dff",
  "categories": [
    { "key": "forces", "label": "Forces", "weight": 0.4 },
    { "key": "waves",  "label": "Waves",  "weight": 0.3 },
    { "key": "elec",   "label": "Circuits", "weight": 0.3 }
  ]
}
[
  {
    "id": "gcse-physics-forces-001",
    "categoryKey": "forces",
    "difficulty": 2,
    "prompt": "A skydiver reaches terminal velocity. What is true?",
    "options": [
      { "key": "A", "text": "Weight is greater than drag" },
      { "key": "B", "text": "Weight and drag are equal" },
      { "key": "C", "text": "Drag is greater than weight" },
      { "key": "D", "text": "There is no drag" }
    ],
    "correctKey": "B",
    "explanation": "Terminal velocity = zero resultant force.",
    "reviewStatus": "reviewed"
  }
]
[
  {
    "id": "bulb-brightness",
    "title": "The dimming bulb",
    "stem": "Two identical bulbs in series. A third is added.
What happens to the brightness of the first two, and why?"
  }
]

What are you bad at?

Pick a pack and start. It hunts what you get wrong until you don't — free, offline, and yours to keep.