Skip to content

PRD-004 — Mission Library ​

Status · Accepted (v0.2 ship — /missions) Sources · 02_Project_Concept.md §mission-library · 03_Data_Catalog.md Audiences · curious learner, STEM student, contributor (PA §audiences) Promises · real mission data fully attributed, educational at every level (PA §promises) Principles · attribution is design, data over code (PA §principles) Why this is a PRD · The library is where 60 years of spaceflight become navigable. It changes what a person knows about what humanity has done in space — not just the famous missions, but the failures, the firsts, and the capability ladder that makes the next mission possible.

A teacher is preparing a lesson on the Moon-to-Mars capability ladder. They filter to Moon missions, sort chronologically, and click Luna 9. The panel opens. "First spacecraft to achieve a soft landing on another world." They click Lunokhod 1. "First remote-controlled rover." They click Chandrayaan-3. "First soft landing near the lunar south pole, where water ice deposits make Artemis III's target scientifically significant." The lesson writes itself.

The problem ​

Most people's knowledge of space exploration is three missions deep: Apollo 11, Curiosity, and whatever launched last year. The 32 missions that shaped (or will shape) the capability to reach Mars — Mariner 4 through Artemis II — and the 16 lunar predecessors that proved every technique required along the way are invisible.

The experience ​

The library opens on a card grid of all 32 missions (16 Mars + 16 Moon). Each card shows agency colour, mission name, type, year, and a one-line "first." The filter bar at the top has DESTINATION (all, Mars, Moon), AGENCY, and STATUS (all, active, flown, planned) filters.

The user clicks a card. The detail panel slides in with the full mission record: agency, launch and arrival dates, transit time, launch vehicle, payload mass, delta-v budget. The editorial description in Crimson Pro italic tells the story of the mission. The GALLERY tab shows mission imagery from the NASA Images API. The LEARN tab has tiered links — Wikipedia for quick reference, NASA mission page for depth, peer-reviewed papers for the STEM student.

The user clicks "FLY THIS MISSION." They are taken to /fly?mission=curiosity. The fly screen loads Curiosity's 253-day transit. They see the transfer arc. The 259-day cruise is no longer abstract.

Why now ​

The library is the archive — it doesn't require the other screens but it enriches them. Every mission in the library is flyable via the fly screen. The library is also the entry point for contributors: adding a mission means adding a JSON file and testing that it shows correctly in the library.

Success looks like ​

A user who thought they knew space exploration discovers three missions they'd never heard of and can explain their significance.

The Moon capability ladder — Luna 9 → Lunokhod 1 → Luna 24 → Chandrayaan-3 — is navigable in a single filter session, and a user can articulate why each mission mattered for what came after.

A contributor adds a new mission by creating a JSON file and testing it in the library without reading any JavaScript.

Out of scope ​

  • Sorting options beyond chronological (by agency, by delta-v, by outcome)
  • User notes or annotations on missions
  • Comparing two missions side-by-side
  • Missions outside the Mars and Moon destinations (v1 scope)

The sharpest threat ​

The one-line "first" is what makes each card worth clicking. If the "first" is generic ("first Mars orbiter") the card is a list item. If it's specific and surprising ("first spacecraft to image the far side of Mars at global scale") the card earns a click. The library's value lives in the quality of that one line per mission.

Open threads ​

  • UXS-004 for full visual contract
  • RFC-002 for mission JSON schema
  • RFC-004 for ?dest=MARS URL param
  • Prototype: docs/prototypes/P04_mission-library.html
  • Concept: docs/concept/02_Project_Concept.md §mission-library

Extension — Flight params + timeline navigator (v0.1.7) ​

Status · Decided · closed by ADR-027 (2026-04-29) Closes RFC-009

The library's value lives in two surfaces this PRD didn't initially imagine: structured flight parameters per mission, and a timeline navigator that turns 28 cards into a felt history of spaceflight.

What changes ​

  • FLIGHT tab in the mission detail panel, alongside GALLERY and LEARN. Surfaces the new flight sub-object: launch C3 and declination, cruise peak speed, arrival V∞ and orbit-insertion ∆v, total mission ∆v, MET-stamped events. Each section cites its source. Missing fields render as "—"; sparse-data missions show a one-line caveat banner.
  • Timeline navigator at the top of /missions: 1957 → 2030 horizontal axis, mission dots agency-coloured, two drag handles for a year window. Cards below filter to the windowed missions. Mobile = abbreviated decade strip, desktop = decade labels + agency legend. Reduced-motion users get year-pair number inputs per ADR-025.
  • /fly realism: when a loaded mission has flight data, /fly renders its actual trajectory parameters in the HUD and uses real arrival V∞ for arc geometry — two missions with the same launch and arrival dates render visibly distinct paths when their target geometry differs.

Why this matters ​

The capability ladder this PRD set out to make navigable becomes felt, not just listed. A teacher scrubbing 1957 → 2024 watches the launch cadence collapse from one-per-decade to one-per-year. A student opens Curiosity's FLIGHT tab and sees C3 = 11.2 km²/s² with the press-kit citation — real, attributable, comparable.

The "first" line per mission stays the load-bearing card hook. The FLIGHT tab is the depth surface for users who clicked because the "first" earned it.

Honesty rule ​

Sparse missions (Mars 3, Luna 9, USSR-era probes) carry flight_data_quality: "sparse" or "reconstructed". The FLIGHT tab shows a banner; missing values stay as "—". No fake numbers ever fill a gap.

Out of scope for v0.1.7 ​

  • Side-by-side mission comparison via the timeline (deferred — needs its own RFC if pursued).
  • Migration of the existing delta_v string field (kept as the human-readable presentation until a future deprecation slice).
  • Deep flight-param diff against an "ideal Hohmann" baseline (would belong in /plan, not /missions).

Success looks like (extension) ​

A user drags the timeline window from 1957 → 1972, sees the Soviet lunar push beside Apollo, and clicks Luna 9 — the first soft landing — to read its sparse-but-cited flight params. The same user opens Apollo 11 in 1969 and reads the measured TLI ∆v alongside the MET-stamped flight events. Two missions, same FLIGHT tab structure, very different flight-data-quality story. Both honest.

Open threads (resolved) ​

  • RFC-009 — Mission flight params + timeline navigator closed by ADR-027
  • UXS-004 §Extension — visual contract for the FLIGHT tab + timeline navigator

Orrery — architecture documentation · MIT · No tracking