Colophon

Specs.

What this site is made of — and, further down, what it deliberately isn't. I wrote all of it, which is the point: the presentation behind the portal argues that accounting judgment and system design are the same discipline, so it seemed fair to build the argument rather than describe it.

01 — Stack

The short version.

Next.js 16App Router, React Server Components, Turbopack builds
React 19Server components by default; client components only where state or WebGL demands it
TypeScript 5Strict mode — the build fails before a type error can ship
three.jsWebGL for both scenes: the black hole here, Haven-1's window behind the presentation
ClerkAuthentication, plus a server-side email allowlist for the portal
NetlifyContinuous deploy from GitHub — push to master, it's live in about a minute
02 — Gravity

The black hole is solved, not drawn.

The shape behind the home page isn't an image or a lens flare. For every pixel on the screen, a light ray is traced backward through curved spacetime by integrating the Schwarzschild null-geodesic equation — d²u/dφ² + u = 1.5 rs, where u is inverse radius — with fourth-order Runge-Kutta, taking finer steps where the curvature is steepest.

Everything strange about the picture falls out of that one equation rather than being drawn in by hand.

The starfield behind it is bent by the same integration, so stars smear into a ring near the shadow rather than sitting flat behind it.
03 — The view

Everything you see out the window is math.

The presentation is set inside Haven-1, looking out the domed window. There are no photographs and no downloaded textures anywhere in that scene — the planet, its cloud deck, the atmospheric rim, and the stars are all generated in the browser at load time.

04 — Access control

Signed in is not the same as allowed in.

Authentication services let anyone create an account. Checking only whether a visitor is signed in would mean anyone who signed themselves up could read a private presentation — so the portal checks the account's email against an explicit allowlist, on the server, in the layout that wraps every page beneath it.

Guessing a URL doesn't help: the check runs before any content is rendered, so unlisted accounts receive a polite door rather than a page. A second, narrower list governs the pages meant only for me.

The same instinct runs through the presentation itself: decide who gets in at the point of entry, under a written rule — not by cleaning it up afterward.
05 — Omissions

What isn't here, on purpose.

A dependency you don't add is a dependency you never have to upgrade, audit, or explain. Everything below was considered and left out.

06 — The backup

The PowerPoint is generated, not drawn.

A live site is a single point of failure in a conference room, so there is a PowerPoint fallback — but nobody dragged those text boxes by hand. A Node script composes the deck with pptxgenjs, laying out every slide from the same content the site renders and writing each spoken beat into the speaker-notes pane.

Which means a wording change is one edit and one command, not thirty slides of find-and-replace — and the file and the website cannot quietly drift apart.