◂ BACK TO PROTOTYPESTHE HUBVISUAL ENGINE
SCINTILLA · VISUAL ENGINE LAB · v1

The range we can play with.

Seven live techniques, each running real code on this page — no video, no mockups. Move your cursor over every panel; they all react. These are the building blocks for moving the hub from passive readouts to a living, tactile canvas.

How to use this: each panel names the technique, shows it running, and states what it costs and where it belongs in the hub. Pick the ones you want and they get lifted into SCINTILLA as-is — every effect here is plain canvas/WebGL with no library and no CDN, so it drops straight into the single-file hub. Panel 6 is the answer to "cohort compare, but as a video" — that shape is called a waterfall / heightfield, and the animated form is a temporal replay.
01Living CoreWebGL · fragment shader

Where it belongs

Ambient state for the hub — behind the logo menu, the SCENES room backdrop, or the chat panel while the agent thinks. Turbulence rises with market heat, so the background itself carries the Geiger reading.

Cost & technique

One fullscreen quad, ~40 lines of GLSL. Simplex-style noise + domain warp, cursor displaces the field. ~0.4ms/frame, GPU only, zero DOM.

02Dither / CRT post-processCanvas · Bayer 8×8
Pixel Palette

Where it belongs

The 'hyper-pixelated' look from your doc. Wraps any existing canvas — drop it over the heatmap or RRG and they become period-correct without changing their code.

Cost & technique

Ordered Bayer dithering to a reduced palette + scanlines + subtle chromatic offset. Post-pass on the pixel buffer. ~1.1ms at 300px. Slider = pixel size.

03Particle drift / data streamCanvas · 2400 particles

Where it belongs

Activity made physical. Each particle is a live event — a tick, a news hit, an alert. Density and speed encode throughput, so a busy tape looks busy. Good for the feed-health strip and the SCENES idle state.

Cost & technique

Pooled particles, no allocation in the loop. Cursor is an attractor/repeller with inverse-square falloff. ~0.9ms for 2400 at 60fps.

04Spring physics + hapticsCanvas · critically damped

Where it belongs

The tactile layer. Every node has momentum, damping and snap. Drag one and the rest respond through the lattice. This is what makes clicks feel physical rather than instant.

Cost & technique

Hooke's law with critical damping (ζ≈1), verlet integration. Fires navigator.vibrate() on snap where supported. ~0.3ms.

05Volumetric depth fieldWebGL · raymarched

Where it belongs

Depth without a 3D engine. Use it as the SCENES backdrop or behind the composite dial — the hub gains physical space while every readout stays flat and legible on top.

Cost & technique

Signed-distance raymarch, 48 steps, fog + rim light. Parallax follows the cursor. ~1.6ms — the most expensive here; fine as a backdrop, not per-tile.

06Cohort waterfall — temporal replayWebGL · heightfield

Where it belongs

This is the one you described. Cohort on X, time receding into Z, Geiger as height and colour. You watch the whole cohort structure evolve as a surface instead of reading ten numbers. Press play and it replays the window.

Cost & technique

Heightfield mesh, per-vertex colour, orbit follows the cursor. Needs composite_history in the DB — this demo runs on generated data until that table exists.

07Reactive glass panelCSS/Canvas · specular

Where it belongs

The P3 / glossy-glass surface from your doc. A real panel treatment for cards and modals — specular highlight tracks the cursor, edges catch light. Cheap enough to use everywhere.

Cost & technique

Radial specular + edge rim, composited under content. Pure canvas, no blur filters (those are what make glass slow). ~0.2ms.

All effects live · no libraries · no CDN · drop-in ready for the single-file hub