A portfolio of thin-client visual experiments.
Light, motion, and cues for phones, tablets, and desktop. Nothing to install.
Respects prefers-reduced-motion — freeze + still frame.
Live public signals — world headlines, earth pulse, curious web — braided lightly on the glass. No keys. Phones first.
Ninety-one pure client-side canvases. Light, math, radio waterfalls, cards, jellies. Phones first. Reduced-motion freezes to a still frame. No server bill.
Orchestration layer for multi-agent systems. Spawn, delegate, reconcile. Designed for complex, long-running workflows with verification at every step.
Thomas — dx/dt = sin(y) − b·x, dy/dt = sin(z) − b·y, dz/dt = sin(x) − b·z. RK4 cyclic 3D orbit ≤650 gold pts. Classic / tight / near-period / twin mirror. Pan/zoom/tap seed. Gap vs Rössler fold / Lorenz butterfly / Ikeda map. RM = settled silhouette only.
Rössler — dx/dt = −y − z, dy/dt = x + a·y, dz/dt = b + z·(x − c). RK4 3D orbit ≤650 gold pts. Classic / tight / near-period / twin mirror. Pan/zoom/tap seed. Gap vs Lorenz ODE / Ikeda map / Hénon quadratic. RM = settled silhouette only.
Ikeda map — z′ = A + B·z·exp(i(θ − C/(1+|z|²))). Gold low-alpha orbit ≤650. Classic / tight spiral / near-period / twin mirror. Pan/zoom/tap seed. Gap vs Hénon quadratic / Lorenz ODE / Clifford–De Jong. RM = settled attractor only.
Hénon map — x′ = 1 − a·x² + y, y′ = b·x. Gold low-alpha orbit ≤650. Classic / dissipative / near-period / twin mirror. Pan/zoom/tap seed. Gap vs Lorenz ODE / Clifford–De Jong / Lyapunov λ field. RM = settled attractor only.
Lyapunov field — logistic x → r·x·(1−x) with r switching a/b; λ = mean log|r(1−2x)| after warm-up. Gold chaos, dark stable. Pan/zoom/tap recenter. Gap vs Newton basins / Mandel escape-time. RM = settled field only.
Newton basins — iterate z − p(z)/p′(z) on zⁿ − 1; color by which root attracts, shade by depth. z³−1 default; z²/z⁴/z⁵ presets. Pan/zoom/tap recenter. Gap vs Mandel / Julia escape-time. RM = settled basins only.
Sierpinski chaos game — random vertex, jump fraction (default ½); accumulate ≤650 gold points. Triangle / carpet square / pentagon / twin. Gap vs Fern / Apollonian / Dragon. RM = settled gasket only.
Heighway dragon — paper-fold 90° copies; binary turn sequence; animated folds or draw-on; depth-capped ≤650 segs; gold on #0A0A0A. Gap vs Koch / Hilbert / L-system / Fern. RM = full curve, no draw-on.
Five colored types; pairwise attraction/repulsion (−1…+1). Agents ≤200. Clusters / chase / orbit / chaos. Tap to add. Gap vs Boids / Flock3D / Fireflies / Swarm Lab. RM freezes.
Koch snowflake — recursive 60° bumps; depth-capped ≤650 segments; gold on #0A0A0A. Gap vs Hilbert / Tree / L-system. RM = full flake, no draw-on.
Barnsley fern IFS — classic 4 affine transforms; accumulate ≤650 gold points; tap reseed; optional slow rotate. Gap vs Tree / L-system / Attractors / Apollonian. RM = settled fern only.
Wind-rose HUD — heading-driven particles ≤400 with rose dial. Drag to set heading. Gap vs Flow Perlin field. RM freezes.
1D shallow-water / standing wave height field — tap drops, reflective ends. Gap vs Ripple 2D pond. RM freezes to static profile.
Branching fungal hyphae — tips extend, bifurcate, avoid crowding. Tap spore. Tips ≤200. Gap vs Tree / L-system / Eden. RM freezes growth.
Apollonian gasket — Descartes recursive soddy circles. Tap or DEEPEN. Cap ≤650 (prefer 200–400). Gap vs Voronoi / Poisson / Penrose / Truchet / Crystal. RM freezes shimmer.
Strange map iterate — Clifford / De Jong formulas, accumulate ≤650 gold points at low alpha. Sliders a,b,c,d; tap reseed. Gap vs Lorenz trail. RM settled cloud.
Single hanging chain — N beads ≤40, gravity + distance constraints. Drag endpoints or mid beads. Gap vs Cloth curtain / Springs mesh. RM freezes settle.
Continuous radial symmetry draw — pointer ink mirrored N-fold around center (4–16). Gold fade on #0A0A0A. Gap vs Kaleidoscope mirrored wedges. RM freezes fade.
Lloyd relaxation animate — each site walks toward its cell centroid. Tap to add. ≤80 sites. Gap vs static Voronoi. RM → manual step.
Three-frequency Lissajous — A/B drive X/Y, C modulates depth & alpha. Gold trail ≤500. Gap vs lissajous.html XY pair. RM freezes.
Orthographic 3D Reynolds boids — gold wedges in a cube, drag to rotate. ≤120 agents. Distinct from Boids 2D / Swarm Lab. RM freezes.
Visual Shepard-tone / Risset rhythm analogue — endless rising gold bars or barber-pole spiral stripes. No audio. Cap ≤200. Not Type Rain. RM freezes.
Single gas/jelly pressure blob — closed polygon, edge springs + area constraint. Drag to squish. Vertices ≤40. Not Springs mesh / Cloth curtain. RM freezes jiggle.
Far-field multi-slit intensity on a gold screen — 2D fringes or 1D curve. Sliders: slits 1–5, separation, wavelength. Not Waves pond. RM = static. Phones-first.
Penrose P3 aperiodic tiling — thin 36° & thick 72° gold rhombs on #0A0A0A. Tap or inflate one generation; deflate steps back. Cap ≤400. Not Truchet / Kaleido / Moiré / Crystal. RM disables shimmer.
Involute gear mesh — 2–3 gold gears, teeth ≤40, drag to spin, auto speed. Pitch circles touch. Not Spiro / Fourier. RM freezes auto-spin (drag OK).
Hilbert curve animator — order 1–6, gold path draws cell-by-cell. Replay / pause. Not L-System turtle / binary Tree. RM shows full path.
Brian's Brain — ready / firing / refractory. Gold flashes; fire if exactly 2 firing neighbors. Tap cycle. Grid 40×16. Not Life / Wireworld. RM → manual step.
Site percolation — open cells at probability p; largest 4-connected cluster in gold. Tap reseed. Grid 48×28. Not Eden / DLA / Ising. RM static.
Recamán sequence as gold semicircles on the number line. Animate step-by-step; speed + cap. Not Spiro / Fourier / Lissajous. Cap ≤300. RM → manual step.
Vogel phyllotaxis — golden angle ≈137.5°, r=c√n. Gold dots on dark. Scale / count / slow spin. Tap reseed. Cap ≤400. Not Poisson / Voronoi / Constellation. RM freezes spin.
Wireworld CA — empty / conductor / electron-head / electron-tail. Gold heads race on dim wires. Tap cycle. Diode & clock presets. Grid 40×16. Not Life / Rule 110 / Langton. RM → manual step.
Eden growth — empty neighbors of the cluster randomly occupy. Compact blob, not DLA dendrites. Tap to seed. Cap ≤400. RM → manual step.
2D heat diffusion — tap/drag to add heat, cools slowly, gold intensity. Grid 64×40. Distinct from Ripple waves and ReactDiff. RM → manual step.
Turtle L-system — F / + / − / [ / ]. Presets plant, bush, Koch. Depth capped so segments stay well under 650. Distinct from binary Tree. RM still.
Rotating Truchet tiles — quarter-arcs and diagonals. Tap to rotate. Density / size sliders. Distinct from Kaleido wedges and Moiré grids. RM freezes spin.
Langton's ant — L on dim, R on gold, flip, step. Grid 32×20 (640≤650). Speed slider. Distinct from Life / Hex Life / Rule 110 / Ising. RM → manual step.
2D Ising ±1 spins — gold/dim cells. Metropolis Monte Carlo, temperature slider, tap to flip. Grid 64×40. Distinct from Life / ReactDiff / Sandpile. RM → manual step.
Bridson-style Poisson-disk sampling — growing gold disks, blue-noise packing. Radius slider. Cap ≤200. Distinct from Voronoi sites and Constellation. Tap clear+reseed. RM freezes.
1D Wolfram elementary CA — default Rule 110; presets 30/90/110/184. History scrolls down. Width ≤160, wrap edges. Tap to seed. Distinct from 2D Life / Hex Life. RM → manual step.
Two gold line grids. Drag for phase (X) and angle (Y). Interference fringes — not kaleidoscope wedges. RM freezes drift.
Rotating gold chords on a pin circle — cardioid / nephroid envelopes. Cap ≤200. Distinct from Spiro gears and Fourier epicycles. RM freezes.
Abelian BTW sandpile — cells hold 0–3; ≥4 topples to orthogonal neighbors. Open absorbing edges. Tap/drag drop. Grid 64×40. RM → manual step.
Layered refractive sheets — soft caustic bands. Pointer shifts focus. Sheets ≤12. Distinct from Gleam pebbles. RM freezes.
Vertical aurora as continuous gold ribbons — not Lumen particles. Pointer tilts. ≤8 sheets. RM freezes.
Subtle Kepler debris on inclined rings. Specks ≤200. Distinct from Orbit mass toys. Drag tilts. RM freezes.
Conway-style rules on a hex lattice (6 neighbors). Tap, play, step. Grid ≤48×30. Distinct from square Life. RM → manual / still.
Diffusion-limited aggregation. Tap to seed; walkers freeze into dendrites. Cap ~400 stuck. Distinct from Crystal / ReactDiff. RM → still frame.
Rotating gold arms reconstruct a closed path via discrete Fourier terms. Trail ≤500. Distinct from Spiro gears and Lissajous pairs. RM → still frame.
Gold glyphs rain, drift, and splash on tap. Cap 180. Prefers-reduced-motion settles to a still frame.
Pointer as brush — gold ink blooms, granulates, and fades. Cap 220 droplets. Phones-first.
Agents deposit fading scent and steer toward richer trails plus tap-placed food. Cap 100. Distinct from Flow / Fireflies / Boids. Prefers-reduced-motion freezes to a still frame.
Julia set z²+c. Sliders or SET C drag for complex constant; presets; pan/zoom; max-iter. Progressive downsample for phones. Gold foil on deep black. No audio, no backend.
Classic Mandelbrot escape-time. Drag pan, wheel/buttons zoom, reset, max-iter slider. Progressive downsample for phones. Gold foil on deep black. No audio, no backend.
Classic separation, alignment, cohesion. Pointer attract/repel; sliders for the three forces and count. Distinct from Swarm Lab. Cap ≤200. Phones first. No audio, no backend.
Editable obstacle grid. Tap to paint walls; set start and goal; toggle A* or Dijkstra; watch open and closed sets animate. Clear / regenerate. Distinct from Maze. Cap ≤32×20. Phones first. No audio, no backend.
Animated gold bars. Toggle quicksort, mergesort, or insertion. Shuffle, play/pause, speed. Compare and swap highlights. Array ≤64. Phones first. No audio, no backend.
Conway’s Game of Life in gold. Tap cells, play/pause, step, randomize, clear. Toroidal or edged wrap. Grid ≤64×40 for phones. Phones first. No audio, no backend.
Gold recursive-backtracker maze. Watch corridors carve; SOLVE paints BFS or A* path. Odd dims ≤41×29 for phones. Phones first. No audio, no backend.
Gold curtain pinned to a rod. Gravity hangs the drape; drag to tug; TEAR snaps strands; optional wind. Cap ≤18×14. Distinct from Springs mesh. Phones first. No audio, no backend.
Gold stars on deep black. Lines bloom on proximity. Drag to reshape; optional slow drift. Cap ≤80. Phones first. No audio, no backend.
Gold 2D height-field wave pond. Tap to drop ripples; optional rain mode. Modest grid for phones. Phones first. No audio, no backend.
Gold particles ride a Perlin-style noise vector field. Sliders for noise scale, speed, particle count. Cap ≤400. Phones first. No audio, no backend.
Gold hypotrochoid and epitrochoid curves. Sliders for R, r, d, speed, trail fade; hypo/epi mode. Trail ≤500. Phones first. No audio, no backend.
Soft gold agents that drift and pulse. Optional gentle flocking and pointer attraction. Cap ≤200. Phones first. No audio, no backend.
Gold recursive binary tree. Sliders for depth, angle, branch ratio; optional wind sway. Depth cap 9 so segments stay well under 650. Phones first. No audio, no backend.
Classic gold Lissajous figures. Sliders for freq X/Y, phase, trail fade; optional slow phase drift. Trail ≤500. Phones first. No audio, no backend.
Central gold star. Drag to fling small bodies; trails bloom. Soft N-body mutual pull. Cap ≤40. Phones first. No audio, no backend.
Soft gold blobby isosurfaces. Drag the balls; optional slow drift. Cap ≤12. Field downsampled on phones. No audio, no backend.
Circular wave sources. Constructive bright bands, destructive dark. Tap to place, drag to move. ≤3 sources. No audio, no backend.
Spring-mass gold cloth. Drag a node to tug the mesh. Optional wind or pulse. Grid ≤18×12. No audio, no backend.
Gold cells claim the plane. Tap to plant sites, drag to reshape. Optional slow drift. Cap 80. No audio, no backend.
Classic chaotic butterfly. Tweak σ ρ β, drag to rotate, watch the gold trail fold. Cap 500. No audio, no backend.
Gold atoms in a quiet lattice. Drag to tilt. Grow shells or introduce vacancies. Cap 400. No audio, no backend.
Charged gold dust in a living field. Tap to place attractors, shift-click or long-press for repellers. Field lines bend with every magnet. Cap 400. No audio, no backend.
Draw once. Every wedge answers. Gold ink on deep black with live wedge count, spin, and fade. Phones first. No audio, no backend.
Two chemicals. Feed and kill. Paint seeds and watch gold patterns grow themselves. Pure client-side Gray-Scott. No audio, no backend.
Two rods, four degrees of freedom. Drag a bob, watch the gold trace bloom. Pure client-side RK4. No audio, no backend.
Gold light through a living surface. Drop pebbles, watch the focus. Pure client-side caustics. No audio, no backend.
Open to a short note. Contact stays behind a light tap so scrapers don’t get a free list.