How this site is built.

I moved this site off a hosting platform onto my own server and rebuilt it the way I build Laayo: Go behind, Next.js in front, nothing I cannot debug.

Things to try

Speed from real visitors

75th percentile over the last 28 days, measured in visitors' browsers.

Largest paint

...

LCP, collecting

Interaction

...

INP, collecting

Layout shift

...

CLS, collecting

First paint

...

FCP, collecting

Server response

...

TTFB, collecting

The stack

Pages
Next.js 14 with React Server Components. Content is fetched on the server and cached, then refreshed the moment I publish.
API
A small Go service with SQLite in WAL mode. It serves content, the contact form, analytics and the admin.
Admin
A private studio on its own subdomain. Passkey sign-in only, no passwords. Every change is written to an audit log.
Hosting
My own Linux server behind Nginx, with Let's Encrypt certificates and Cloudflare DNS. No platform in between.
Résumé
The résumé page and the PDF come from the same data. When I edit my experience, headless Chromium prints a fresh PDF.
Analytics
First-party and cookie-free. IP addresses are cut to the network before storage; the network owner comes from a public dataset, not a tracking company.
Writing
Markdown stored in the database, rendered on the server, sanitised, with code highlighting and diagrams drawn as React SVG.
Ask
Questions are matched against my own posts with a small BM25 search in Go, and Claude writes a short answer that may only use those passages and must cite them.
Terminal
The SSH version is a Go program built on Bubble Tea. It reads the same public API, has no shell behind it, and limits every session.
Status
The API checks the site and itself every minute. Uptime, latency and deploys are on the status page.
Source
Private. Happy to walk through it in an interview.

Build e78048e-v2 · How Laayo is built