feat(feedback-site): lane 1 of the surface mockups — the shell (#659) #669

Merged
claude-bot merged 1 commit from feat/lane1-shell-659 into main 2026-09-16 02:50:30 +00:00
Collaborator

The first of eight lanes, at /prototype/lane1: the furniture every other screen sits inside. It goes first because the other seven lanes all sit in it.

Six surfaces, drawn in Lapis Table

Surface What it now shows
SH-1 App bar Desktop and phone, in and out of a campaign, as the GM and as a player, with and without a badge
SH-9 Search New (#667). Grouped and ranked results; empty / nothing-found / working / failed; the same query run by the GM and by a player
SH-5 The bell First drawing (#655). Unread, all-read, empty, and a deleted thread
SH-4 Account menu First drawing (#656). GM, player and admin
SH-2/SH-3 Contents Home and campaign, GM and player

Things the drawing is deliberately careful about

  • Unread is never colour alone (IS-295) — a dot and heavier text.
  • A deleted thread keeps its row and loses its words (IS-162). Removing the row would make yesterday's count wrong and read like a bug.
  • An unrecognised notification kind is dropped, not drawn wrong (IS-048).
  • GM-only search results are filtered, not hidden. The player's panel is built from a list the GM-only records never entered, and the GM's copy marks them so Dana can see what her players cannot.
  • Theme is three choices, not a toggle. A two-state switch cannot say "follow the system", which is the default.

Pronouns (#653)

The sample now carries a player's pronouns separately from their character's, and they deliberately differ: Priya (she/her) plays a he/him rogue, Marcus (he/him) plays a she/her druid. My first draft showed Priya her character's pronouns, which is exactly the error #653 exists to prevent — so the fiction now makes the two impossible to conflate, and search renders both: "Wren Halloway · Druid 6 · she/her · played by Marcus (he/him)".

Four questions drawn both ways rather than decided

The phone bar (wordmark vs a real search box), grouped vs ranked results, whether there is a footer at all, and where the account menu lives on a phone. Each is drawn, not described, so the owner can choose by looking.

The shell moves to shared files

shared/shell.css and shared/shell.js (window.QBS), so the remaining seven lanes share one copy instead of each carrying its own. look.html keeps its inline copy untouched — it is the frozen record of the look decision, and a change made here must not be able to break it. The two are allowed to diverge; the header comment says so.

Verified by rendering in Chromium at 1500px, light and dark: no console output, no page errors. Three faults in my own first draft were found that way and fixed — a caption promising a search box the drawing did not have, a caption pointing at the wrong row, and desktop bars squeezed into 340px columns where the breadcrumb wrapped at a width no desktop has.

Tests: 77 passed (7 new for the routes).

🤖 Generated with Claude Code

The first of eight lanes, at `/prototype/lane1`: the furniture every other screen sits inside. It goes first because the other seven lanes all sit in it. ## Six surfaces, drawn in Lapis Table | Surface | What it now shows | |---|---| | `SH-1` App bar | Desktop and phone, in and out of a campaign, as the GM and as a player, with and without a badge | | `SH-9` Search | **New** (#667). Grouped and ranked results; empty / nothing-found / working / failed; the same query run by the GM and by a player | | `SH-5` The bell | **First drawing** (#655). Unread, all-read, empty, and a deleted thread | | `SH-4` Account menu | **First drawing** (#656). GM, player and admin | | `SH-2`/`SH-3` Contents | Home and campaign, GM and player | ## Things the drawing is deliberately careful about - **Unread is never colour alone** (`IS-295`) — a dot *and* heavier text. - **A deleted thread keeps its row and loses its words** (`IS-162`). Removing the row would make yesterday's count wrong and read like a bug. - **An unrecognised notification kind is dropped, not drawn wrong** (`IS-048`). - **GM-only search results are filtered, not hidden.** The player's panel is built from a list the GM-only records never entered, and the GM's copy marks them so Dana can see what her players cannot. - **Theme is three choices, not a toggle.** A two-state switch cannot say "follow the system", which is the default. ## Pronouns (#653) The sample now carries a **player's** pronouns separately from their **character's**, and they deliberately differ: Priya (she/her) plays a he/him rogue, Marcus (he/him) plays a she/her druid. My first draft showed Priya her character's pronouns, which is exactly the error #653 exists to prevent — so the fiction now makes the two impossible to conflate, and search renders both: *"Wren Halloway · Druid 6 · she/her · played by Marcus (he/him)"*. ## Four questions drawn both ways rather than decided The phone bar (wordmark vs a real search box), grouped vs ranked results, whether there is a footer at all, and where the account menu lives on a phone. Each is drawn, not described, so the owner can choose by looking. ## The shell moves to shared files `shared/shell.css` and `shared/shell.js` (`window.QBS`), so the remaining seven lanes share one copy instead of each carrying its own. **`look.html` keeps its inline copy untouched** — it is the frozen record of the look decision, and a change made here must not be able to break it. The two are allowed to diverge; the header comment says so. Verified by rendering in Chromium at 1500px, light and dark: no console output, no page errors. Three faults in my own first draft were found that way and fixed — a caption promising a search box the drawing did not have, a caption pointing at the wrong row, and desktop bars squeezed into 340px columns where the breadcrumb wrapped at a width no desktop has. Tests: 77 passed (7 new for the routes). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(feedback-site): lane 1 of the surface mockups — the shell (#659)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 53s
CI / Docker image build (pull_request) Successful in 30s
CI / Bot/backend version sync (pull_request) Successful in 41s
CI / Backend lint (ruff) (pull_request) Successful in 44s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m51s
CI / Bot tests and audit (pull_request) Successful in 2m11s
CI / Backend migration, tests, and audit (pull_request) Successful in 9m1s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 16m35s
774eb86874
The first of eight lanes: the furniture every other screen sits inside.
Nothing here is a page in its own right, which is why it goes first —
the other seven lanes all sit in it.

Six surfaces drawn, in Lapis Table:

- SH-1, the app bar, on desktop and phone, in and out of a campaign,
  as the GM and as a player, with and without a badge.
- SH-9, campaign search (#667, new): grouped and ranked results, the
  empty/none/working/failed states, and the same query run by the GM
  and by a player so the audience filter is visible rather than
  asserted.
- SH-5, the bell (#655, first drawing): unread marked by a dot AND by
  weight, never by colour alone (IS-295); a deleted thread keeps its
  row and loses its words (IS-162); an unknown kind is dropped rather
  than drawn wrong (IS-048).
- SH-4, the account menu (#656, first drawing): name, pronouns,
  Profile, Help, Admin for admins, theme as three choices rather than
  a toggle, sign out.
- SH-2 and SH-3, the Contents, on Home and inside a campaign, GM and
  player. Carries the three entries #656 accepted: Discussions,
  Members & characters, Table rules & safety.

Four questions are drawn both ways rather than decided: the phone bar,
grouped vs ranked results, whether there is a footer at all, and where
the account menu lives on a phone.

The shell itself moves to shared/shell.css and shared/shell.js, so the
remaining seven lanes share one copy instead of each carrying its own.
look.html keeps its inline copy untouched: it is the frozen record of
the look decision, and a change here must not be able to break it.

Pronouns (#653): the sample now carries a player's pronouns separately
from their character's, and they deliberately differ — Priya (she/her)
plays a he/him rogue, Marcus (he/him) plays a she/her druid. Showing
one where you meant the other gets a real person wrong, so every
surface that names someone has to say which it is using.

Tests: 77 passed (7 new for the routes).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-09-16 02:32:56 +00:00
claude-bot deleted branch feat/lane1-shell-659 2026-09-16 02:50:30 +00:00
Sign in to join this conversation.
No description provided.