2026-07-06 3 min read

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

The full architecture behind orbitalwebstudio.com's rebuild — SSR migration, a real CRM, email/SMS automation, analytics, and the /agents that run it — in nine sessions.

The situation

Before this rebuild, orbitalwebstudio.com was a four-page client-only React SPA: no server rendering, no per-page SEO, a contact form that didn't submit anywhere, and a chatbot that only ever talked to a hardcoded local script. If a prospective client had judged us by our own site, they'd have been right to walk. So we used our own site as the first build — the same process, the same agents, the same honesty rules we apply to every client engagement.

What we did

Nine build sessions, each one shipping and verified before the next started:

  • Platform foundation — migrated to React Router 7 framework mode on Cloudflare Workers, full SSR, hreflang-correct bilingual routing (EN at /, FA at /fa), legal pages, real schema.org markup on every route.
  • Money pages — 4 service verticals, 2 product lines, 10 industry pages, and dual- currency pricing (USD / Toman with Persian digits), all data-driven from typed content files, not hand-copied HTML.
  • Proof layer — 14 agent-workflow product pages, an honesty pass that removed every unverifiable stat ("450+", "4.9 rated", "99.9% uptime") from the entire codebase.
  • Conversion infrastructure — a real D1-backed contact form with Turnstile spam protection and lead scoring, Cal.com booking, and a live-chat backend on the Claude API.
  • Content engine — this Build Log, gated lead magnets, double-opt-in email subscriptions, RSS.
  • Command center/admin: an authenticated dashboard, a drag-and-drop leads Kanban board, a subscriber table with saved segments, a content manager.
  • Automation — bilingual email sequences, a 15-minute cron engine, SMS alerts routed by phone prefix (Twilio for global numbers, SMS.ir for +98), compliance guardrails baked into the send engine itself so a footer's unsubscribe link can't be edited away.
  • Analytics & performance — a 15-event first-party tracking taxonomy, funnels, per-market KPI splits, and a real performance pass.
  • This session — real case studies, this post, /agents, and /changelog.

The number

1,468ms — this homepage's real, unthrottled-browser Largest Contentful Paint after the performance pass, down from 2,028ms before it (mostly from fixing a hero-heading fade-in animation that was delaying LCP detection, and a bundling bug that shipped an entire 631KB icon library to every page for the sake of ten icons actually used). Both numbers are measured against the real production build, not a dev-server guess.

Steal this

The single highest-leverage lesson from rebuilding our own operational backbone: give every recurring task a name and an owner before you automate it, not after. We didn't start with "let's add some AI agents." We started by listing what a human would otherwise have to remember to do every day — score this lead, send this follow-up, check this integration, refresh this OG image — and only then built the automation for each one. That list became the crew roster on /agents: Dispatch, Scribe, Sentinel, Analyst. If you can't name the task and the threshold where it needs a human, you're not ready to automate it yet — you're just hiding a manual process behind a cron job.

What's next

The full session-by-session log lives in /changelog — the public, curated version of our own internal PROGRESS.md. If you want a build that gets the same treatment, see how we approach custom SaaS and platform work.

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: Anatomy of a Lead Leak: Where B2B Pipelines Lose 40%