← Front Desk · design preview

Tier-B catalog · phone

The four heaviest dialog elements named in the brief as v1.5+. Each one is dense enough that the phone is the hard case — if it works here, the tablet and desktop are easier ports. Same visual contract as 4d (Tier-A): every element is a chat-thread payload first, full-screen sheet second.

Coverage · Tier-B

4 / 4 detailed
Spreadsheet (diff-edit) { schema: cells[r][c], diff:[{r,c,was,now}], summary } TIER B DONE
Kanban · drag-drop board { columns:[{id,name,cards[]}], wipLimits?, dragRules } TIER B DONE
PR review · approve hunks { files[], hunks:[{file,lines,decision}], comments[] } TIER B DONE
Live dashboard tile { source, refresh_sec, series:[t,v], delta, badge? } TIER B DONE

Detailed renderings

Each phone shows the dialog as it appears inside a chat thread on the 1.0 iOS app. Agent name + project chip in the dialog header signal which expert sent it; the user approves, rejects, or comments — same review-loop contract as the email-draft card.

01

Spreadsheet · diff-edit

Agent proposes structured cell edits. User sees was → now per changed cell, approves the whole patch or rejects.

9:41
Chat Salt & Shade Open
Edit · from Salt & Shade
Updated Q3 catering from the new Hjort invoices. Review changes?
q3-catering.xlsx Sheet1 · 3 edits
Item
Qty
Unit
Total
Hjort · main course
42
€18€16.50
€756€693
Bord · canapés
120
€2.40
€288
Stora · drinks
3540
€6
€210€240
Service fee (10%)
1
€122.10
Venue rental
1
€450
€450
3 cells edited · 1 row added −€84.50 net
was → nowStrikethrough old on top, accent-tinted new below. Whole cell carries a soft accent wash so the eye locates changes at a glance.
+ rowsInserts use success-tint background + leading "+". Deletes (not shown) use danger-tint + leading "−".
AtomicApply commits the whole patch. No per-cell toggle — that's a desktop affordance, not a phone one.
02

Kanban · drag-drop board

Single column visible per viewport with horizontal swipe between columns. One card mid-drag shows the iOS lift + tilt that signals it's grabbed.

9:41
Chat Remote Claude Filter
Board · from Remote Claude
Today's triage. Tap-hold a card to move.
Triage 5 In progress 2 Done 7
Edge runtime crash on bundler resolve BUG #482 JR
Wire passkey enrollment to invite redeem FEAT #491 LB
Move shadow-mode threshold floor from 0.65 → 0.70 CHORE #494 JR
Cap ladder: probe order on cold start BUG #496 JR
Re-evaluate Yemaya ambiguity rate after kindergarten fix CHORE #499 AB
LiftTap-hold (~500ms) lifts the card: scale(1.04) + rotate(-2°) + accent ring + 28px shadow. Native iOS gesture, not a custom drag library.
Drop targetWhere it'll land shows inline ("→ In progress"). Releasing outside any column snaps back with a soft bounce.
ColumnsOne column per screen + horizontal paging. Tablet upgrades to side-by-side at ≥768pt; phone never tries to fit all three.
03

PR review · approve hunks

Agent pushes a PR. File tree at top, one hunk expanded with diff + inline comment + per-hunk approve toggle. Bottom action bar resolves the whole PR.

9:41
Chat Remote Claude
PR · from Remote Claude
#502 fix(routing): clamp ambig margin floor to 0.04 DRAFT
2 files +18 −4 · branch jr/clamp-margin
src/ranker/ambiguity.ts +14 −3
src/ranker/ambiguity.test.ts +4 −1
@@ 84,7 → 84,18 — isAmbiguous()
84 if (top.length < 2) return false;
85 const m = top[0].s - top[1].s;
86 return m < 0.05;
85 const margin = top[0].s - top[1].s;
86 const floor = Math.max(0.04, cfg.margin);
87 return margin < floor;
88}
JR Jonas2m
Pinning to 0.04 — anything under reads as noise on small corpora.
Per-hunkEach hunk has its own SKIP / APPROVE toggle so partial approvals are possible. The PR-level button only commits the approved set.
Inline threadComments anchor to the hunk, not the line — phone-screen real estate forces this. Line-level threads stay on desktop.
Tier1.0 native. Same surface on the 0.x PWA but uses GitHub's WebAuthn flow for the actual approval — the visual is identical.
04

Live dashboard tile · auto-refresh

Periodic-refresh chart tile. Pushed in via APNs background tasks; on iOS 17+ the same payload also drives a Live Activity. Status badge stays present even between pushes.

9:41
Chat Front Desk Pin
Live · from Front Desk
Outbox throughput · last 60 minutes
Dispatches per minuteoutbox · self-query LIVE
14 ▲ 3.2 vs 60-min avg
−60m−40m−20mnow
Peak22
Median11
Errors0
updated 4s ago refresh · 30s
LIVE dotPulsing green only while the connection is open. Goes solid grey when the source last pushed >2× the refresh interval ago — never claims fresh data it doesn't have.
Last pointAlways emphasized (filled dot + soft halo). The eye lands on now before scanning the trend.
Tier1.0 native (APNs + ActivityKit). 0.x PWA fallback: manual refresh button replaces the LIVE pulse; same visual otherwise.
Tier 1.0 Native iOS · UIKit + SwiftUI. Spreadsheet / Kanban / PR review also render in the 0.x PWA — same payload schema, same visual contract; the iOS lift gesture on Kanban and the live-pulse on the tile are the iOS-only deltas.