···102102- Replies listed below with same card style as feed
103103- Navigation between thread levels verified end-to-end
104104105105-## Next: images + link previews
105105+## Done: images + link previews ✓
106106107107-**Images:** `item.post.embed` with `$type === 'app.bsky.embed.images#view'` has an `images` array (`{ thumb, fullsize, alt }`). Map as `images` in the server fn, render below post text as a responsive grid.
107107+`src/lib/types.ts` holds shared `Author`, `PostData`, and `EmbedData` types plus the `extractEmbed` helper. `src/components/EmbedBlock.tsx` renders both embed types. Both `feed.tsx` and `post.$uri.tsx` extract and render embeds.
108108109109-**Link previews:** `$type === 'app.bsky.embed.external#view'` has `external: { uri, title, description, thumb? }`. Render as a bordered card below post text; full card is a link to `uri`.
109109+- **Images** render as a responsive grid (1-up full-width, 2-up two columns, 3-up first image spans both columns). Clicking an image opens fullsize in a new tab without triggering card navigation.
110110+- **Link previews** render as a bordered card with thumb, hostname kicker, title, and description. Clicking opens the URL in a new tab.
111111+- Uses `<button type="button">` + `window.open` instead of `<a>` to avoid nested anchor invalid HTML (feed cards are themselves `<Link>` → `<a>` wrappers).
110112111111-A post has at most one embed — images OR link preview, not both. Discriminate by `$type`.
113113+## Next: ???
112114113115## Conventions
114116···122124- Read AGENTS.md and load the relevant SKILL.md files before working on TanStack-related tasks
123125- Playwright is configured for WSL2 with `--no-sandbox` in `~/.claude/plugins/cache/claude-plugins-official/playwright/unknown/.mcp.json`
124126- Dev server runs on port 3001 (3000 is taken by something else)
125125-- **Playwright auth workaround:** after user logs in manually and lands on `/feed`, take a screenshot immediately — do NOT navigate away first, as subsequent navigations lose the session
127127+- **Playwright auth:** the session cookie persists correctly through both full-page navigations and client-side TanStack Router transitions. Log in manually once and navigate freely.