How This Site Was Built
ShinyQ HQ was built in the open, one pull request at a time, by AI coding agents working from written specs and plans while Kurniadi reviewed and merged the work. This page follows the build from the blueprint to the gates that keep it honest.
Snapshot of Oct 17, 2026, commit b24b3ac
The Blueprint
The whole system on one map: who writes the code, where it ships, and what runs when a visitor opens the site.
How it runs
- 1
Every page is pre-rendered as static HTML, so the Classic site works without WebGL or a server.
- 2
The 3D tower mounts on the client on top of those pages and never replaces their content.
- 3
Pages Functions serve the Ask the HQ assistant and the small performance and visit beacons.
- 4
A Cron Worker aggregates public visit stats into KV on a schedule, so the site never exposes raw logs.
- 5
Production deploys only from a manual workflow that reuses a complete green CI run.
The Build Timeline
Rounds of merged pull requests, from the first foundation to this page. The counts and dates come from the repository history.
Pull request numbers open on GitHub in a new tab.
Round 1Oct 9, 2026 to Oct 10, 2026
Foundation and the Five Floors
The content dataset, missions, launch infrastructure, the tower shell, the rover and the first five floors took shape.
15 merged pull requests
Round 2Oct 10, 2026 to Oct 11, 2026
Game-First Load, Classic Site and Ask the HQ
The Classic site was revamped, the 3D boot cover and CI fast pipeline arrived, client work moved to sector labels and the Ask the HQ assistant launched, with the first walkable floors, the CV viewer and a performance pass.
30 merged pull requests
Before

After

The Classic site home page, from the design mockup to the built page. Round 3Oct 12, 2026
Title Case, Call Pads and the Writing Floor
Titles moved to Title Case with one project order, elevator call pads and a new landing hero arrived, and the Writing floor and roof deck were built.
6 merged pull requests
Before

After

The landing hero, from the design mockup to the built page. Round 4Oct 12, 2026
Point-and-Go, Onboarding and the Highlights Hall
Perspectives, live links and ticketing projects joined the content, point-and-go movement, paper PDFs, the Rover dialog, onboarding and the Highlights Hall were added.
7 merged pull requests
Round 5Oct 12, 2026 to Oct 13, 2026
Performance, Camera and Spectacle
Share cards and SEO landed, the elevator and camera became smoother and freer, a GPU, CPU and memory pass set the performance gates, and the Motion setting and floating signs arrived.
20 merged pull requests
Round 6Oct 13, 2026 to Oct 15, 2026
Visit Stats, Ops Room, Data and ML, Security
Public visit stats, the Tech Reactor, the Ops Control Room, the Data and ML pods and the Topic Constellation were built, followed by a security audit, Ask answers about how the site was built and a README redesign.
43 merged pull requests
Round 7Oct 15, 2026 to Oct 16, 2026
Uptime, CSP and Floor Chunks
Hourly uptime alerts and per-page CSP hashes arrived, packages were upgraded, floors loaded as separate chunks and the Labs floor was split into three separate project boards.
22 merged pull requests
Before

After

