Systems worth the call

A browser space shooter. WASM physics, multithreaded AI squadrons, WebGPU rendering — 60fps, no install.
WEBASSEMBLY · WEBGPU · ASSEMBLYSCRIPTRequires a WebGPU enabled browser, such as Chrome.
Follow a link and you're in a match in about a second — but behind that is a real-time physics simulation, a few hundred enemy ships each running their own AI, and a WebGPU renderer holding 60 frames a second.
Momentum flight and one honest goal: last as long as you can and run the score up.
MovementMouse to steer, wheel to throttle, space to brake. Momentum-based, so a hard turn costs speed and overshoot is real.
EnemiesYou're rarely fighting one ship. Bots hear your gunfire and converge, and squads coordinate their approach.
Three livesSpend all three and you get the DESTROYED screen — level, time, kills, streak, and score for the run. Then respawn.
High scoreKills feed a combo multiplier, and score doubles as your level — so the better you do, the tougher the ships that come.
The enemies aren't one behaviour with a difficulty dial. They have temperaments, they group up, and something above them paces the fight.
Each bot is one of ten archetypes — snipers hold range, berserkers boost in and don't break off, defenders shield whatever they're escorting — over three skill tiers. Close in, they form squads, take anchor / flanker / rusher roles, and focus your weakest side. Named rivals persist in IndexedDB and return harder; the toughest become Aces that read your strafe bias and preferred range. A director walks between probe, assault, encircle, and withdraw to keep the pressure moving.
You fly with a single weapon. The upgrade you earn by surviving — and lose the moment you slip.
The Pulsar is a single high-damage bolt that rewards aim over spray. Clear every tenth level and you're granted double bullets — two shots at once. It doubles as armor: the next lethal hit spends the double instead of killing you, dropping you back to a single stream; reach the next decade and you earn it back.
Score is the only currency — and it's also your level, on a quadratic curve that scales enemy skill as you climb. Roughly once a minute a boss surfaces: 5,000 hit points, six tentacles.
No game framework. The load-bearing parts are hand-written across WebAssembly, Web Workers, and WebGPU, tied together by a shared block of memory.
The main thread does very little — input, HUD, and pushing draw commands to WebGPU. A game worker owns the simulation, and a pool of AI workers each reason about a slice of the fleet in parallel. That split is what lets the frame budget survive several hundred live ships; even audio is a WASM synth in an AudioWorklet, off the main thread.
JavaScript is quick until you ask it to grind millions of floating-point operations a second over big arrays. Then the GC and dynamic types cost you frames.
At a few hundred ships the per-frame work — physics, collisions, flocking, target scans — is a tight numeric loop over large typed arrays, and an unlucky GC pause becomes a dropped frame. So the hot paths are written in AssemblyScript and compiled ahead of time into nine WebAssembly modules: predictable machine code, manual memory, no collector to stall on. Collision and perception share an 8,192-bucket spatial hash to keep proximity queries near O(1), and the physics kernel is fused — gravity, damping, and border forces in one pass, crossing the JS↔WASM boundary once a frame.
Splitting the AI across workers only helps if the threads can see the world without shipping it back and forth.
Workers normally communicate with postMessage, which structured-clones — copies — everything it sends. Copying a few hundred ships from the simulation thread to the AI threads every frame would burn the whole budget on serialization. A SharedArrayBuffer avoids it: it's one region of memory mapped into every worker at once, so the AI threads read the exact array the game worker writes. A bot checking a target's position is a single indexed load, not a round trip.
Each ship is a fixed stride of 33 floats. The game worker writes those slots; the AI workers read the very same ones — no message, no copy.
ships[i·33 + k]Measured at 700 ships and two thousand debris fragments. The whole AI layer — perception, flocking, rivals, squads, the adaptive Aces — costs about 0.03ms a frame, against a 1.5ms budget. That headroom is what keeps everything locked at 60fps.

A memorization app. Record yourself reading a passage, then play it back and speak along until it's yours. iOS, late 2026.
IOS · AUDIORecord yourself reading a passage aloud. Play it back in quiet moments and speak along, until the passage lives inside you, not in your phone.
mermr — the low, practiced voice you use to turn words over until they are yours.
Long before print, psalms and stories and laws lived in the mouths of people: recited, handed down, remembered. Memorization wasn't a trick — it was how meaning stayed close. mermr is that habit, in your pocket.
Play back your own recording and say the words along with it. When the passage comes back to you without help, mark it memorized. No tricks — just your voice and repetition until it's yours.
LibraryFolders of passages, memorized or still learning.
PassagesA built-in Bible — pick any book…
Chapter…then the chapter and verses.
PracticeYour recording, a scrub bar, and a loop.
There's nothing to listen to but you — no app voice, no stock recording. You hear the pace you chose and the emphasis you found.
Recordings are captured with the Web Audio API and stored on-device in IndexedDB — they never leave your phone. Optional speech recognition lines the words up with the audio, and the whole thing works offline.