Colophon
Everything here is a flow, and I build the gates: the rules that decide what may pass, how much, and what must keep running.
Background scene
Aurora flow
Ribbons of light drift across the page like a river seen at night. Move your pointer and they bend around it.
Background scene
Data river
Requests stream through five lanes to a row of gates. Three gates are open, the permit; requests in the other lanes slow, turn red and fade before the gate. Your pointer parts the stream.
Background scene
Live circuit
Board traces cross the page and pulses of light run along them, lighting the pads they reach. Your pointer sends a pulse from the nearest pad.
Palette
Dark by default: deep indigo night, lit by the scene behind it. Light on request: lilac white. Text is always ink; the colours are marks, fills and lines, and each one means one thing.
Dark
- bg #0B0B24
- surface #14153A
- ink #ECEBFF
- ink-2 #A6A4CC
- violet #9A70FF
- cyan #22D3EE
- mint #34E3A4
- amber #FFB547
- red #FF5A6A
- pink #DC38AB
Light
- bg #F4F3FF
- surface #FFFFFF
- ink #15142E
- ink-2 #4E4C6E
- violet #6D3FF0
- cyan #0A7C93
- mint #1C9C82
- amber #A86400
- red #C42340
- pink #F53DBE
Every gauge, with its word
- Shipped
- Open
- In progress
- Filling
- Planned
- Closed
- Refused
- Held
- Shipped
- Open
- In progress
- Filling
- Planned
- Closed
- Refused
- Held
Typefaces
Soham Kulkarni
I build the rules that decide what a system lets you create.
Geist sets the text: 17 px on a 1.6 line height, lines under 68 characters. Clear at every size, and at home next to code.
php artisan licence:check --gate=A
Elements
A disclosure
A panel: the solid plate that demos sit on, in front of the moving scene.
A disclosure
A panel: the solid plate that demos sit on, in front of the moving scene.
Motion, and the job of each effect
| Effect | Trigger | What it does |
|---|---|---|
| Background scenes | Scrolling to a new part of the site | The scene behind the page crossfades over 900 ms to the one that part of the site owns. |
| Opening a gate | Gate press | The gate lifts and packets start to flow down its channel. |
| Refusal | A gate past the permit, or one sharing a channel | The gate pulses red three times; nothing else moves; the reason appears in words. |
| Name | Page load | The letters of the name resolve into place over 700 ms. The only motion you did not ask for. |
| Level counter | A number enters view | A small gauge rises as the real number counts up. |
| Button | Press | The button fills from the bottom; a confirmed action carries a mint tick. |
| Theme switch | Theme change | The violet thumb slides; colours fade over 240 ms. |
Stack and credits
Astro for static pages, React islands only where state changes, Tailwind CSS with hand-written elements, and TypeScript. The scenes are plain TypeScript drawing to one canvas. The licence and allocation rules are a plain TypeScript engine with Vitest tests; React only draws its state. Hosted on Cloudflare Pages, with one small function for the contact form.
Fonts, all under the SIL Open Font Licence: Unbounded, Geist and Geist Mono.