feat(feedback-site): round two — two full-scale mockups and a short reaction form #590

Merged
claude-bot merged 3 commits from feat/feedback-round2 into main 2026-09-10 07:24:51 +00:00
Contributor

Round one asked people to rate eight wireframe concepts and mostly went unanswered: the sketches were too abstract to react to. Round two replaces them with two complete, high-fidelity designs and four questions.

The two designs, chosen from what round one's ratings actually support:

  • A — Book & Table (concept C6): the highest-rated concept of the eight and the top pick on two of the three sheets. A document-like Book between sessions with a persistent table of contents, and a dark, thumb-sized Table during one. Its GM prep surface borrows C3's console, and wiki-plus-rules lookup is reachable from inside the table, which was the explicit ask against this concept.
  • B — Session First (concept C2): second overall and the top pick of the player sheet. A session is one page of Plan, Play and Review, with a Now bar naming the one thing wanted from you and a session strip for the campaign's whole history. Its Review phase is the decluttered version, keeping verified events beside the summary.

Both pages render the same invented campaign from shared/data.js against the same shared/kit.css, so they can only differ in structure, never in polish — otherwise an evaluator picks the prettier one for the wrong reason. Nothing is drawn from a real campaign, session or transcript; these links go to people outside the project. Both show the event log shipped in #568 so it gets evaluated too.

The site. New audience round2 with its own rating keys, validated per-audience so round-one documents keep loading and exporting unchanged; new routes for the landing page, the two mockups and their shared assets, all readable with no key at all, on GET and HEAD; writing still gated by the existing share key. The admin readout and CSV gain round-two sections appended after the round-one columns. 18 tests cover the round-one documents still working, the key gates, per-audience key rejection in both directions, and every new route answering 200 without a key.

The form is short on purpose: name, which design you would rather use, two ratings each, three optional text boxes.

🤖 Generated with Claude Code

Round one asked people to rate eight wireframe concepts and mostly went unanswered: the sketches were too abstract to react to. Round two replaces them with two complete, high-fidelity designs and four questions. **The two designs**, chosen from what round one's ratings actually support: - **A — Book & Table** (concept C6): the highest-rated concept of the eight and the top pick on two of the three sheets. A document-like Book between sessions with a persistent table of contents, and a dark, thumb-sized Table during one. Its GM prep surface borrows C3's console, and wiki-plus-rules lookup is reachable from inside the table, which was the explicit ask against this concept. - **B — Session First** (concept C2): second overall and the top pick of the player sheet. A session is one page of Plan, Play and Review, with a Now bar naming the one thing wanted from you and a session strip for the campaign's whole history. Its Review phase is the decluttered version, keeping verified events beside the summary. Both pages render the **same invented campaign** from `shared/data.js` against the **same `shared/kit.css`**, so they can only differ in structure, never in polish — otherwise an evaluator picks the prettier one for the wrong reason. Nothing is drawn from a real campaign, session or transcript; these links go to people outside the project. Both show the event log shipped in #568 so it gets evaluated too. **The site.** New audience `round2` with its own rating keys, validated per-audience so round-one documents keep loading and exporting unchanged; new routes for the landing page, the two mockups and their shared assets, all readable with no key at all, on GET and HEAD; writing still gated by the existing share key. The admin readout and CSV gain round-two sections appended after the round-one columns. 18 tests cover the round-one documents still working, the key gates, per-audience key rejection in both directions, and every new route answering 200 without a key. **The form is short on purpose**: name, which design you would rather use, two ratings each, three optional text boxes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Round one's eight abstract wireframes went mostly unfinished; round two swaps
them for two complete-screen mockups (opened in their own tab, never
iframed) and a much shorter form: name, which design you'd rather use (the
one required pick), two 1-5 ratings per design, one comment per design, and
one overall free-text question. Everything but name and choice is optional.

- app.py: new "round2" audience; ResponseDoc.ratings now validates against a
  per-audience allowed key set (RATING_KEYS_BY_AUDIENCE) instead of the
  single CONCEPTS tuple, so round one's C0-C7 keys and round two's
  a_find/a_table/b_find/b_table stay mutually exclusive and an unknown key
  is still rejected either way. New ResponseDoc.choice field (a/b/both),
  required by the write endpoint for round2. Round-one documents and their
  validation are unchanged.
- Serving: /mockups (landing page + form), /mockups/a, /mockups/b, and their
  shared shared/kit.css + shared/data.js, all GET+HEAD, all keyless (only
  the write endpoint keeps the share-key gate). Mockups served at /mockups/a
  and /mockups/b (no trailing slash) so their relative "shared/…" links
  resolve to /mockups/shared/….
- static/mockups.html: new landing page in the existing visual style,
  explaining the ask in plain language and holding the form.
- static/mockups/: throwaway placeholder mockups + shared kit.css/data.js
  (obviously marked as placeholders) so the app is testable before the real
  mockups land; static/mockups/.gitkeep for the directory.
- static/admin.html: separate "Round two" summary (A/B/both counts, the two
  per-design ratings) and response list, without touching round one's
  concept table or filters.
- api/export.csv: round-two columns (choice, the four ratings, two
  comments, round2_change) appended after round one's existing columns, so
  column position for round one is unchanged.
- static/index.html: links round two as well as the two round-one pages.
- tests/test_app.py: new pytest + fastapi.testclient suite (18 tests) —
  round-one doc still loads/exports, round-one write still succeeds,
  round-two write with/without the share key, missing choice, wrong-audience
  rating keys rejected both directions, and GET+HEAD 200 for the mockup
  routes with no key.
- README.md: round two's paths, audience, storage shape, and how to read
  results back; test-run instructions.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
feat(feedback): the two round-two mockups, built and in place
Some checks failed
CI / Backend lint (ruff) (pull_request) Successful in 35s
CI / Bot/backend version sync (pull_request) Successful in 28s
CI / Backend migration, tests, and audit (pull_request) Has been cancelled
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Has been cancelled
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been cancelled
CI / Frontend tests, audit, and build (pull_request) Has been cancelled
CI / Docker image build (pull_request) Has been cancelled
CI / Bot tests and audit (pull_request) Has been cancelled
6e9dd4b031
Replaces the placeholders with the finished designs: A, Book & Table (a
document-like Book between sessions and a dark, thumb-sized Table during one)
and B, Session First (a session as one page of Plan, Play and Review, with a
Now bar and a session strip).

Both render the same invented campaign from shared/data.js against the same
shared/kit.css, so the two can only differ in structure. Nothing here is drawn
from a real campaign, session or transcript: the pages are shown to people
outside the project.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-09-10 07:04:40 +00:00
fix(feedback-site): make the image readable regardless of the source's permissions
All checks were successful
CI / Backend lint (ruff) (pull_request) Successful in 32s
CI / Bot/backend version sync (pull_request) Successful in 26s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m58s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m42s
CI / Bot tests and audit (pull_request) Successful in 3m31s
CI / Docker image build (pull_request) Successful in 4m50s
CI / Backend migration, tests, and audit (pull_request) Successful in 8m27s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 15m14s
e230708f55
`COPY` preserves the mode it finds. A static tree copied from a Windows
checkout arrived as 0700 directories, so the image's own unprivileged user
could not read the pages it serves and every mockup route answered 500 while
the older pages, which happened to be 0755, kept working.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
claude-bot deleted branch feat/feedback-round2 2026-09-10 07:24:52 +00:00
Sign in to join this conversation.
No description provided.