Files
commitea/docs/design/design_system_readme.md
Christian LeDoux 7a5cacc54c Scaffold CommiTea: yarn workspaces, Electron shell, core label schema, design system
- apps/desktop: electron-vite + React + Tailwind mapped onto design tokens
  (preflight off; tokens/base.css owns the reset); boots to a Reginald
  placeholder proving fonts/tokens/core wiring
- packages/core: pure TS; gitea label schema (est/*, p/*, deadline/hard)
  with pessimistic conflict resolution + 15 unit tests
- docs/design: full design handoff (tokens, 16 component contracts,
  interactive 14-screen prototype, Reginald voice rules)
- docs/PLAN.md: product plan (purity rule, pm-state repo, deterministic
  scheduler + Monte Carlo, directive log)
- Deliberate deviation from novelpad stack: no ElectricSQL/PGlite — local
  store is a rebuildable cache over gitea REST/webhooks (better-sqlite3
  in main process, arriving in P1)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 20:42:46 -04:00

8.1 KiB
Raw Permalink Blame History

CommiTea Design System

CommiTea is an AI-project-manager built on Gitea: a lightweight Electron app (one window, React + Tailwind) where a local-ish LLM agent captures work via interview, maps capacity, and forecasts deadlines with Monte Carlo honesty. Gitea holds human-authored intent (issues, milestones, labels); a sidecar holds machine-derived state (forecasts, calibration). The agent talks; a deterministic scheduler does the math.

Sources: uploads/commitea.md — the product plan (concept, architecture decisions, UI intents, phases) — and uploads/commitea.jpeg, the app-icon logo (green tea cup on slate-teal). No Figma or codebase was provided; this system was designed from scratch against the brand brief: "High-class British tea drinking experience, with intelligent professionalism — a 140-IQ assistant. The wit in the copy is what reminds you you're working professionally and playfully."

Product surfaces (from the plan): Focus card (Now/Next/Later), burn-up chart with forecast cone, runway view, kanban + dependency drill-ins, and agent chat (chat = write-path, UI = read-path).

Logo: the provided app icon lives at assets/logo.jpeg (original, white margin) and assets/logo-icon.png (cropped, rounded). In UI chrome, pair the icon at 24px with the typographic wordmark — "CommiTea" in Libre Caslon Display. Never redraw the mark.


CONTENT FUNDAMENTALS

The agent is Reginald — a brilliant, unflappable English gentleman of a project manager. Dry wit, never silly. Wit level ~7/10: almost every surface has one line with a raised eyebrow, and everything else is crisp and factual. He is "Reginald" in the UI and in copy — never "the AI", never "the assistant".

Rules

  • Reginald speaks in first person, addresses you as "you". He has opinions and states them: "I'd take the parser bug first; it blocks three others."
  • Numbers are sacred, phrasing is warm. Forecasts are always ranges, never point dates: "80% chance this lands Mar 312." Reginald never hedges the math, only decorates it: "The cone has narrowed. I'm quietly pleased."
  • Wit lives in complete sentences, usually the last one. Never in buttons, labels, or data. Buttons are plain verbs: "Approve", "Brew plan", "Defer".
  • Tea vocabulary is a seasoning, not a theme park. Sanctioned terms: brew (generate/plan), steep (work in progress), service (the daily standup — "Morning service"), the pot (backlog). Use at most one per screen. Never "tea-rrific", never puns on "oolong".
  • Sentence case everywhere — titles, buttons, headers. No Title Case, no ALL CAPS except tiny overline labels.
  • No emoji. Ever.
  • No exclamation marks except in genuine celebration (milestone closed early).
  • Machine data renders in mono, verbatim: est/3d, p/2, deadline/hard, #142.

Specimen copy

  • Empty backlog: "The pot is empty. Tell me what you're planning and I'll draw up the tickets."
  • Morning standup: "Morning service. Two things drifted overnight; one needs your opinion."
  • Consequence diff: "Done — X ships today. Milestone Beta moves +6 days. Shall I make it so?"
  • Blocked nag: "#87 has been steeping for four days. It blocks #91 and #92. Worth a look."
  • Forecast: "80% this lands Mar 312. The estimate history says you're optimists — I've adjusted."
  • Error: "Gitea isn't answering. I'll keep trying and say nothing more about it."
  • Destructive confirm: "This deletes the milestone and unhouses 12 issues. I'd like to hear you say yes."

VISUAL FOUNDATIONS

The aesthetic: fine stationery meets instrument panel, poured as green tea. Cool porcelain, slate-green ink, a hairline of jade. The interface should feel like a beautifully typeset letter that happens to compute Monte Carlo forecasts.

  • Color. Cool porcelain surfaces (--paper-0/1/2, green-tinted whites), slate-green ink scale (--ink-1/2/3), one brand green (spruce — the logo's slate-teal, --accent), one gem (jade --jade, the tea's mint — used only in hairlines and small accents, never large fills). Status colors are muted (moss, oolong amber, madder red, wedgwood blue). Two themes: light "morning service" (default) and dark "evening service" via [data-theme="dark"].
  • Type. Four voices, strictly cast: Libre Caslon Display for headlines and hero numerals; Libre Caslon Text (upright) exclusively for Reginald's speech (if it's serif body text, Reginald said it — italics are reserved for occasional emphasis inside his sentences); Instrument Sans for all UI; IBM Plex Mono for machine data — labels, estimates, dates, issue ids, counts. Never let voices bleed: no serif UI copy, no sans forecasts.
  • Backgrounds. Flat paper colors. No gradients, no textures, no imagery. Depth comes from paper-on-paper (card on app bg) plus hairlines.
  • Borders & rules. 1px hairlines (--line-1) everywhere; a 3px double rule (--rule-double) tops major sections like fine stationery. Key cards take a 2px inset jade top rule (--shadow-jade-line).
  • Cards. --surface-card on --surface-app, 1px hairline border, --radius-3 (10px), --shadow-1. Elevation is whispered, not shouted; --shadow-3 is reserved for dialogs/popovers.
  • Corner radii. Crisp: 4/6/10px. Pills only for chips and status dots. Nothing bubbly.
  • Hover states. Surfaces: one porcelain step darker (--paper-2). Buttons: darker fill (--accent-hover). Links: jade underline appears. Never opacity fades on text.
  • Press states. One step darker again (--accent-pressed); no shrink transforms.
  • Focus. 2px --focus-ring outline, 2px offset, everywhere.
  • Motion. Settled and gentlemanly: 120320ms, --ease-out, fades and small translates (48px). No bounces, no springs, no infinite loops. The forecast cone may draw itself in once (~320ms).
  • Transparency & blur. Almost never. Only dialog scrims (rgba ink at 40%). No glassmorphism.
  • Data visualization. The cone is geometry, not decoration: filled band --cone-fill, edge --cone-line, actuals in ink. Ahead/behind reads as position, not color alone.
  • Layout. Generous headers (Caslon breathes), compact data rows (dev-tool density in tables/boards, 3236px rows). Fixed left rail navigation in-app; content column max ~1120px on wide screens.
  • Imagery. None beyond the logo. No stock photos, no illustrations. The typography is the decoration.

ICONOGRAPHY

  • System: Lucide at 1.5px stroke — copied locally into assets/icons/*.svg (69 icons, lucide-static v0.462.0). Use these files; do not hand-draw SVGs.
  • Usage: 16px inline with text, 1820px in buttons/nav. Stroke inherits currentColor. Icons always accompany a label except in IconButton (which requires a tooltip/aria-label).
  • Domain mapping: issues circle-dot, milestones milestone, board square-kanban, forecast chart-line, gantt chart-no-axes-gantt, deps network, agent sparkles, standup coffee, capacity gauge, directives flag, git events git-branch/git-commit-horizontal/git-pull-request/git-merge.
  • No emoji, no unicode-chars-as-icons. The only glyph liberty: mono · as a list separator and in agent prose.
  • No icon font. Inline the SVG or reference the file.

INDEX

  • styles.css — global entry; imports everything under tokens/
  • tokens/colors.css, typography.css, spacing.css, fonts.css, base.css
  • assets/fonts/ — self-hosted woff2 (Libre Caslon Display/Text, Instrument Sans, IBM Plex Mono)
  • assets/icons/ — Lucide SVGs (local copies); assets/logo.jpeg + assets/logo-icon.png — brand mark
  • guidelines/ — foundation specimen cards (Design System tab)
  • components/core/ — Button, IconButton, Badge, Tag, Card, Tabs
  • components/forms/ — Input, Select, Checkbox, Radio, Switch
  • components/feedback/ — Dialog, Toast, Tooltip
  • ui_kits/app/ — CommiTea Electron app recreation (Focus, Board, Agent chat, Runway)
  • SKILL.md — agent-facing entry point

Intentional additions: Icon (wrapper that inlines local Lucide SVGs — needed because icons ship as files); Tag doubles as the gitea label chip (est/*, p/*, deadline/hard).