Skip to content

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.

Orrery — architecture documentation · MIT · No tracking