Skip to content

FM Consulting

ChemQuest

A gamified chemistry practice app for high-school students — short adaptive sessions, mistake tracking, and level-locked modules that turn weak spots into strengths.

Gallery

Case study

The problem

High-school chemistry students often understand a concept in the moment and still lose it by exam time — the same mistakes resurface across stoichiometry, atomic structure, and bonding with no structured way to catch a specific weak spot and come back to it. Most study tools are either static reference material that doesn't adapt to what a student is actually getting wrong, or full learning platforms that are too heavy for someone who just wants a focused 10-minute session before a test.

The solution

ChemQuest breaks practice into short 10-question sessions across topic modules, with each module's levels unlocking one at a time as the previous one is mastered. Every mistake is tracked individually and resurfaces through dedicated retry modes — retry just the mistakes, retry a full session, or a targeted retry on one specific weak spot — and the dashboard leads with a continue panel, a weak-spots card, and a daily goal so there's always one clear next action instead of an open-ended pile of material. Difficulty (easy/normal/hard) changes more than question difficulty: it also changes the interaction itself — multiple-choice versus typed answers, and whether hints and quick-theory refreshers are available — so the same content serves both a first pass and a harder later review. Chemical structures render as real interactive diagrams rather than plain formulas, so a question about ammonia or benzene shows the actual bonded structure alongside the numbers.

How it was built

Progress, mistakes, badges, and session history are stored entirely client-side, a deliberate choice to let a student start practicing with zero signup friction — a real constraint for a tool that has to be useful in the five minutes before a test, not after an account-creation flow. Completion, level-locking, and "mastered" status all resolve through one shared completion rule rather than being computed separately in different places, specifically so the dashboard, the level cards, and the module-complete screen can never disagree about whether a level is actually done. Analytics were built as a provider-agnostic layer from day one — every meaningful action emits a typed event through one internal event stream, so wiring up a real analytics destination later is a matter of pointing that stream at a provider, not re-instrumenting the app.

More projects