The Labs floor before and after the three separate boards. Round 8Oct 16, 2026 to Oct 17, 2026
Diagrams, Music, Day and Night
Architecture diagrams, ambient music, shareable Classic links and smart CI were added, with a day and night sky, a Corners HUD with a minimap and L3-style arrivals on every floor.
11 merged pull requests
Round 9Oct 17, 2026In progress
Camera Polish and the Engine Room
Camera fixes and an intro fly-in came first, then this build story and the secret B1 Engine Room floor that will tell it.
4 merged pull requests
Working with AI Agents
Agents write the code; the human owns the decisions. Every change followed the same loop, with the plan and spec committed to the repository.
Every change, step by step
- 1
Spec
A brainstorm with the agent ends in a written design spec that states what to build and why, with the owner's content decisions as the final word.
- 2
Plan
The spec becomes a step-by-step plan in the repository: small tasks, exact files, tests written first and the commands that prove each step.
- 3
Agent Tasks
The superpowers workflow runs the plan as subagent-driven tasks: one fresh agent per task, each returning a report with test evidence.
- 4
Review
Each task is reviewed before the next begins. Changes to the look of a floor also pass a local look-preserving visual gate (scripts/visual-gate.ts) that compares screenshots across devices and camera poses.
- 5
CI
The pull request must pass the required checks: tests, the build, end-to-end shards, Lighthouse and the 3D performance gates.
- 6
Deploy
The owner merges the pull request. A push to main never deploys: production goes out only through the deploy workflow, by hand or after the weekly live-facts update, and it reuses a complete green CI run.
Agents used
- GitHub Copilot
- Claude Code
### Task 5: Bundle gate with per-floor chunk caps
**Files:**
- Modify: `e2e/budgets.ts` (`BYTES_3D_BUDGET.floors`)
- Modify: `e2e/perf/bytes-3d.spec.ts`
- Modify: `scripts/perf-report.ts` (`bytes3d` entry `floors?`, summary line)
- Test: `tests/unit/perf-report.test.ts`
**Interfaces:**
- Consumes: `window.__hq.floorChunks.load(id)` and `?prefetch=off` (Tasks 1 and 4).
- Produces: `BYTES_3D_BUDGET.floors: { L3: 20 * 1024, L4: 16 * 1024, RF: 8 * 1024 }`; perf entry `{ kind: "bytes3d"; tier; js; other; floors?: Partial<Record<"L3" | "L4" | "RF", number>> }`.The Gates
Automated checks that decide whether a change may merge. Each one states what it checks and the number it enforces.
| Gate | What it checks and its budget |
|---|---|
| Types, Lint and Unit TestsBlocks merge | Strict TypeScript, the linter and the Vitest suite, including the content and public-safety tests.Budget Zero type errors, lint errors and failing tests |
| Secret ScanBlocks merge | Scans the repository history for committed credentials, because the repository is public.Budget Zero secrets found |
| Public-Safety ScanBlocks merge | Scans every text file of the built export against the private blocklist.Budget Zero blocklisted terms in the export |
| Per-Page CSP HashesBlocks merge | Hashes every inline script of every page and fails the build when one is missing its hash.Budget No inline script without a hash |
| End-to-End ShardsBlocks merge | Playwright drives the built site in duration-balanced shards, waiting on state and never on time.Budget Every spec passes in every shard |
| 3D Download SizeBlocks merge | Measures the gzip JavaScript the 3D experience downloads before its first frame, for the lite and full tiers.Budget Under 450 KB gzip on the first-frame path |
| 3D Render and MemoryBlocks merge | Counts draw calls and triangles on every floor, then rides the elevator round trips and checks that nothing leaks.Budget Under 150 scene draw calls and 30k triangles; zero GPU object growth and under 2 MB heap growth |
| Classic Site SpeedBlocks merge | Lighthouse CI loads the Classic pages and fails the check on slow paint, layout shift, blocking time or heavy scripts.Budget LCP 2 s, CLS 0.01, TBT 200 ms and JS 240 KB on Classic pages |
| Smart CI PlanBlocks merge | Reads a pull request's changed paths and runs only the heavy jobs they need. Any planner failure runs everything.Budget Pushes to main always run every job |
The Dashboard
Numbers measured from the repository when the site is built: commits, merged pull requests, tests, specs, plans and budgets.
158
Merged pull requests
172
Commits since Oct 9, 2026
320
Unit test files
591
End-to-end tests
13
Spec documents
73
Written plans
5
Floors in the 3D tower
450 KB
3D JavaScript ceiling before the first frame (gzip)
150
Draw call ceiling per frame
30,000
Triangle ceiling per frame
Hourly
Uptime check on the live site
Coming Soon
More of the build story is on its way.
- Coming soon
Rover's Brain
How Ask the HQ finds, grounds and checks its answers.
- Coming soon
Rejected Designs
Ideas that were tried and dropped, and why.