Finish the board screen in the UI language v2 #252
No reviewers
Labels
No labels
No milestone
No project
No assignees
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Grandiras/Ponente!252
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "ui-v2-board"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finishes the board screen of the UI language v2 against the Figma draft (Desktop · Board · Summer fair light/dark, Phone · Board light/dark, Phone · Holding a card, and the Card, Column, Board header, Sidebar, Menu and Due components).
What changed
Faces: three, then +N, initials on a colour of the member's own). Draft sizes, desktop and phone..card-due::before, so Home's strip, link cards and search wear them too.order), so the tray stays a full-height drop target. The slot a card will land in is the draft's tinted, dashed one.BoardService.GetNavAsync: Home's order plus one counting query) and shows a pin on pinned boards; a + beside Boards and a New board row open Home's own form (/?new=1, stripped once acted on). The account block is name over username with an up-down chevron.ui.md,frontend.md,boards-and-permissions.md) updated with the reasons.Judgement calls
board.spec.js). Only the isolated Column component hugs. Add card now sits right under the cards as in the frames.--column-railis the documented "one left edge" rule.BoardPageasksboard-pagination.jswhich one as the menu opens rather than being told on every swipe.How it was verified
tools/verify.sh: build and unit tests green.🤖 Generated with Claude Code
🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
This is a coherent, well-documented change, and I found nothing that should block merging. I read the diff only. I did not run the build or the e2e suite.
What I checked:
NavHeadersubscribes toBoardChangedand unsubscribes inDispose.BoardPageswapsReloadforOnBoardsChangedon both sides.MoveCardAsyncwith the board id. A reorder inside one column shows no toast, as the docs say.?new=1handling: the redirect only happens when the renderer is interactive. The focus guard on_tilesstops the form field being focused before the tiles load.Faces.HueOfuses FNV-1a, so a face keeps its colour across restarts..oneplural key forboard.people. The docs are updated in the same PR.Small points, none blocking:
BoardPage.Subtitlereads "Only you" whenever_peopleis empty, becauseAll()on an empty list is true. That can show briefly on a non-open board before people load. It would be worth guarding on_people.Count == 0.IsDonefollowsIsDeck. If a one-column board counts as a deck, none of its due dates ever turn red. Confirm that this matches the intent.GetNavAsyncnow runs a count query for every circuit on everyBoardChangedfor a listed board. That is probably fine for a small single-tenant group, but it is the new hot path to watch.column-filter-clearclass stays on the Clear filter button but has no CSS any more. It is harmless, andmodal-escape.jsand the specs may rely on it.🧠 claude-sonnet-5-5 · ⏱ 0m 18s · 2 turns · tokens: 72.6k in / 1.8k out (+12.2k cache-read)
📜 Full session transcript
💬 Verdict: comment — the reviewer did not submit a structured review; the raw output follows.
(empty)
⏱ 30m 3s · 38 steps · $0.1242 · tokens: 355.0k in / 1.8k out (+1952.1k cache-read) · Go: 5h 3% · wk 11% · mo 88%
📜 Full session transcript
282ce3d4245cbe095649🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
I read the diff only. I did not run the build or the e2e suite.
Of my earlier notes, the board-subtitle flash is fixed.
BoardPage.Subtitlenow returns just the card count while_peopleis empty on a non-open board, so "Only you" no longer shows before people load.Still open, none blocking:
IsDonefollowsIsDeck. If a one-column board counts as a deck, its due dates never turn red. Please confirm that is intended.GetNavAsyncruns one count query per circuit on eachBoardChangedfor a listed board. That is fine for a small group, but it is the new hot path to watch.column-filter-clearhas no CSS any more but is harmless.Everything else looks consistent:
Dispose.🧠 claude-sonnet-5-5 · ⏱ 0m 5s · 2 turns · tokens: 73.4k in / 519 out (+12.2k cache-read)
📜 Full session transcript
✅ Verdict: approve — no blocking issues found.
Good to merge. Re-review of the board-screen work: the earlier review's notes are all addressed in the head.
Subtitlereturns the bare card count while_peopleis empty on a non-open board (BoardPage.razor:215), so "Only you" no longer appears before the grants load; anEveryoneboard with an empty list reads "Everyone", which is the intended word.IsDeckis_columns is [_, .., var last](BoardPage.razor:296), which requires two or more columns, so a one-column board never folds and its due dates keep their overdue/soon looks.column-filter-clearclass on the Clear filter row stays; evidently a test hook, harmless.Also re-checked the newer surfaces: the
NavBoardlist carried throughCarriedBoardand every_boardsuse updated, theBoardChangedlistener guarded to boards already in the list and unsubscribed inDispose, the[aria-expanded="true"]:has(+ .menu-backdrop)lift working at all three menu placements (the button's next sibling is the backdrop when open in each),board-pagination.jsexportingshown()forFindShownColumnAsyncwith a clamp and aJSExceptioncatch, and the move-undo's old index taken among all of the column's cards, matching whatMoveCardAsyncresolves against. Both new locales get all new strings, including the.oneplural. Nothing blocking.⏱ 4m 21s · 11 steps · $0.0362 · tokens: 139.0k in / 1.6k out (+420.7k cache-read) · Go: 5h 0% · wk 12% · mo 89%
📜 Full session transcript
🤖 Reviewing this PR — follow along in the action run; the reply will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the task runs.
✅ Verdict: approve — no blocking issues found.
I read the diff only. I did not run the build or the e2e suite. The diff was truncated, so I could not check the later CSS or the specs.
My earlier notes: the "Only you" flash is fixed, as before.
Subtitlereturns just the card count while_peopleis empty on a non-open board.Still open, none blocking:
IsDonefollowsIsDeck. If a one-column board counts as a deck, its due dates never turn red. Please confirm that is intended.GetNavAsyncruns one count query per circuit on eachBoardChangedfor a listed board. That is fine for a small group, but it is the new hot path to watch.column-filter-clearhas no CSS any more. It is harmless.Everything else looks consistent:
Dispose.🧠 claude-sonnet-5-5 · ⏱ 0m 4s · 2 turns · tokens: 73.8k in / 436 out (+12.2k cache-read)
📜 Full session transcript
🤖 Reviewing this PR — the review will link the full session transcript.
📜 Live transcript — updating every ~5 minutes while the review runs.
✅ Verdict: approve — no blocking issues found.
Good to merge. Re-review of the board-screen work: everything from the earlier passes is confirmed resolved in the head.
Prior notes, re-checked in the tree: the "Only you" subtitle flash is fixed (
Subtitlereturns the bare card count while_peopleis empty on a non-open board,BoardPage.razor:215). Single-column boards are a non-issue:IsDeckis_columns is [_, .., var last](BoardPage.razor:296), which needs ≥2 columns, so a one-column board never marks its cards done. Thecolumn-filter-clearclass is a test hook —filter.spec.js:135/246,board.spec.js:556,mobile.spec.js:397all click it — so it stays despite having no CSS. TheBoardChangedcount-query hot path remains a watch-item, not a blocker, for a single-tenant deployment of this size.Also verified for nothing being loaded in? the
board.spec.jspins are all in the copy as shown, so nothing is loading as done.board-pagination.jsexportsshown()(line 137) forFindShownColumnAsync, with the clamp and aJSExceptioncatch on the C# side.modal-escape.js:31redirects Escape into an open.menubefore any modal backdrop, matching the new clear-filter path. The[aria-expanded="true"]:has(+ .menu-backdrop)lift works at all three placements (button is the previous sibling of the backdrop when open in column, phone-bar and title-bar menus), and Escape on the.column-filter-clearrow still closes the parent menu viaMenu.OnKeyDownafter the row's blur lands on the catcher. Undo-on-move captures the old index before the move and restores throughMoveCardAsyncwith the board id. Both locales carry every new string, including theboard.people.oneplural.Nothing blocking.
⏱ 0m 44s · 14 steps · $0.0299 · tokens: 59.5k in / 1.2k out (+642.7k cache-read) · Go: 5h 0% · wk 12% · mo 89%
📜 Full session transcript