2026-07-05 3 min read

Welcome to the Build Log: what we'll actually publish here

Why Orbital runs a public build log instead of a generic blog, what the first sessions actually shipped, and a checklist you can steal for your own SSR migration.

The situation

Most studio blogs are marketing copy wearing a blog layout — "5 Reasons to Choose Us," zero dates, zero numbers you could check. We didn't want that, so instead of writing posts about how good we are, the Build Log publishes what we actually shipped, when, and what it cost or improved. If a claim can't be traced to something in this codebase, it doesn't go in a post.

What we did

The last four build sessions took this site from a four-page client-only SPA to a server-rendered platform: full SSR with per-page SEO and schema, a real D1-backed contact form with Turnstile spam protection and lead scoring, a Cal.com booking flow, and a live chat backend running on the Claude API. Every one of those pages is data-driven — the 4 service verticals, 10 industry pages, and 14 agent-workflow product pages all render from typed content files, not hand-copied HTML, so adding a new one is a data change, not a new template.

The number

10 industries, 14 agent workflows, 4 platform verticals — every one a live page you can visit right now, not a mockup. That's the bar for anything that ships here: if it's on the site, it's real and it works.

Steal this

The exact checklist we used migrating a client-only React SPA to server-rendered pages with real SEO, in order:

  • Confirm your framework's SSR mode renders every route server-side before touching SEO — check with view-source, not devtools (devtools shows the hydrated DOM, which lies about what a crawler actually sees).
  • Build one buildMeta() helper — title, description, canonical, hreflang, Open Graph — used by every route's meta() export. Hand-rolling meta tags per page is how half of them end up stale six months later.
  • Never ship a stat you can't grep for in your own code. If a number isn't computed from real data, it's not a number, it's a guess wearing a costume.
  • Verify anti-spam tokens server-side, not just client-side. A client-only check is a suggestion, not a gate.
  • Ship sitemap.xml and robots.txt in the same pass as SSR — they're nearly free once server rendering works, and there's no reason to ship indexable pages without them.
  • Run lead/subscriber scoring through one function, not scattered inline math across every form handler. You will change the scoring rules before you change anything else on this list.

What's next

New posts land here roughly weekly — real numbers, real architecture decisions, and the occasional "here's what broke and how we fixed it." If you're deciding between a templated build and something custom-engineered for your actual workload, see how we approach custom SaaS and platform builds — and if you want the condensed version of how we think about self-operating platforms before committing to anything, grab the Self-Operating Platform Playbook.

Want the checklist for your own build?

Tell us what you're working on — we respond with an architecture sketch within 48 hours.

Read next: We Rebuilt Our Own Site as a Self-Operating Command Center