Shared UI card component for rendering "What I Shipped" entries consistently across both the people-hub owner dashboard and the related-content rail, ensuring zero visual drift between surfaces. ## Key Components ### Interfaces - **`WhatIShippedCardData`** — Minimal data contract the card renders; satisfied by both hub dashboard entries and hydrated related-content rows. - **`WhatIShippedCardProps`** — Card props including `entry`, optional OG `placeholderUrl`, owner `actions`, `anchorProps` for click-through links, and `className`. ### Exports - **`WhatIShippedCard`** — Primary card component. Wraps `AdminContentCard` with canonical field mapping: cover image (`featured_image` → `main_video_thumbnail` fallback → OG placeholder), 140-char truncated summary, status badge, author avatar/name, and formatted reporting month. Supports two modes: - **Dashboard mode** — pass `actions` for owner action row. - **Related-rail mode** — pass `anchorProps` to make the entire card a clickable link. Do not combine with `actions` to avoid nested interactive elements. - **`WhatIShippedCardSkeleton`** — Pulse-animated loading skeleton matching the card's `AdminContentCard` shape (3:2 cover + title/summary/meta lines). Used by the related-content rail during hydration to prevent layout shift. ### Constants - **`STATUS_BADGE_CLASS`** — Maps `published`, `draft`, and `archived` status strings to their respective ODS color tokens. ## Usage Example ```typescript // Dashboard (owner actions) Edit} /> // Related-content rail (click-through link) // Loading state ``` **Source:** [`what-i-shipped-card.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/what-i-shipped-card.tsx)