From c210a01db5628380ce86134c2d7546f9d70ec917 Mon Sep 17 00:00:00 2001 From: Jakob Wennberg <149234542+jakobwennberg@users.noreply.github.com> Date: Sun, 26 Jul 2026 14:34:04 +0200 Subject: [PATCH] docs(design): sync design guidance with the shipped system + new Stripe mark (#1211) * docs(design): sync design guidance with the shipped frame-layout system The design-scan skills and workflow predate the 2026-07 UI migration; they delegated to .claude/rules/design.md but their inline checklists knew nothing of the locked conventions, so scans could not flag violations of frame layout, one-line rows, chips-as-exceptions or .attn. This adds the conventions to scout-design, loop-design-scan, the /create-ticket design prompt and the design-scan workflow contract. design.md itself gets the two post-migration decisions it was missing: the fiscal-year primitive is FyPicker (ContextPicker chip-dropdown, convention 8), not the legacy FiscalYearSelector, and the founder-chosen Fonster settings language (flat hairline rows, switches, dirty-only sticky save bar, 920x680 modal, replaceState tab switching) is now convention 15. Co-Authored-By: Claude Fable 5 * fix(import): swap the Stripe chip to the current parallelogram mark Replaces the pre-rebrand Stripe wordmark svg with the current white-on-purple parallelogram icon (same asset the website repo uses). stripe.svg had exactly one reference; it is removed rather than left orphaned. Co-Authored-By: Claude Fable 5 --------- Co-authored-by: Claude Fable 5 --- .claude/rules/design.md | 4 +++- .../skills/create-ticket/prompts/design.md | 15 ++++++++++++++- .claude/skills/loop-design-scan/SKILL.md | 7 +++++++ .claude/skills/scout-design/SKILL.md | 18 ++++++++++++++++-- .claude/workflows/design-scan.js | 9 ++++++++- app/(dashboard)/import/page.tsx | 2 +- public/logos/stripe.svg | 3 --- public/logos/stripeicon.jpeg | Bin 0 -> 4431 bytes 8 files changed, 49 insertions(+), 9 deletions(-) delete mode 100644 public/logos/stripe.svg create mode 100644 public/logos/stripeicon.jpeg diff --git a/.claude/rules/design.md b/.claude/rules/design.md index e98b808f..2cd4676c 100644 --- a/.claude/rules/design.md +++ b/.claude/rules/design.md @@ -53,6 +53,7 @@ Decided during the 2026-07 concept work (dev_docs/ui_migration_plan.md); they ap 12. **Status colors are data, not chrome**: sage/ochre/terracotta only in numbers, exception chips and `.attn`. 13. **Overlays**: centered modal for create/confirm (template, assistant, confirmations, settings); right slide-over for reviewing an object (Granskning detail). Both with veil, Esc, and click-outside. 14. **Manual base, AI as opt-in.** Base flows work without AI; AI entry points are clearly labeled discrete choices (e.g. "Skapa med assistenten") and no AI suggestion posts without Granskning. +15. **Settings speak "Fönster"** (founder-chosen 2026-07-25, applies to every settings tab). Settings content is flat hairline rows, never boxed cards: `SettingsGroup` / `SettingsRow` / `SettingsSectionHeader` from `components/settings/SettingsRows.tsx`. Toggles are switches, not checkboxes. Saving is a sticky bar that fades in only when the form is dirty (`components/settings/SettingsFormWrapper.tsx`); no always-visible save button. The settings surface is a 920x680 modal (`components/settings/SettingsModal.tsx`); switching tabs inside it updates the URL shallowly via `history.replaceState` (`SettingsRail.tsx`), never `router.replace`, which would remount the modal. ## Design System Tokens @@ -89,7 +90,8 @@ Compact metric cards (e.g. dashboard tiles, salary KPI row) use `p-4`. Detail ca | No-data state | `components/ui/empty-state.tsx` `EmptyState` | Don't hand-roll `
…
`. Preset variants exist (`EmptyInvoices`, `EmptyCustomers`, `EmptyTransactions`, etc.). | | Loading placeholder | `components/ui/skeleton.tsx` `` | Don't hand-roll `bg-muted rounded animate-pulse` divs. | | Inline help / formulas | `components/ui/info-tooltip.tsx` `InfoTooltip` | Hover-revealed; don't use always-visible info buttons. | -| Fiscal year picker | `components/common/FiscalYearSelector.tsx` | Don't use raw `` for fiscal periods. | +| Settings rows / save | `components/settings/SettingsRows.tsx`, `SettingsFormWrapper.tsx` | Fönster language (convention 15): flat hairline rows, dirty-only sticky save bar. Don't hand-roll settings cards or per-field save buttons. | **Tabular display rules.** - All financial values get `tabular-nums`. diff --git a/.claude/skills/create-ticket/prompts/design.md b/.claude/skills/create-ticket/prompts/design.md index c2e87b0b..520a2650 100644 --- a/.claude/skills/create-ticket/prompts/design.md +++ b/.claude/skills/create-ticket/prompts/design.md @@ -2,7 +2,7 @@ ## Perspective -You are scanning for design and UX issues in the Accounted interface. The app follows an editorial-monochrome aesthetic: paper-white surfaces, hairline borders, serif headlines; considered and quiet. Evaluate against the Accounted design system: achromatic palette (semantic sage/ochre/terracotta are data-only: charts and financial deltas, never chrome), Hedvig Letters Serif display headings, Geist body, generous whitespace, functional (non-decorative) motion. +You are scanning for design and UX issues in the Accounted interface. The app follows an editorial-monochrome aesthetic: paper-white surfaces, hairline borders, serif headlines; considered and quiet. Evaluate against the Accounted design system: achromatic palette (semantic sage/ochre/terracotta are data-only: charts and financial deltas, never chrome), Hedvig Letters Serif display headings, Geist body, generous whitespace, functional (non-decorative) motion. Since 2026-07 the app uses the frame layout (rounded page panel on a warm `--frame`, pill buttons, flat shadow-free cards); the locked conventions live in `.claude/rules/design.md`. ## Checklist @@ -15,6 +15,19 @@ You are scanning for design and UX issues in the Accounted interface. The app fo - [ ] Icon sizes consistent (15px nav, larger for empty states) - [ ] Borders are full-opacity `border-border` on cards/surfaces (no `border-border/60`) +### Locked UI-migration conventions (2026-07, full list in `.claude/rules/design.md`) +- [ ] Page title via `PageHeader` (24px/32px serif); no hand-rolled `

` +- [ ] Buttons keep the app-wide pill radius (no per-call-site `rounded-*` on `