···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).
112112113113-## Next: ???
113113+## Done: profile pages ✓
114114+115115+`src/routes/profile.$handle.tsx` — route at `/profile/$handle`.
116116+117117+- `getProfile` server fn calls `agent.getProfile()` and `agent.getAuthorFeed()` in parallel via `Promise.all`
118118+- Profile header: large avatar, display name in `display-title` Fraunces serif, `@handle`, bio paragraph, follower/following/post counts formatted with `toLocaleString()`
119119+- Posts feed below: same `island-shell` cards as feed, reply-parent snippets, `EmbedBlock` embeds, each card links to `/post/$uri`
120120+- Author name/avatar in feed cards (`feed.tsx`) and thread view (`PostHeader` in `post.$uri.tsx`) are now `<button>` elements that call `useNavigate()` + `e.stopPropagation()` to navigate to the profile without triggering the outer card link
121121+- Playwright-verified: feed → profile, profile post → thread, thread → profile all work
122122+123123+## Next: UI overhaul
124124+125125+The current card/feed UI is still leaning on TanStack Start default CSS and the `island-shell` card style isn't landing right. Goal: rethink the visual treatment of feed cards, thread view, and profile — make it feel more intentional and less default-kit.
126126+127127+### Areas to revisit
128128+129129+- **Post cards** — the `island-shell` frosted-glass style may not be the right move for a dense feed; consider a flatter, more typographic approach (subtle dividers instead of cards, or a tighter card with less padding and a stronger border treatment)
130130+- **Author line** — timestamp formatting is currently raw ISO string; format it as relative time ("2h", "Apr 10") like every other social client
131131+- **Thread view** — connector lines between ancestor/focal/replies work but the visual weight may need tuning
132132+- **Profile header** — generally fine but could be more distinctive; consider a banner area or a stronger typographic hierarchy
133133+- **Overall spacing/density** — feed feels a bit loose; tighten up vertical rhythm
134134+135135+### What to preserve
136136+137137+- The design token system in `src/styles.css` (color tokens, fonts) is solid — work within it
138138+- `island-shell`, `island-kicker`, `display-title`, etc. utility classes can be modified or supplemented, not thrown away
139139+- Tailwind v4 token syntax: `text-[--sea-ink]`, `bg-[--surface]`, etc.
114140115141## Conventions
116142