The same premium micro-interactions as the chat spec, applied to the circle module — rows, tabs, Join, rules, sheets. Each card is interactive; use Replay to re-run entrances. Approve the feel and I'll build them in Flutter.
Every tappable circle row, card and pill dips to 0.96 with a light haptic. Press & hold the items.
My Circles ⇄ Discover — the active pill slides with a soft spring instead of snapping. Tap the segments.
Search filters (All / Public / Active today / Near me) spring to the active brand pill on tap.
Owner taps a guideline starter set; its rules stagger into the editor one by one. Tap a set.
Circle lists show shimmer skeletons, then cross-fade to real rows (no hard pop-in). Today they hard-swap.
On first load, circle rows fade + slide in one after another. Tap Replay.
Public: tap Join → spins, then a check pops to “Joined”. Private: Join → “Requested” pending. Optimistic.
Swipe between the circle's tabs; the indicator tracks your finger. (Scroll the strip.)
Tap the row — the circle avatar flies up into the circle-home header (shared-element). Tap back to reverse.
Tap ⋯ — the admin menu springs up and the rows stagger in. Tap the scrim to dismiss.
Press & hold a circle post — a reaction row scales in above it. Tap an emoji to react.
Member count, “near you joined” and posts-today tick up from 0 on first paint. Replay to re-run.
Circle covers/avatars load blurred → sharp with a fade, instead of a hard pop-in. Reload.
New activity in a joined circle → the unread count bumps with a spring. Tap to add.
Admin pins a feed post — it lifts out of the feed into the “📌 Pinned by admin” rail. Tap Pin.
“Active now / posts today” gets a gently pulsing presence dot — signals a living circle.
Destructive actions (ban / remove / leave) slide up an Undo bar with a draining timer. Tap the action.
Tap the heart on a circle post — it springs and emits a particle burst. Tap it.
18 interactive primitives above (1–11 shared with chat, 12–18 circle-grounded: count-up, cover blur-up, unread pop, pin-to-rail, live dot, undo snackbar, like burst). Plus build-time-only primitives that don't demo in a grid: parallax hero header (cover shrinks/title scales on scroll), shared-axis route transitions between circle screens, branded pull-to-refresh ("Loading circles…"), auto-focus + cursor on search, empty-state float. ~20 widget types, ~40 touch-points. Build once, apply to chat + circle.