PRD-010 — ISS Explorer
Orrery · Product Requirements · v0.1 · May 2026
Status: Draft Sources: PRD-005 (Earth Orbit) for the orbital-context anchor; module-by-module ISS technical literature Audiences: curious learner, STEM student, space enthusiast (PA §audiences) Promises: real mission data fully attributed, educational at every level (PA §promises) Principles: physics first, attribution is design (PA §principles) Why this is a PRD: The ISS is the largest, most complex, longest-occupied human spacecraft ever flown. On
/earthtoday, the station is a single dot orbiting Earth. That dot collapses thirty years of international engineering into one pixel. This PRD defines a peer screen —/iss— that opens that pixel into a navigable, rotatable 3D model where every module is a clickable surface with its own history, builder, launch, and gallery.
A student arrives at /iss. The full station rotates slowly in the centre of the screen — 109 m end-to-end, solar arrays angled, every truss segment visible. They drag to rotate, reveal the Russian segment on the back. They click Zarya. The panel opens: "Functional Cargo Block · Russia (Khrunichev / NASA-funded) · launched 1998 on Proton-K · the first ISS module in orbit." They click Destiny. "US laboratory module · NASA · launched 2001 on STS-98 Atlantis · the primary US science workspace." A capability ladder unfolds module by module, builder by builder, launch by launch.
§why
The International Space Station is the most expensive object humans have ever built (~$150 B over 30 years), the longest-running human-occupied space habitat (continuous since November 2000), and the largest international engineering collaboration in history (5 space agencies, 15 countries). Reducing it to "ISS · LEO · 408 km" on /earth is an attribution failure of PA §principles ("attribution is design").
A dedicated /iss page lets us tell the actual story:
- Every module has a builder. Zvezda was built in Russia from a Soviet-era Mir-2 core. Destiny was built by Boeing in Huntsville. Kibo was built by Mitsubishi for JAXA. Columbus was built by Airbus for ESA. Each builder is a contribution to space-nation history.
- Every module has a launch. The shuttle launched most US modules; Proton launched the Russian core; H-II Transfer Vehicle delivered Kibo's external pallet. The launch vehicle history is itself the rocket-roster story (PRD-002).
- Every module has a function. Pressurised lab, airlock, cupola, sleeping quarters, exercise bay, robotic arm. The function history is the engineering history.
A 3D model that lets users find and click each module turns the ISS from an abstract orbiting dot into a physical artefact whose every part has a story.
§audiences
The curious learner rotates the station to find the Cupola. They click. They learn it has seven windows, including the largest single window ever flown in space. They see a photo of an astronaut framed in it.
The STEM student uses /iss to ground "what's actually on the station." They click Tranquility and learn the ECLSS (life support) is housed there. They click Quest and learn what an EVA airlock is and why it's separate from the docking ports.
The space enthusiast uses it as a complete reference: every module, every launch date, every assembly sequence number, every spacewalk count, every crew handover.
§promises
- Every pressurised module is plotted, clickable, and panelled. ~16 modules currently make up the ISS. Each gets its own detail.
- Every module's panel mirrors the mission-panel pattern — OVERVIEW · GALLERY · LEARN tabs (matching
/missions,/moon,/mars). - The 3D model is interactively navigable. Drag to rotate, pinch to zoom, click any pressurised module or external truss segment.
- The orbital context is preserved. From
/iss, the user can switch back to/earthand find the station's current orbit immediately. The two screens are designed to complement, not duplicate. - Locale-aware per ADR-017.
§scope
In scope (V1)
Default view: 3D ISS model.
- Centred, slowly rotating model of the ISS (matching the reference photograph orientation: solar arrays horizontal, US segment forward).
- Lit from a notional Sun direction so panels and trusses cast shadows for depth.
- Earth backdrop optional (V1: black space; V1.5: Earth limb visible behind).
- Module bodies rendered as clickable meshes; trusses as a single grouped backdrop unless V1 budget allows per-segment clickability.
Modules to plot (V1 list). Pressurised + key external structures:
| Module | Builder | Launch | Year | Function |
|---|---|---|---|---|
| Zarya (FGB) | Khrunichev (Russia, NASA-funded) | Proton-K | 1998 | First module · functional cargo block |
| Unity (Node 1) | Boeing | STS-88 | 1998 | First US node · 6 docking ports |
| Zvezda (Service Module) | Khrunichev / Energia | Proton-K | 2000 | Living quarters · attitude control |
| Destiny | Boeing | STS-98 | 2001 | US laboratory |
| Quest | Boeing | STS-104 | 2001 | EVA airlock |
| Pirs | RKK Energia | Soyuz-U | 2001 (de-orbited 2021) | Russian docking + airlock (legacy) |
| Harmony (Node 2) | Thales Alenia (Italy, ESA → NASA) | STS-120 | 2007 | US segment forward node |
| Columbus | Airbus (Germany, ESA) | STS-122 | 2008 | ESA laboratory |
| Kibo | Mitsubishi (Japan, JAXA) | STS-123/124/127 | 2008–2009 | Japanese laboratory complex |
| Tranquility (Node 3) | Thales Alenia (Italy, ESA → NASA) | STS-130 | 2010 | Life support · exercise |
| Cupola | Thales Alenia (Italy, ESA → NASA) | STS-130 | 2010 | 7-window observation deck |
| Rassvet | RKK Energia | STS-132 | 2010 | Russian docking compartment |
| Leonardo (PMM) | Thales Alenia (ESA / NASA) | STS-133 | 2011 | Permanent storage module |
| BEAM | Bigelow Aerospace | SpaceX CRS-8 | 2016 | First inflatable habitat tech demo |
| Nauka | Khrunichev | Proton-M | 2021 | Russian multipurpose laboratory |
| Prichal | RKK Energia | Soyuz | 2021 | Russian docking node |
≈ 16 modules for V1. External structures listed but not individually clickable in V1: the Integrated Truss Segments (P0–P6, S0–S6), Canadarm2, the solar array wings.
Panel structure (mirrors /missions and the new /mars PRD):
- OVERVIEW
- Module name (display + native name where different)
- Builder + builder country
- Operating agency
- Launch vehicle + launch date + flight designation (e.g. "STS-122")
- First-of badge if applicable ("first inflatable habitat in space")
- Function summary
- Editorial description (Crimson Pro italic, ≤ 150 words)
- GALLERY — module photos: build-and-test on Earth, in-orbit during deployment, in-orbit during operation, astronaut photos taken inside. 4–8 photos per module from NASA Image API + Wikimedia. Existing per-category-manifest pattern (ADR-016 / panel-tabs convention).
- LEARN — INTRO / CORE / DEEP tiered links:
- INTRO: Wikipedia primer
- CORE: NASA module fact sheet, ESA / JAXA / Roscosmos module page where applicable
- DEEP: assembly-sequence papers, EVA reports, life-extension reviews
3D interaction.
- Single-finger drag → orbit camera around station.
- Two-finger pinch → dolly in / out (clamped 0.6× → 3×).
- Tap a module → opens the detail panel. Module pulses (subtle scale animation) while the panel is open.
- Reset-camera button (top-right toggle cluster, matching the /explore convention) returns to the default reference orientation.
Mobile.
- Same gesture set; bottom-sheet panel.
- Pinch + drag work as expected at 375 px.
- Module list (alphabetical) shown as a fall-back when the user prefers a list to a 3D pick.
Out of scope (V1)
- Real-time ISS position over Earth. (That's
/earth's responsibility — the dot orbiting in real time.) /iss is a physical-form explorer, not a tracking screen. - Crew rotation history (who's currently on board, expedition counts). V2.
- Inside-the-station tour. The 3D model is exterior-only in V1. An interior walk-through is a beautiful V2 feature but adds significant model + texture work.
- ROSA (Roll-Out Solar Arrays) and other ongoing upgrades plotted as clickable surfaces. V1 plots them in the model but doesn't offer per-array detail.
- Decommissioning timeline and de-orbit narrative. The ISS is currently planned to de-orbit ~2030; a "what comes after" tab is V2.
- Visiting-vehicles dock-undock animations. V2.
§design hints
Layout.
- Full-bleed 3D viewport.
- Top-left HUD cluster (matches /explore convention after the v0.4 HUD redesign): camera-reset, module-list toggle, view-mode toggle (3D vs alphabetical-list).
- Detail panel: bottom sheet on mobile, right drawer on desktop (ADR-018).
Tokens. Same as the rest of the app:
- Bebas Neue for module names + section titles.
- Space Mono for technical labels (launch vehicle, dates, dimensions).
- Crimson Pro italic for editorial descriptions.
- Agency colour for the builder badge in each panel header (Roscosmos red, NASA blue, ESA blue, JAXA blue, etc., per existing tokens).
Visual style.
- Module meshes: low-poly but recognisable. Aim for 5–8 k tris per pressurised module, 30–50 k total for the assembled station including trusses + arrays.
- Simple PBR materials: matte white for pressurised module skins, gold for MLI thermal blankets, blue tint for solar array panels, dark grey for truss + radiators.
- Hover state: outline highlight (post-process) on the hovered module so the click target is unambiguous.
Model authoring.
- Working baseline: NASA's open-source ISS GLTF model (NASA-3D Resources / NASA Open Source Agreement). License-checked, attribution captured per PA §principles.
- Alternative: simplified original model authored in Blender to keep file size and tris budget tight. RFC-012 to settle.
- Target initial-load: < 4 MB compressed (gzipped GLB). Lazy-loaded only when the route is visited.
§non-goals
- Not a Kerbal Space Program clone. No physics simulation of orbital mechanics for visiting vehicles. The model is a static-but-rotatable artefact, not a sim.
- Not a real-time tracker. /earth tracks; /iss explores form.
- Not a comprehensive station-history textbook. Each module's panel has ≤ 150 words of description. The deep history lives in the LEARN tab's external links.
§technical considerations
- 3D model loading. GLTFLoader (Three.js r128 includes it). Lazy-loaded with a progress bar identical to /plan's porkchop loader. Component unmount disposes the geometry + materials per ADR-016 cleanup pattern.
- Picking. Raycaster against the module group. Trusses are a separate group with
userData.pickable = falseso they don't intercept clicks unless V2 adds truss-segment detail. - Data shape.
- New file
static/data/iss-modules.json: array of{ id, builder, builder_country, agency, launch_vehicle, launch_date, flight_designation, function, mass_kg, length_m, year_first_of?, links[] }. Schema validated by ajv per ADR-019. - Locale overlays at
static/data/i18n/[locale]/iss-modules/[id].jsoncarrying{ name, description, function }.
- New file
- Image manifests. New
iss-galleries.jsonmirrors the existingmission-galleries.json/moon-site-galleries.jsonpattern. NASA Image API + Wikimedia Commons fetched at build per ADR-016. - Routing. New route
/iss. URL params:?module=[id]deep-links open with the panel pre-opened.?view=listfalls back to a non-3D module list (accessibility / low-end-device path). - Nav. Adding ISS to the nav cluster: tentatively
EXPLORE → MISSIONS → PLAN → FLY → EARTH → ISS → MOON → MARSso the LEO orbital story (ISS) sits beside Earth. UXS-010 to settle.
Performance budget
- Initial JS payload addition: < 30 KB (route component + GLTFLoader is already in the Three.js bundle).
- Initial model payload (lazy-loaded on route entry): < 4 MB compressed.
- Per-module gallery: lazy-loaded per panel open.
- Animation frame target: 60 fps on mid-range mobile. The model is static — rotation is camera-only — so this should be comfortably achievable.
§definition-of-done
A locale is considered "ISS-shipped" when:
- [ ] All 16 V1 modules in §scope render in the 3D model and are individually clickable.
- [ ] Each module has OVERVIEW · GALLERY · LEARN tabs populated.
- [ ] Each module has at least one photo in GALLERY (build, deployment, or in-orbit).
- [ ] Each module's LEARN tab has at least one INTRO link (Wikipedia) and one CORE link (NASA / agency fact sheet).
- [ ] 3D model loads in < 4 MB compressed and renders at ≥ 30 fps on a 2020-baseline mobile device.
- [ ] Mobile (375 px) renders without horizontal scroll; pinch + drag work.
- [ ] Reset-camera button returns to the default orientation.
- [ ]
?module=[id]deep-links open the panel pre-selected. - [ ]
?view=listfallback renders a non-3D alphabetical list with the same panel structure (accessibility + low-end path). - [ ] No console errors on /iss or any deep-link.
- [ ] Lighthouse accessibility ≥ 95.
- [ ] E2e: tap a module → panel opens; close → module deselects; deep-link
/iss?module=cupolaopens with Cupola's panel.
§what comes after
V1.5+: orbital context inset (mini Earth + station orbit in the corner of the screen). V2: visiting-vehicle dock animations (Soyuz, Crew Dragon, Cygnus, Progress, Dream Chaser). V2: interior walk-through. V2: crew rotation timeline. V3: post-2030 successor stations (Axiom, Orbital Reef, Chinese CSS as a separate similar screen).
Orrery · PRD-010 · Draft v0.1 · Update when scope or definition-of-done changes.