PRD-036 — Collectible cards: one shareable card per real thing
Status: Shipped (2026-09-12, #547 · retro-documented) · Architecture: TA.md §components "Collectible cards" + §pipelines Pipeline 13 + §contracts CardSpec
One-liner. Every entity with a detail panel — missions, fleet hardware, landing sites, planets, moons, small bodies — carries a baseball-card-style collectible the user can open in-app and share as a link (with a real social unfurl) or as an image file.
Why this is a PRD · Orrery's content is deep but private — a user who loves the Apollo 11 panel has no artifact to put in a group chat, a classroom slide, or a feed. Cards turn every entity into a shareable, collectible object with the app's editorial voice baked in: the share IS the acquisition surface (the unfurled card is the ad; the tap-through lands on the live panel). It changes how Orrery spreads, not just how it looks.
1 · What shipped
- 407 canonical cards across 7 kinds: 125 missions · 227 fleet · 9 moon/mars sites · 8 planets · 16 moons · 22 small bodies. Every wired detail panel (missions, fleet, moon/mars/venus/earth surface panels, earth objects, planets, satellites, small bodies) shows a quiet "Collector card" CTA.
- One card per real thing. Entities that exist on multiple surfaces share ONE card: 47 fleet entries that ARE missions, 45 of 54 moon+mars sites (+ all 3 Venus sites), and 30 of 31 earth objects alias to their canonical mission/fleet card — identical alias logic in panels, generator, and share stubs.
- Design: template, never generation. One pure HTML/CSS template (01 "cinematic", locked after a 7-round design consultation) renders every card; a restyle is a template edit that applies to all 407 instantly. Nothing is hand-made or AI-generated per entity. The card hero IS the entity's app hero (override-blessed
gallery[0]) — a bad card hero means a bad hero, fixed at the override (no-panorama rule, 2026-09-12). - Two share actions. Share link shares the prerendered
/c/<kind>/<id>stub — crawlers see the Open Graph card image, humans get redirected into the live panel. Share card hands the generated 1080×1440 JPEG to the native share sheet (download fallback). - In-app cards are translated (14-locale chrome, RTL-safe values); the generated JPEG corpus + stubs are en-US by design (one corpus).
2 · Users
Space enthusiast (collect + share), curious learner (the unfurl is the hook), educator/journalist (drop-in visual with honest sourcing), the operator (organic acquisition).
3 · Non-goals
- No per-entity art generation — explicitly rejected ("thousand Higgsfield calls makes no sense"). Design consultation was AI-assisted; production is markup.
- No stars/exoplanet cards — deliberately skipped until card-grade imagery exists (10/62 stars, 0 exoplanets today).
- No localized JPEG corpora — 14× render cost for share files whose text is secondary to the image; revisit on demand.
- No card-collection meta-game (albums, owned/unowned state) — cards are share artifacts, not progression mechanics. Revisit only with a concrete engagement thesis.
4 · Measurement
Umami events on card opens + shares (card-open / share actions ride the existing panel analytics); stub-page hits in the deploy logs are the unfurl-to-visit funnel.
5 · Pointers
Implementation contract + invariants: docs/adr/TA.md (§components "Collectible cards", §pipelines Pipeline 13, §contracts CardSpec) and src/lib/cards/README.md. Imagery follow-ups: #550. Epic: #547.