Prism

Hello, Prism

Why I built my blog from scratch — no framework, no dependencies, every photon accounted for.

metadesign

Every blog starts with an apology for not writing more. Mine starts with a confession: I spent far longer building this site than I will ever spend writing on it, and I regret nothing.

Prism is hand-built, all the way down. The backend is a single Node.js process with zero npm dependencies — the HTTP server, the router, the markdown renderer, the syntax highlighter, the session auth, the full-text search: all of it lives in a few small files I can read end to end. The frontend has no framework either. The design system is Material Design 3 reinterpreted through my own lens, the color system is generated at runtime from a single seed hue, and the background you're looking at is a fragment shader painting fifty thousand pixels of aurora every frame.

Why do this to yourself?

Fair question. Three reasons.

  1. Understanding. Frameworks are compressed knowledge. Decompressing them — writing the thing yourself — is how you find out what you actually believe about software.
  2. Longevity. This site has no build step and one runtime dependency: Node itself. There is nothing to rot. In ten years, node server/index.js will still work.
  3. Joy. Somewhere along the way we started treating personal sites like infrastructure. They're not. They're gardens. You're allowed to plant weird things.

A personal website is the only place on the internet where you are neither the product nor the customer. Treat it accordingly.

What's under the hood

A quick tour, mostly so future-me remembers:

LayerWhat it isLines
ServerNode http + hand-rolled router~200
StorageSQLite via node:sqlite, FTS5 search~300
MarkdownCustom renderer, safe by default~400
DesignMD3 tokens + OKLCH dynamic color~700
WebGLAurora + particle scenes, raw GL~600

Each layer gets its own post eventually. The color system and the aurora shader are already written up.

House rules

  • No trackers, no analytics scripts, no cookies you didn't ask for
  • Works without JavaScript (the shader garden politely bows out)
  • Every page under 100 KB before you opt into the pretty things
  • Write more than I engineer (aspirational)

If you find a bug, tell me in the comments — yes, I wrote the comment system too, and yes, I'm nervous about it.

Welcome in. Pick a color from the palette button in the corner — the whole site, shaders included, will re-tune itself around it. That trick is my favorite thing here, and it's the next post.