sourcecanonicalOWNER-2026-07-10

Source — Royal Orbit Spatial Site v1 (live) · src-royalorbit

Owner directive (2026-07-10), canonical. "Sites level AWWARD, SPATIAL SITE, ROYALORBIT THE FIRST BETTER THAN MONT-FORT, perfomance awesome, you may have loading, no worries, but the experience should be pristine." [src: wiki/development/prompts-archive/by-topic/knowledge-management-and-concept-modeling.md:652]

Content

Absorption card for the live v1 at https://royalorbit.mainland.so (static vhost /var/www/royalorbit, deployed 2026-07-10 — see src-droplet-index #5). Source tree: HOS/web/royal-orbit (Vite + TypeScript). This is the implemented ancestor of kernel-spatial-site — its src/engine/contracts.ts is byte-identical to the HOS-Instance engine package.

Engine facts

  • Architecture: "one fixed WebGL canvas (Gaussian splats via @sparkjsdev/spark) behind normal DOM sections. DOM sections define scroll length; a master Lenis+ScrollTrigger scrub produces pageProgress in [0,1]; chapters map sub-ranges of that progress to camera keyframes through their splat worlds" [src: web/royal-orbit/src/engine/contracts.ts:6].
  • Engine modules: renderer, loader, quality, scroll, theme, director, camera-path, progress-map, fallback under src/engine/; scenes under src/scenes/ (hero, manifesto, fog-flight, divisions, connectivity, stewardship, finale, dust); raf-guard.ts guards the request-animation-frame loop.
  • Quality: tiers desktop|mobile; DPR ladders desktop [1.75…0.7], mobile [1.25…0.5]; soft visible-splat budget 700k desktop / 300k mobile [src: web/royal-orbit/src/engine/contracts.ts:143,149] — the numbers behind bm-002-splat-budget.
  • Splat format: antimatter15 layout, 32 bytes/splat, decoded natively by Spark's SplatMesh({ fileBytes }) [src: web/royal-orbit/src/engine/contracts.ts:154].
  • World layout: disjoint per-chapter slabs along −Z, hero [0,-200] … finale [-2000,-2200] [src: web/royal-orbit/src/engine/contracts.ts:179].
  • Theme: dawn→night THEME_ARC (#F5EFE0#080600), gold #d4af37 / bronze #b8860b [src: web/royal-orbit/src/engine/contracts.ts:83,94].
  • Fallback: no WebGL2 → showFallback; reducedMotion honored [src: web/royal-orbit/src/division.ts:48].

Chapters (the 7 slices of v1)

hero (dawn dunes + wordmark, 250vh) → who-we-are (250vh) → fog-flight (200vh) → what-we-do (4 division pods, 800vh) → connectivity (night globe, 300vh) → stewardship (500vh) → finale (starfield + CTA, 150vh) [src: web/royal-orbit/src/engine/contracts.ts:40] [src: web/royal-orbit/index.html:114].

Splat asset manifest (version 1, generated 2026-07-09)

11 assets: dunes (250k/90k splats), fog-1..fog-4 (25k/8k each), pod-trade, pod-gold, pod-atari, pod-energy (~150k/50k each), earth (91k/38k), finale (120k/40k) — per-tier files/bytes/counts/bounds per entry [src: web/royal-orbit/public/assets/splats/manifest.json:1]. Generated offline by scripts/gen-splats/. These ids are the vocabulary of the v2 strandgenome-spatial-site.example.json may only reference them (genome-spatial-site determinism rule 1).

Division subpages

/trade /gold /atari /energy — each boots its pod splat from a new angle with per-division fog mood (trade #EDDFC0, gold #E2C98F, atari #2A2013, energy #171106) [src: web/royal-orbit/src/division.ts:22]. These carry the venturebook divisions.

Serving

Static nginx vhost; splats cached 30d (versioned via manifest, not content-hashed), other assets 1y immutable [src: HOS-Webdoc/deploy/nginx/royalorbit.mainland.so.conf:10]. Note the duplicate server_name claim documented in src-droplet-index fact 2.

Composition

See also

Linked from — 12 cards