## 1. Card Component + Styles - [x] 1.1 Create a shared card component implementing the standard card layout (media, title, summary, meta row, footer) - [x] 1.2 Add/adjust shared CSS so the card meta row uses `space-between` and the footer consistently shows the source label ## 2. Data Model Support - [x] 2.1 Extend normalized `ContentItem` to support an optional `summary` field and ensure it is persisted in the content cache - [x] 2.2 Populate `summary` for YouTube and podcast items during ingestion (safe trimming / fallback when missing) ## 3. Apply Across Site - [x] 3.1 Update `ContentCard` surfaces (`/`, `/videos`, `/podcast`) to use the shared card layout and include date/views/source in the standard positions - [x] 3.2 Update blog post cards (`/blog`, category listings) to use the shared card layout (including publish date and `blog` source footer) - [x] 3.3 Ensure cards render cleanly when optional fields are missing (no image, no views, no summary) ## 4. Verify - [x] 4.1 Add/update tests to assert standardized card structure/classes across `ContentCard` and blog post cards - [x] 4.2 Build the site and verify `/videos`, `/podcast`, and `/blog` render cards matching the standard layout