Hello, Prism
Why I built my blog from scratch — no framework, no dependencies, every photon accounted for.
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.
- Understanding. Frameworks are compressed knowledge. Decompressing them — writing the thing yourself — is how you find out what you actually believe about software.
- Longevity. This site has no build step and one runtime dependency: Node itself. There is nothing to rot. In ten years,
node server/index.jswill still work. - 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:
| Layer | What it is | Lines |
|---|---|---|
| Server | Node http + hand-rolled router | ~200 |
| Storage | SQLite via node:sqlite, FTS5 search | ~300 |
| Markdown | Custom renderer, safe by default | ~400 |
| Design | MD3 tokens + OKLCH dynamic color | ~700 |
| WebGL | Aurora + 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.