Skip to content
Back to projects

Featured project · Case study

WaveLength

Result

Public beta with 6 puzzles and 1,300+ passing tests

WaveLength puzzle in progress: an input sawtooth wired through Divide and Add chips toward target output meters

A browser puzzle game about signal processing, running on a Canvas 2D engine I wrote from scratch in TypeScript.

TypeScriptCanvas APIReactZustandViteVitestClaude Code

Play It


Overview

Each puzzle gives you three input waveforms and three target outputs. You place chips (Add, Divide, Negate, Amp, Offset, Memory and more) and wire them together until every output matches its target. Solve a puzzle and it becomes a chip you can use in later puzzles, so chips can contain chips, all the way down.

The idea comes from signal chains in digital audio workstations. The concepts I used to route and process audio tracks became the game's core mechanic.

  1. Input A
  2. Divide
  3. Add
  4. Output X
A signal chain on the board: chips transform an input wave until the output matches its target.

WaveLength shipped in February 2026 as a public beta with six puzzles, a tutorial, and a creative sandbox mode.

WaveLength ASCII-art logo on a green retro CRT monitor with Home, About, Settings and Play buttons

The retro CRT title screen

The retro CRT title screen
Puzzle in progress: an input sawtooth wired through two Divide chips and an Add chip, with output X matching its target and output Y not yet matching

Mid-puzzle: meters show live output against each target

Mid-puzzle: meters show live output against each target
Solved puzzle: glowing blue wires route inputs A, B and C to outputs X, Y and Z, with all three output meters outlined in green

Solved: wires glow as the signal reaches full strength

Solved: wires glow as the signal reaches full strength
Mid-transition zoom into a level chip on the motherboard, with the chip opening to reveal its gameboard

Zooming into a chip to reveal the board inside it

Zooming into a chip to reveal the board inside it
Motherboard level-select screen: level chips wired in a column, with green lights on solved levels and the next level unlocked

The motherboard level select

The motherboard level select

Technical Highlights

Cycles per edit
256
Routing grid
66×36
Passing tests
1,300+
Puzzles at launch
6
  • Instant evaluation. Every edit re-runs all 256 cycles of the signal right away, so there's no run button. The chip graph is sorted topologically and evaluated in order, and a warm-up pass lets Memory chips wrap around so cycle 0 can read cycle 255.
  • Recursive chips. A solved board compiles into a single function plus metadata that can rebuild it, so the puzzle becomes a reusable chip. Re-saving a chip updates every copy of it on every board.
  • A* wire routing. Wires route themselves across a 66×36 grid using an 8-direction A* search with a turn penalty that favors clean, straight runs and 45° bends.
  • Three-pass wire rendering. Each wire is drawn as a neutral base, a glow that grows as the signal nears full strength, and a polarity color, with pulses animating along the wires in order of graph depth.
  • Zoom transitions. Entering a level zooms the camera into its chip on a "motherboard" level select, with eased camera motion and a spring-eased reveal.
  • Built to last. Full keyboard play with focus management, undo/redo, versioned save migrations, design tokens, and 1,300+ passing tests across 81 test files.

AI-Assisted Development

WaveLength was built with Claude Code as a development partner. The approach focused on context management: planning the work as epics and stories, breaking large problems down, and giving the agent the right context at the right time.

With careful context management, clear specifications, and deliberate architecture decisions, AI-assisted development can produce creative, stable, and unique software quickly.


Impact

The LinkedIn showcase post gained 178 likes and 29 comments, sparking discussion around context management as an emerging critical skill in AI-assisted development. Community suggestions included adding MIDI support and export functionality.