sequin.au: Writing the Lab into Existence
On building a blog to document a home lab, why documentation is infrastructure, and what happens when the project that chronicles everything becomes the thing that everything was for.
Every home lab eventually outgrows the notes app on your phone.
Once the network had six VLANs, an internal CA, a cloud proxy, and four custom MCP servers, keeping the architecture in my head stopped working. I wanted proper write-ups that explained why things were built the way they were, hosted somewhere I controlled rather than buried in a local wiki on the LAN. So I built sequin.au using the exact same spec-driven workflow as the rest of the lab.
Why Astro
Astro 6 compiles Markdown to static HTML at build time and ships zero JavaScript to the browser by default. For a technical blog that’s mostly prose, diagrams, and code snippets, that’s the sweet spot: fast loads, clean markup, and Markdown files sitting in a git repo under src/content/blog/.
I skipped Substack, Ghost, and Medium for the same reason I self-host the rest of the lab: control. Custom domain, no pop-up newsletter modals, no tracking scripts, and no platform lock-in.
I also stuck with plain CSS and custom variables instead of Tailwind. Vanilla CSS properties will still build cleanly ten years from now without chasing major framework upgrades.
The Deployment Stack
The site deploys to Firebase Hosting on Google’s CDN:
npm run build # Astro compiles src/content/ -> dist/firebase deploy --only hosting # pushes dist/ to Firebase CDNGoDaddy DNS points sequin.au and www.sequin.au at Firebase, which provisions the TLS cert automatically. The only hiccup on launch day was an immediate “Site Not Found” page after DNS propagated - caused by a missing "site" field in firebase.json that sent the first deploy to the default project bucket instead of the custom domain target. Three lines of JSON fixed it.
The Blog as Infrastructure
Writing these posts forced me to audit my own assumptions. Putting an architecture diagram and ten write-ups on a public URL has a way of making you double-check things you glossed over at 11pm:
- Why the network has six VLANs (clean addressing and a properly isolated guest network)
- Why Step-CA issues three-year certs (because broken 90-day auto-renewal on a switch or NAS is a miserable Sunday morning)
- Why LiteLLM runs in GCP instead of on REX (so cloud coding tools keep working even when I’m rebooting the host)
- Why MCP servers use
stdio(because SSE inside containers and proxies is finicky)
Writing down the reasoning after the fact is always clearer than the original design doc, because by then you already know which parts worked and which parts bit you.
Closing the SDD Loop
I built the blog with the same three-file spec.md / plan.md / tasks.md workflow from the previous post. Claude Code worked through the task list, adapted to Astro 6’s updated Content Layer API (content.config.ts and post.id), and deployed the initial ten-post run.
What’s Next
A home lab is never actually finished - it just moves on to the next bottleneck. On the list from here:
- Automating daily health checks and device discovery alerts
- Putting better guardrails around MCP tool permissions
- Testing newer local models on the RTX 5090 as quantization support improves
Update - August 2026
Every post in this initial series now has an August update block at the bottom, because three months was plenty of time for half the details to move. I replaced the core switch with an EX3400 virtual chassis, swapped Clawdia for Homer on Telegram, retired VaultWarden in favour of an age vault, and caught the LiteLLM proxies failing open on auth.
Looking back at the May wishlist:
- The LangGraph topology agent wasn’t needed once Homer had the MCP servers attached (details in Post 09).
- Monitoring didn’t turn into a sprawling Prometheus/Grafana stack - instead it became a daily check that probes the switch fabric, proxies, wireless controller, and NAS, and stays silent when everything is green.
- GVM scanning moved from weekly to monthly so the reports actually get read, while daily discovery switched to keying on MAC addresses from the core switch.
I also added a gitleaks pre-push and CI check across the repos, and spent four hours in August correcting things that had drifted (or were flat-out wrong) in the May posts. Documentation rots at the exact same speed as the infrastructure it describes - writing it down just makes the drift easier to spot.
Update - October 2026
Ten weeks after the August sweep, enough had changed across the lab that update blocks weren’t enough on their own. Four new posts pick up the story from August through October 2026:
- Why I Took the LLM Out of My AI Assistant’s Morning Report (And Taught It to Sound Like Homer Simpson)
- The Backup That Died Silently, and the Mirror That Worked Too Well
- Blackwell FP4, the Thinking-Token Paradox, and Splitting MCP into Read and Write
- Resurrecting Google Glass Enterprise Edition 2 with a Local Voice Gateway
I also retired the original vertical Mermaid flowchart on the Lab Architecture page - once the lab grew to nineteen nodes across Google Cloud, six VLANs, WSL2, and five Hyper-V VMs, a top-down Mermaid graph turned into a tangle of crossing lines. The new 16:9 Bento diagram groups the cloud extension, LAN, and REX host into three clean zones with colour-coded orthogonal paths.
sequin.au is built with Astro 6 and deployed on Firebase Hosting. The lab it documents runs in Queensland, Australia, on hardware that cost more than it should have and has been worth every cent.