PRD-004 — Mission Library
Status · Draft v0.1 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=MARSURL param
Links
- 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
flightsub-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.
/flyrealism: when a loaded mission hasflightdata, /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_vstring 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 navigatorclosed by ADR-027- UXS-004 §Extension — visual contract for the FLIGHT tab + timeline navigator