Work / mindquest-showcase
mindquest-showcase
MindQuest — an educational adventure game where maths, general knowledge, flags and chess drive three story arcs. Public overview; source is private.
Source on GitHub ↗ · Talk to me →
Readme
An educational adventure game where the learning is the plot. Answer mathematics, general-knowledge and flag questions to advance three branching story arcs — or step away and solve chess puzzles.
Built with Next.js 16, React 19, TypeScript, Tailwind CSS v4 and Firebase.
Source lives in a private repository. This repo is a public overview.
Game modes
The three stories
- Whispers at Dawn — a girl who always knows the answer learns that saying it out loud is a separate skill, and a learnable one.
- The Last Seal — every question answered breaks another seal, and the thing behind them has been waiting a long time.
- Library of Infinity — an archive that stores not knowledge but the act of knowing, and the three forces trying to end it.
Chapters are authored as plain JSON, so dialogue, scene backgrounds, music cues and image prompts share one schema that a model can extend.
Every chess puzzle is provably correct
The puzzles are all forced mates by design. That is the one class of chess problem whose correctness is decidable by exhaustive search, so no level can ever mark a genuinely winning move wrong.
Nothing ships unverified. A build script proves, for each of the 35 positions:
- the FEN is a legal position
- a forced mate exists in exactly the stated number of moves — no faster
- the stored solution really is a mating move
- no position is duplicated
This caught real errors: of the first seven positions written by hand, five were unsound — blocked files, missed escape squares, a queen that could not pass through its own king. All were replaced with searched positions.
Moves are graded by whether they preserve the forced mate rather than by matching one memorised line, so alternative winning continuations are accepted. Solution trees are precomputed at build time, which takes move grading from ~3.2 s to ~0.5 ms.
Design
A monochrome "Cinema" system: black, white and a gray scale, with colour spent only where it carries meaning that shape and position cannot — rewards, danger, success. Themes resolve through CSS light-dark(), so the correct palette paints on the first frame with no flash and no blocking script. Both light and dark clear WCAG AA contrast.
Progression
XP and seven ranks from Bronze to Legend, coins, daily-login streaks, weekly missions, achievements, avatar customisation, and cosmetics unlocked by finishing story arcs.
Tech
Next.js 16 App Router · React 19 · TypeScript (strict) · Tailwind CSS v4 · Framer Motion · Zustand · Firebase Auth + Cloud Firestore · Socket.IO · chess.js · Stockfish WASM (analysis only — never an opponent) · Vitest
More work
plc-checkweigher
One-command installer for the Mitsubishi PLC check-weigher system. Python · Raspberry Pi · Mitsubishi PLC · PDF Reports · npm CLI
checkweigher
High-speed industrial check-weigher on the edge. Python · Raspberry Pi 4 · XT1000 · T16 Load Cell
Tovex-CRM
Modular CRM platform with real-time dashboards. TypeScript · TypeScript · Modular Architecture · Real-time Dashboards