Echo Maze
A pitch-black maze you can only "see" by making sound.
Every ping sends out an expanding ripple that briefly lights up the walls it touches. You navigate from memory, sound, and fading afterimages — one mechanic, readable in five seconds, that no other browser game does quite like this.
⸻ What it is
Echo Maze is a single-file, single-mechanic browser game built around echolocation as a puzzle resource. The board is completely dark; nothing is visible until you ping. Echoes cost a limited budget, so every level is really a question of where and how often you choose to look, not just how fast you move.
The game ships three ways to play, all built on the same core loop: Mode What it is Campaign 10 handcrafted levels of rising difficulty — open rooms, a branchy dead-end forest, one-way corridors, shifting walls, and a finale with a decoy exit. Daily Maze One shared maze for everyone, seeded by the UTC date. Same maze, same start, one run — the Wordle loop, with a spoiler-free shareable result card. Endless Procedurally generated mazes that never end. Depth increases, the echo budget shrinks, and walls start to drift. One life — how deep can you get?
Gameplay
|
Campaign |
Daily Maze |
Endless |
The four echoes
Echo types are earned as you clear the campaign — each one changes how you read a level, and older levels start to feel different once you have all four. Echo Unlocked What it does Cost Ping From the start A standard 360° ripple. Reveals a medium radius around you as it expands and fades. 1 Beam After Level 3 A narrow directional cone aimed the way you're facing. Cheap, and it sees much further than a Ping — great for scouting corridors. 0.5 Pulse After Level 6 A slow-moving ripple that lingers far longer once it reveals a wall — trade speed for a lasting afterimage. 1.5 Flare After Level 9 A single expensive flash that reveals almost the entire room at once. One-shot, use it wisely. 3
Switch between unlocked echoes with keys 1–4, or tap the icons in the HUD.
Features
- Echo-reveal core mechanic — walls only exist visually for as long as the last echo that touched them hasn't faded
- 10 campaign levels with per-level par times/echoes and three-star scoring (clear → under-par echoes → under-par time)
- Level gimmicks: pure dead-end mazes, one-way corridors (discovered by trial, not sight), shifting walls that open and close on a timer, and a decoy exit that plays a dissonant tone instead of a win chime
- Daily Maze seeded by UTC date, so every player gets an identical layout with zero server work
- Streaks — a paper stamp card that tracks consecutive days played
- Endless mode with a shrinking echo budget and increasingly drifty walls, scored by depth reached
- Ghost replays — race a faint ghost of your own personal best, or the current #1's ghost on the Daily
- Personal bests + global leaderboards for every campaign level, the daily maze, and endless depth
- Fast restart (R) — no menus, no load screens
- Juice: screen-shake on wall bumps, a soft chime pitched to your distance from the goal, ripple particles, and paper-tear screen transitions
Controls Action Input Move Arrow keys / WASD / on-screen d-pad Emit echo Space / click or tap the board / ping button Switch echo type 1 2 3 4 Restart level R
Look and feel
Soft paper-craft on a pitch-black board. #f6efe4 paper cream, #2b2b2b ink, #e07a5f terracotta for echoes and the goal, #3d8361 sage for the player. Revealed walls render as torn-paper shapes with grain and drop shadow, so they read as cut paper lit up on a dark table. Headings are set in Fraunces, body text in Karla.
Tech
Echo Maze is a single self-contained HTML file — no build step, no bundler, no dependencies to install.
- Game rendered on a with a requestAnimationFrame loop; maze levels are generated at runtime, not stored as static data
- Mazes are built with a recursive-backtracker generator, then loosened with a tunable "openness" parameter to create loops, open rooms, or branchy dead-ends
- Daily and endless mazes come from a seeded PRNG (mulberry32) — the daily seed is derived from the UTC date string, so every player's maze is identical without a server
- One-way passages and shifting walls are modeled as edge-level exceptions layered on top of the base maze graph
- Audio is generated in-code via the Web Audio API (oscillators + envelopes) — no audio assets to download
- Ghost replays are stored as compact {t, x, y} path samples
- Personal bests, streaks, and shared leaderboards persist through a simple key-value storage API
Running it
cd /xxxxx/xxxx/Downloads/src npm run dev
Or serve it (recommended, since some browsers restrict features on file://):
python3 -m http.server 8000
then visit http://localhost:8000
A note on persistence
Personal bests, streaks, and the shared leaderboards use a lightweight key-value storage API that's available when this game runs inside a Claude.ai artifact. If you deploy index.html standalone (e.g. plain GitHub Pages), that storage layer won't exist — the game will still run, but scores won't save between visits until you swap in your own backend (or localStorage for a single-device version). This is the one piece worth budgeting time for if you're taking Echo Maze beyond a demo.
Known limitations
- Leaderboards are last-write-wins, not concurrency-safe — fine for a demo, not for a competitive product
- There's no real account system; a display name is all that identifies a leaderboard entry
- Mobile controls are a basic on-screen d-pad; swipe gestures aren't implemented yet