This is a submission for the June Solstice Game Jam
What I Built
Turing's Dawn is a browser puzzle game where daylight is a resource that drains in real time, and the only way to hold back the dark is to break the codes a vanished mind left behind.
On the longest day of the year, the light starts running out. You're stranded in the seam between the longest day and the shortest night, and a daylight meter drains the entire time you're solving. Six chambers, six codebreaking disciplines — a Caesar dial, a binary sunrise, a logic-gate garden, the pattern of days, an honest-to-goodness Turing machine, and a final Vigenère "Dawn Key" assembled from every fragment you collect. Solve a chamber and you claw some light back; stall, and the screen literally closes in — a vignette deepens, the edges bleed red, and a heartbeat starts up under the music.
My goal was to make the solstice theme mechanical, not decorative. "Longest day → shortest night" isn't a backdrop painted behind a cipher game — it's the pressure. Daylight is a real, draining clock, so the theme becomes a verb you can lose. And the whole thing is an ode to Alan Turing, who broke codes to push back a darkness of his own, and whose dawn came far too late.
Video Demo
https://youtu.be/kwdbez-77X8?si=WnSFTmtgGdSi5NRe
Code
https://github.com/pooja-bhavani/Turing-s-Dawn
How I Built It
Stack: React + TypeScript + Vite, Tailwind v4, Framer Motion for the juice, the Web Audio API for a drone / heartbeat / solve-chime built entirely in code, Google Gemini for adaptive hints, and Vitest for the engine. No game backend — it's a static site.
A few decisions I'm happy with:
- The clock changes everything. Light drains on a requestAnimationFrame loop while you play. That one mechanic turns "decode this string" into "decode this string before the dark wins" — and the soft-fail, the heartbeat, the vignette, and the score chase all fell out of it. To keep it fair, the timer pauses during narrative beats and end screens, and failure is soft: run out of light and the chamber waits — you rekindle and retry with no progress lost.
- The chamber I'm proudest of — "The Bombe." It doesn't ask you to describe a Turing machine; it makes you run one. You get a tape, a head, a state, and a rules table. You read the cell under the head, the matching rule lights up, you Step — head moves, cell rewrites, state changes — until it halts, then lock in what the tape reads. It animates a pure, unit-tested traceTuring() engine, so the UI is just drawing real machine configurations one step at a time. That's the ode I wanted: not a portrait of Turing, but a few minutes spent thinking the way his machines did.
- Every cipher is a hands-on instrument, never a plain text box: a Caesar dial you rotate, binary sunrise lamps you tap to read each byte, a logic-gate garden of switches that light the network live, sequence tiles for the pattern, the step-through Bombe, and the Dawn Key that aligns your collected fragments under the final Vigenère cipher.
- A living, AI-powered hint guide (Google Gemini). When you ask for help, gemini-2.5-flash reads the puzzle and the attempt you just typed and writes a fresh, in-character coach line that escalates with the tier. The hard part was spoiler-safety — LLMs love to blurt the answer — so the architecture is built to prevent it (details below).
- Built to be provably solid. The whole cipher engine is pure TypeScript — no React, no DOM, no side effects — so it's fully unit-tested with Vitest. Every chamber in the data file is proven solvable, every verifier proven to reject near-misses, and the Turing trace is tested to agree with the run-to-halt result and to terminate even on pathological rule sets. The game is data-driven: adding a chamber is a JSON entry, not new code.
- Accessible by default. Keyboard-playable throughout, prefers-reduced-motion aware, ARIA live regions announce the light meter / hints / narrative, color is never the only signal, and the synthesized audio only starts on your first click with a mute toggle that persists.
Prize Category
Best Ode to Alan Turing. The whole game is built around him. Every chamber is a codebreaking puzzle in the lineage of his work, and the hero chamber — "The Bombe" — puts you inside an interactive Turing machine: you step the head across the tape, watch rules fire and the state change, and run it to halt yourself. The narrative honors a man who broke codes to push back a darkness of his own. The draining daylight is the pulse; the Turing tribute is the heart.
Best Google AI Usage. The hint system isn't a static lookup table — it's a living guide powered by Google Gemini (gemini-2.5-flash) that reads your actual attempt and writes an adaptive, in-character nudge that escalates by tier (reframe the goal → name the technique → point at the next step). What I'm proudest of is the spoiler-safety architecture, since letting an LLM near a puzzle game is genuinely risky:
- The canonical solution is never sent to Gemini — the model can't leak what it never sees.
- Each chamber's authored hint is passed as a ceiling of specificity; the model may rephrase and adapt, but a strict systemInstruction forbids it from ever exceeding that or stating the decoded answer.
- It's one clean seam (getHint → Gemini → authored fallback). If there's no key or the call fails, the game falls back to authored hints — so AI enhances the experience rather than gating it, and the game stays fully playable either way.
An ode to Alan Turing. Race the dark. Keep the light.
Top comments (0)