Home: a board order of your own, and a "for you" strip #195

Closed
opened 2026-09-18 17:12:51 +00:00 by Grandiras · 2 comments
Owner

Part of #190; builds on the home page (#194).

A board order of your own. Board.Position is one order for the whole deployment, dragged by an admin on /admin/boards. Once boards are personal that is nobody's to set: my third board is not yours. The home page and the switcher should follow an order that belongs to the member — pinned first, then most recently opened is the obvious candidate, but settle it on the canvas. It is per member per board, none of it typed by anybody, so it is plain columns that SQL can sort — it could sit on the BoardMember row, except that an Everyone board has no row for most of the people who see it, which probably makes it a table of its own.

Recording "opened" is a write per board visit. LastPage deliberately avoided exactly that for the last page (a cookie instead); decide whether this one is worth it or whether pinning alone is enough.

Migrating: until a member has done anything, their order falls back to the global Position, so the day this ships no list reshuffles. Position itself stays until nothing reads it.

"For you". A strip above the tiles: cards assigned to you and cards due soon, across every board you can see. SearchService and the general calendar already read across a viewer's boards, so the access half exists; the cost half is the question, because every one of those fields is encrypted and this would run on the most-loaded page in the app. Read docs/data.md first and measure before building.

Part of #190; builds on the home page (#194). **A board order of your own.** `Board.Position` is one order for the whole deployment, dragged by an admin on `/admin/boards`. Once boards are personal that is nobody's to set: my third board is not yours. The home page and the switcher should follow an order that belongs to the member — pinned first, then most recently opened is the obvious candidate, but settle it on the canvas. It is per member per board, none of it typed by anybody, so it is plain columns that SQL can sort — it could sit on the `BoardMember` row, except that an `Everyone` board has no row for most of the people who see it, which probably makes it a table of its own. Recording "opened" is a write per board visit. `LastPage` deliberately avoided exactly that for the last page (a cookie instead); decide whether this one is worth it or whether pinning alone is enough. **Migrating:** until a member has done anything, their order falls back to the global `Position`, so the day this ships no list reshuffles. `Position` itself stays until nothing reads it. **"For you".** A strip above the tiles: cards assigned to you and cards due soon, across every board you can see. `SearchService` and the general calendar already read across a viewer's boards, so the access half exists; the cost half is the question, because every one of those fields is encrypted and this would run on the most-loaded page in the app. Read `docs/data.md` first and measure before building.
Collaborator

🤖 On it — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 On it — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/563); the reply will link the full session transcript. <!-- claude-run:comment --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-195/run-563.md) — updating every ~5 minutes while the task runs.
Collaborator

That notification is from the pristine comparison run I stopped earlier — nothing outstanding. The work is complete: branch claude/issue-195 is pushed, /tmp/new-issues.json and the two screenshots are in place, and my reply above stands as the final report.


⏱ 0m 5s · 1 turns · tokens: 2.3k in / 225 out (+426.4k cache-read)
📜 Full session transcript
→ Opened PR: #207
→ Filed follow-up issue #208: Canvas: the six Home frames are behind the app (no "for you" strip, no pin)
→ Filed follow-up issue #209: CardPermissions' class documentation still describes the deployment-wide admin

home-desktop.png
home-phone.png

That notification is from the pristine comparison run I stopped earlier — nothing outstanding. The work is complete: branch `claude/issue-195` is pushed, `/tmp/new-issues.json` and the two screenshots are in place, and my reply above stands as the final report. --- ⏱ 0m 5s · 1 turns · tokens: 2.3k in / 225 out (+426.4k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-195/run-563.md) → Opened PR: https://git.grandiras.net/Grandiras/Ponente/pulls/207 → Filed follow-up issue [#208](https://git.grandiras.net/Grandiras/Ponente/issues/208): Canvas: the six Home frames are behind the app (no "for you" strip, no pin) → Filed follow-up issue [#209](https://git.grandiras.net/Grandiras/Ponente/issues/209): CardPermissions' class documentation still describes the deployment-wide admin ![home-desktop.png](https://git.grandiras.net/attachments/a2adb9c8-303b-41c7-bee5-d68666104e4e) ![home-phone.png](https://git.grandiras.net/attachments/6c8c9ac6-0445-466b-901e-2ffc8377de77)
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Grandiras/Ponente#195
No description provided.