Showcase

Things I built that you can look at.

Visual and generative web experiences โ€” WebGPU shaders, real-time data scenes, interactive explainers. The engineering is the design. No off-the-shelf shaders, no canned scenes.

Featured ยท WebGPU

Nebula Forge

A single-page WebGPU experience: a real-time market wire โ€” latest news, FX, crypto, M&A โ€” streamed through an audio-reactive cosmic particle field. The simulation runs entirely on the GPU; every particle's position, velocity, and color is computed in a custom compute kernel each frame. A multi-pass post-processing graph handles bloom, chromatic aberration, and glitch beats; a scroll-driven signature transition collapses the field into a wormhole at the boundary of the news desk.

Built mono-first with a strict no-off-the-shelf-shaders policy โ€” the technical recipe is intentionally small, and most of the visual weight lives in a couple hundred lines of shader code.

  • GPU-resident particle simulation in a custom WGSL compute kernel.
  • Multi-pass post-FX graph: bloom, chromatic aberration, beat-synced glitch.
  • Live market wire (news, FX, crypto, M&A) is the visualization's input signal.
  • Scroll-driven wormhole transition into the news desk.
WebGPU WGSL compute Audio-reactive Post-processing graph Real-time market data Mono-first

GPU Simulation

Per-particle state (position, velocity, color) lives in storage buffers and is advanced by a hand-written compute pass each frame. The CPU does scheduling, not physics.

Post-Processing

Bloom โ†’ chromatic aberration โ†’ glitch compositor, all GPU-side. The beat-synced glitch reads an audio envelope sampled in JS and uploaded as a small uniform.

Data-Driven Scene

The market wire isn't cosmetic โ€” news, FX, crypto and M&A ticks modulate forces in the particle field. The data feed is the scene's input signal.

Mono-First Recipe

No third-party shaders or scene kits. The visual identity is intentionally small โ€” a couple hundred lines of WGSL doing all the heavy lifting.

More coming

Slot reservedThe next piece lands here.
Slot reservedThe next piece lands here.
Slot reservedThe next piece lands here.