Records D-004 and D-015 to D-025: shells and ownership, server seams (router middleware, rate_limit layer, tasks::start, AuditWriter and PushQueue traits, next_occurrence_date in kvitt-domain, M3 owns recurring generation, M4 lands after M3), OpenAPI parsed-value equality, feature convention and strings, empty fake scenario and resolveRange exception, shared ledger rows and editor fields in :core:design, no bundled font, pruning at 04:00, development infrastructure as M2c-dev built it, M2c-pi allowances, release keystore, production import procedure. Plans and prompts close their open points; HANDOFF rewritten to the real state; CLAUDE.md: implementation agents never edit SPEC.md or docs/decisions.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9.1 KiB
PLAN-U1: UX directions
1. Goal
Produce two or three clearly different visual directions for Kvitt as self-contained HTML phone mock-ups with PNG exports, so the owner can pick one. Each direction shows the six key screens in light and dark, in Swedish, with realistic household data, and states its palette, typography, shape, motion and iconography.
2. Read first
Read these, in this order, and nothing else before starting. Everything the UX work needs is in SPEC §13 and the sections it cites.
- SPEC §13 UX sprint: §13.1 Context the UX agent must design for, §13.2 Navigation model, §13.3 Screens and what each must show, §13.4 Deliverables (Phase 1), §13.5 Out of scope for the UX sprint.
- SPEC §9.7 Icon and colour tokens.
- SPEC §9.8 Formatting.
- SPEC §9.2 Effect line from the viewer's side (lists) and §9.3 Balances (the wording rules).
- SPEC §4 FR-8 Expenses (AC-8.10), FR-10 Balances, FR-11 Settlements, FR-12 Audit log and timeline (AC-12.4, AC-12.5), FR-14 Analytics (AC-14.2 to AC-14.6): the copy and content the six screens must carry.
- SPEC §2 Non-goals (so no direction shows a non-goal).
CLAUDE.mdsections ORCHESTRATION (worktrees), ANTI-PATTERNS (no placeholder text), EXECUTION PROTOCOLS.
3. Already established
- Two adults in Sweden, Samsung Galaxy S26 and S26+, about 411 × 891 dp viewport, portrait only, Android 16; Material 3 (Expressive where stable), must not imitate One UI (§13.1).
- The add-expense flow is the most important flow: open app, tap add, type amount, type description, tap save (§13.1, AC-8.6). "Who owes whom" on Home is second (§13.1).
- Swedish is primary; designs must survive long Swedish words at 200 % font scale (§13.1).
- Light and dark follow the system; dynamic colour only as a per-direction option if the direction still works with it (§13.1).
- Amounts in tabular figures; direction always in words plus colour, never colour alone (§13.1); money never shown with a minus sign (§9.8).
- Accessibility: touch targets ≥ 48 dp, text contrast ≥ 4.5:1, TalkBack labels for icon-only controls, reflow at 200 % (§13.1).
- Category icons only from the 30 Material Symbols tokens of §9.7; 12 colour token names fixed, hex values may change, light and dark values with contrast checked against both surfaces (§9.7, §13.1).
- Users shown by avatar (picture or initials on a colour derived from the user id, AC-4.5) and name; the viewer is always "you"/"du" (§13.1).
- Navigation: bottom navigation Home (Översikt), Analytics (Statistik), Settings (Inställningar); FAB "Add expense" (Lägg till utgift) on Home and Account detail; pushed screens with top app bar and back; full-screen expense editor, not a bottom sheet. Binding unless a direction proposes a better one with reasons (§13.2).
- Money format sv
1 234,50 krwith U+00A0; dates in lists3 okt., detaillördag 3 oktober 2026, times14:02(§9.8). - Balance wording: " owes you X", "You owe X", "All settled up" (account screens "Settled up") (§9.3); effect lines "You lent", "You borrowed", "Not involved", "Paid for yourself" (§9.2).
- Phase 1 screens per direction: S-4 Home, S-7 Expense editor, S-5 Account detail, S-9 Settle up, S-11 Analytics, S-8 Expense detail with timeline, each light and dark, Swedish, names "Jacob" and "Anna", Swedish shops and amounts, no lorem ipsum (§13.4).
- No external requests except Google Fonts (§13.4). The app bundles no font and uses the Material 3 default typeface (D-020); a direction may preview another typeface, but U2's design spec replaces it with the default.
- Suggested starting points "Kvitto", "Skärgård", "Kontor" may be used, replaced or merged; at least two clearly different directions (§13.4).
- The UX agent writes no Kotlin (§13, §13.5).
4. Owned paths
From SPEC §14.7, verbatim: docs/ux/** (owner: U1, U2).
Edit nothing outside these paths; a needed change elsewhere is a contract request to the orchestrator.
5. Deliverables
docs/ux/directions/<n>-<slug>/index.htmlfor each of 2 or 3 directions: self-contained page rendering a 411 dp phone frame with S-4, S-7, S-5, S-9, S-11, S-8 in light and dark, Swedish, realistic data.- In each
index.html(or a section of it): name and one-line idea; palette (primary, secondary, tertiary, surfaces, error, "owed" and "owing" semantic colours, the 12 category colours) light and dark with contrast ratios; typography (M3 type scale, typeface and why, tabular figures); shape (corner radii per component size); elevation and motion principles; iconography (Material Symbols style, weight, fill rules); balance header in its three states; one 200 % font-scale screenshot. docs/ux/directions/<n>-<slug>/png/*.png: one PNG per screen per theme of that direction, plus the 200 % font-scale screenshot.docs/ux/directions/README.md: comparison table (character, strengths, risks, implementation cost in Compose) and the recommendation with reasons.
6. Steps
- Worktree. The owner runs the UX sprint in a separate session in the worktree
~/orca/workspaces/kvitt/UX-sprinton branchUX-sprint; work only there andgit rebase mainbefore reporting. No git-ignored files are needed for this plan; do not copy any. - Read §2 of this plan in order.
- Choose 2 or 3 directions (start from §13.4's suggestions or replace them) and write one paragraph each in
docs/ux/directions/README.mdbefore drawing anything. - Build the realistic Swedish data set once (shared by all directions): users Jacob and Anna; accounts such as "Vardag", "Huset", "Japan 2027" plus one archived account; expenses at Swedish shops (ICA, Coop, Systembolaget, SJ, Clas Ohlson) with amounts that exercise thousands separators; one recurring expense; a settlement with two allocations; a timeline with create and change lines per AC-12.4 and a pending line per AC-12.5; analytics over
last_6_monthsby category. - For each direction write
index.htmlwith all six screens in light and dark. Copy follows §9.2, §9.3, §9.8 and the AC wording of FR-8, FR-10 to FR-12, FR-14, in Swedish (the UX agent writes the Swedish). Check every text/background pair for ≥ 4.5:1 and record the ratios. - Add the direction's statement block (palette, typography, shape, elevation/motion, iconography, balance header three states, 200 % screenshot) as listed in §5.
- Export PNGs of every screen of every direction into
png/. Use a headless browser already installed on this Mac (check withcommand -v; for example Google Chrome's--headless --screenshot). If none is installed, stop and ask; do not install tools without the owner's yes. - Write the comparison table and recommendation in
docs/ux/directions/README.md. - Self-check the gate (§7): open each
index.html(file loads with no external request other than Google Fonts), every screen listed for phase 1 appears in each direction, all copy Swedish, no placeholder text. Grep the HTML forlorem,TODO,XXX,placeholder. - Commit on
UX-sprint(only files underdocs/ux/), thengit rebase main. Never merge, push or remove the worktree.
7. Gate
From SPEC §11.2 (v0.3), verbatim: "Files exist and open; each direction shows the six phase-1 screens of §13.4 (S-4, S-7, S-5, S-9, S-11, S-8) in light and dark; Swedish copy, no placeholder text".
Green means: every deliverable of §5 exists; each index.html opens in a browser offline (Google Fonts excepted); each direction shows each phase-1 screen of §13.4 (S-4, S-7, S-5, S-9, S-11, S-8) in light and dark; every visible string is Swedish; a grep for lorem|TODO|XXX in docs/ux/ returns nothing.
8. HUMAN steps
From SPEC §11.2, verbatim: "Review 2-3 directions, pick one, give comments". Where in the flow: after this plan's report, the orchestrator shows the owner the PNGs; the owner's pick and comments are the input to U2. Nothing in this plan waits on the owner.
9. Out of scope
- Phase 2 work (U2):
docs/ux/design-spec.md,docs/ux/strings.csv,docs/ux/screens/, the §9.7 hex proposal. - Screens beyond the six of §13.4 phase 1 (other than sketches the direction needs to explain itself).
- New features, changes to flows required by §4, changes to enums or limits, app icon production (a direction may sketch one), animations beyond descriptions, Kotlin code (§13.5).
- Anything in §2 Non-goals (receipt photos, other currencies, widgets, landscape layouts, language picker).
- Editing
SPEC.md,CLAUDE.mdor any file outsidedocs/ux/. - M6 design system work and any Android code.
10. Report
- Branch
UX-sprintand the head commit hash after rebasing onmain. - Gate: the list of files produced (per direction, count of PNGs) and the result of the placeholder grep.
- Fonts chosen per direction with their licence and whether they bundle as Android font resources; any other external dependency.
- The recommendation in one line.
- Open questions and spec gaps with section numbers.
- Numbering used (none expected; say
none). - HUMAN step to relay: "Review 2-3 directions, pick one, give comments", with the PNG paths.
11. Numbering
Decision ids, spec version and schema version are assigned by the orchestrator in the start prompt; use TODO(spec) if none was given.