Lab

Interactive demos and experiments. Each one runs live in your browser.

WebLLM In-Browser Chat

On-device LLM running entirely on your GPU via WebGPU. Multiple model sizes (0.5B to 1.5B), streaming responses, zero API calls. No budget for API hosting, so I shipped the model to the user's GPU instead.

WebGPU LLM WASM Qwen2.5

Kill the leader

Five real Web Workers running Raft on your CPU. They elect a leader; you terminate its thread and watch the recovery measured and decomposed into detection, campaign and replication — a different number every click, because none of it is animated. Safety invariants gated over 500 fault schedules in CI.

Raft Consensus Web Workers Fault injection

Low-Poly Cicada

A cicada built from Three.js primitives at runtime — no model file, no loader, no asset request. A few hundred flat-shaded triangles with a shoulder-hinged wing rig that feathers through the stroke. Adjustable wingbeat, orbit camera, wireframe view.

Three.js WebGL Procedural Low-poly

WASM vs JS: a 218-byte hand-written module

Three implementations of one 7-rule scoring pass, measured on your CPU: objects with branches, flat typed arrays, and a 218-byte WebAssembly module written by hand without a Rust toolchain. Includes a dated correction of what this page used to claim.

Rust WASM TypedArrays Benchmark

ArchDogma

Honest static analysis for Python — catch circular imports, god modules, and tight coupling before they become postmortems. Open-source core on PyPI plus a paid Pro Kit.

Python AST Static Analysis PyPI