Files
agentic-dev/docs/product/design-brief-veect.md
Danijel Martinek 4d1d53432e docs(product): commit Veect product spec bundle under docs/product/
Sandcastle implementers run in git worktrees that contain only committed
files, so every PRD referencing the spec was unreadable to dispatch
agents while the bundle sat untracked in .proto/. The eight spec
documents are copied verbatim (filenames preserved) from
.proto/veect-product-docs/ and become the canonical source.

The stray veect-product-docs.zip at the repo root was already removed
before this change — that half of the task is a verified no-op.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
2026-07-12 13:15:26 +02:00

282 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Design Brief — "Veect" (working name) · v2
_A hand-off for a design agent / designer. Founder OS · Phase 6._
_Companion docs: `company-context.md` (strategy) · `design-app-prd.md` (MVP scope)._
_v2 changes: folded in an adversarial design review (fixed art-direction contradictions, added missing screens/states, spec'd the AI interaction) **and integrated Impeccable** (impeccable.style) as Veect's craft standard._
_**v3 (2026-07-10): the interactive prototype + codebase now exist and are ground truth** — see `veect-design-spec-current.md` (authoritative design language: the monochrome ink instrument) and `veect-ui-gap-spec.md` (the remaining work: repo-connect, publish, environment surfaces + editor deltas). This brief remains authoritative for **intent** (north star, principles, journeys, signature moments, voice, a11y) — where §11's old art direction conflicts with the design spec, **the design spec wins**._
_Confidence: 🟢 verified · 🟡 reasoned · 🔴 assumption to validate._
---
## 0. On Impeccable (how it shows up in this brief)
**Impeccable** (impeccable.style, by Paul Bakaus — open-source) is a _design language / "skill" for AI harnesses_ (Claude Code, Cursor) whose entire purpose is to **stop AI-generated UIs from looking like AI** — to replace generic "slop" with real craft. 🟢 It's structured as a design language (rules) plus sub-skills for **building, "polishing" (critiquing + fixing), and teaching** good design. 🟡
It matters to Veect **twice**, and both are load-bearing:
1. **As Veect's own craft standard** — the UI you design from this brief must itself be Impeccable-grade (see §11.5 Craft Standard + the checklist in §20). Veect dogfoods the rules it sells.
2. **As a product capability** — Veect doesn't just constrain output to the user's _system_; it holds output to a _craft standard_ (an Impeccable-style ruleset) via a **Polish** pass, so results are **on-brand AND high-craft**. See PRD F9/F10. This is the deepening of the wedge: not just "your components," but "your components, arranged well."
> ⚠️ **Fidelity note:** I could not fetch Impeccable's verbatim `DESIGN.md` this session (fetch was rate-limited). The craft rules in §11.5/§20 reflect Impeccable's documented anti-slop philosophy plus established craft; treat exact numeric values as 🟡/🔴 and reconcile them against the real Impeccable ruleset (or install the Impeccable skill) before locking. Sources listed at the end.
## 1. Header / how-to
- **Product:** **Veect** — decided 2026-07-10. Pronounced **VEEKT**, rhymes with _piqued_ (lock this in all voice work). Lowercase `veect` in CLI/code contexts.
- **One-liner:** A design-system-native canvas that turns your own tokens and components into real, production-ready React — held to a craft standard so it never looks generic.
- **Surfaces:** Desktop web app (primary). Read-only shared preview link (any device) — _fast-follow, not MVP_ (see PRD). No native mobile app.
- **Who it's for:** Product/UI designers and design-engineer / design-system leads at startups & scale-ups that already have a design system and ship a React web product.
- **How to use this brief:** §3§7 = point of view + experience; §8§9 = build map (IA + screens + states); §10§14 + §20 = the craft bar. Recommendations are decisive defaults you may improve on, not pixel law. Everything 🔴 must be validated (see §19).
## 2. Product snapshot
- **What it is:** A visual canvas where a designer composes screens from **their own** components and tokens, gets **real React + Tailwind** out, and where a **craft layer (Impeccable)** keeps the result high-quality.
- **The wedge:** v0 / Lovable / Bolt / Figma Make generate _generic_ UI and throw your design system away. Veect makes your design system the **source of truth** and constrains everything — including AI — to it, **then polishes to a craft standard**.
- **Emotional promise:** _"My design system is alive, what I make is what ships — and it looks like we hired a great designer, not an AI."_ Relief, trust, quiet pride.
## 3. Design north star
> **Every screen must make the designer trust that what they see is exactly what will ship — built from their own system, arranged with real craft, with nothing lost in translation.**
If a screen introduces doubt ("is this the real component? will the code match? is this on-brand? does this look generic?"), it has failed. **Trust is the product; craft is how trust is earned.**
## 4. Design principles (opinionated, product-specific)
1. **Your system is the hero; our chrome is stagehand.** Veect's UI is deliberately quiet, near-monochrome, recessive — a matte camera body around a bright photograph — so the user's brand dominates. _Why: the #1 complaint about competitors is off-brand output; our UI must never visually compete with the user's brand._
2. **Real, never represented.** The canvas renders the actual coded component at actual fidelity; preview = the same runtime as export. _Why: "roughly how it'll look" is the lie that makes handoff lossy._
3. **Show the code — trust is earned in the open.** Real code is a keystroke away, not a buried export; clean code that imports _their_ components converts skeptics. _Why: designers have been burned by screenshot-to-code; visible honest code is the proof._
4. **AI proposes in your language; the system disposes.** AI output is always in the user's components/tokens, always shows provenance, always reversible; when it can't map, it _says so_ — it never falls open to generic markup. _Why: constrained-to-your-system is the entire differentiator._
5. **Craft is not optional — Impeccable-grade or it doesn't ship.** Every surface (ours and the user's output) meets the craft checklist in §20: real type hierarchy, strict spacing, purposeful color, optical alignment, designed empty/error states. Generic is a bug. _Why: "on-brand but sloppy" still loses; the whole promise is that the output is genuinely good._
6. **Flow is a latency budget, not a slogan.** The core loop is keyboard-first and sub-frame (<16ms). _Match Figma's canvas responsiveness or don't ship the canvas._ _Why: designers forgive missing features, never lag in the core loop._
7. **Honest about fidelity.** Where something is prototype vs. production-ready, the UI says so plainly; never over-promise "shippable." _Why: over-claiming code quality loses the engineer — and the engineer is the veto._
## 5. Users & context (personas condensed _for design_)
| | **Maya — Product Designer (primary)** | **Devon — Design-Systems / Design-Engineer Lead (champion + gatekeeper)** |
| ------------------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Device/env | 2732" display, macOS, Figma muscle memory, headphones-in flow | Dual monitor, VS Code + Figma, **reads the generated code** |
| Emotional state | Impatient with handoff, burned by generic AI output, protective of brand | Skeptical of design-to-code claims, allergic to messy code |
| Proficiency | Expert in design tools; reads code, writes little | Fluent React/Tailwind; owns the component library + the repo veto |
| Accessibility | Long sessions dark mode, low glare; keyboard-heavy | Scrutinizes output a11y/contrast |
| Artifact they hold | Brand/visual decisions; often **no clean token file** (it's in Figma or the repo) | The **real coded components + tokens** (Tailwind config / repo) |
| What wins them | On-brand, high-craft result in minutes, no relearning | Code that imports _their_ components and passes review |
> Design implication (from review): **Maya frequently does not own a DTCG/Tailwind file** — it's Devon's. Onboarding must not dead-end on "upload your tokens." See §9.2 no-file path.
## 6. JTBD → top tasks
| Job | Concrete tasks the UI must make effortless |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| Design finished build matches without policing pixels stop redlining | Compose from real components; see live code; export exact |
| System changes design & code stay in lockstep "the library" means one thing | Re-import changed tokens; see impact/diff; apply safely |
| Need a screen ship it myself move at idea-speed | Prompt or drag; export runnable code |
| Using AI build from _my_ system on-brand, not throwaway | Constrained AI compose with provenance; graceful "can't map" |
| Result looks generic make it genuinely good look designed, not AI | One-click **Polish** to the craft standard |
## 7. Core user journeys (name the "aha")
**A. Onboarding → first value (target <20 min, rev 1.2: repo-connect flow).**
Open the app **Connect a repository**: GitHub device-code sign-in pick the repo (or paste a git URL / choose a local folder) Veect clones + installs (honest, first-class progress this is minutes, design it) repo has `veect.config.json`? straight in; **no config? the wizard**: browse the repo tree, pick component folders visually, confirm detected framework/tokens _the component library and tokens load from the repo and the canvas re-themes to their brand_ compose a first section (drag or ✦) **Polish** **Checkpoint → Publish** the PR link. **The aha: "these are _our actual components_ — and that's a real branch my team can review."**
**B. The core loop (daily).**
Open project compose/adjust on canvas (drag, props, tokens) glance at live code AI compose a section **Polish** export. Tight, keyboard-first, low-latency _sketching that happens to produce production code_.
**C. Habit / expansion.**
Map/save components reuse across screens/projects **re-import updated tokens** (System update, §9.8) (fast-follow) share read-only prototypes; (v2) sync to repo. The user's mapped library + saved patterns is the retention flywheel.
## 8. Information architecture
**Surfaces:** (1) Home/Projects · (2) Editor · (3) Preview (full-screen + fast-follow shared link) · (4) **Settings** (system, mappings, account).
**Editor layout (persistent 3-pane + dual companion):**
```
Top bar: Project ▾ · breakpoint [Desktop] · ⟳ Preview · ✧ Polish · </> Code · ⇪ Export · avatar
Left rail: Pages/Layers · Component Library · Tokens (switchable)
Center: Canvas (frames, direct manipulation) + ✦ AI compose bar (docked bottom)
Right rail: Inspector (props · tokens · layout for selection)
Companion: Code panel (right split / bottom drawer, toggle </>) · Polish panel (✧, right)
```
**Two command surfaces, reconciled (review fix):** **K = commands/navigation** (find, jump, run action); ** AI bar = generative** (compose/modify from your system). Typing `✦` inside K routes to the AI bar. Never two overlapping "type here to make UI" fields.
**Screen map:** Home Editor {Component editor (focused), Token manager, **System update / re-import**, Polish, Preview, Code/Export, Settings}.
## 9. Key screens (purpose · primary user · key elements · **all states**)
### 9.1 Home / Projects
- **Purpose:** get into work fast; hold projects + systems. **Elements:** project grid (live real-render thumbnails), New project, Bring a design system, recent, search.
- **States:** **Empty** warm single-CTA "Bring your design system to life" + 20-sec inline demo loop. **Loading** skeletons matching grid rhythm. **Error** inline retry. **Populated** real-render thumbnails.
### 9.2 Onboarding — Connect your repository _(rev 1.2: replaces the file-upload flow)_
- **Purpose:** get from zero to the repo's live system. **Elements:** three connect paths presented as equals **GitHub** (device-code card: the code large and copyable, "waiting for approval" state), **git URL** (HTTPS+token / SSH-via-agent, with a plain-language access explainer), **local folder** picker; then **clone + install progress** (real stages: cloning installing reading components with honest time feel, never an indeterminate spinner for minutes); then **the config wizard** if the repo has no `veect.config.json`: a repo-tree browser with visual multi-select of component folders, detected framework/tokens shown for confirmation, "we'll include this config in your first published branch."
- **States:** **Choose source** three calm cards. **Device-code wait** code + "approve in browser" with retry. **Auth failed / no access** specific, kind, actionable ("This token can't see acme/shop ask for read access or try SSH"). **Read-only connect** allowed, with a quiet banner ("You can design and checkpoint; Publish needs write access"). **Cloning/Installing** staged progress, cancellable. **Wizard** tree browser, folder multi-select, confirm chips. **Env needed** detected `.env.example` the Environment panel 9.12), skippable with consequences stated. **Success** components + tokens stream into the library and **the canvas re-themes from the repo's own system** (Signature Moment #1) + "acme/shop is live."
### 9.3 Editor / Canvas (the product)
- **Purpose:** compose from real components; the home of flow. **Elements:** frames, drag-drop, auto-layout stacks (direction/gap/padding = tokens), multi-select, snap/align guides, undo/redo, K, AI bar, Polish.
- **States:** **Empty frame** ghost placeholder + hint ("Drag a component, or describe this screen"). **Selection** inspector + guides. **Dragging** snap lines, live auto-layout reflow. **AI proposing** staged **ghost layer** of _real_ components (see §10.6), provenance chips streaming in. **Polish running** non-blocking scan with issue markers. **AI can't map** inline first-class prompt (Signature Moment #6), not a dead error. **Save states (review fix):** autosave tick · **saving** · **offline (read-only banner)** · **reconnecting** · **conflict (two tabs)** resolution. **Latency guard:** all direct manipulation <16ms/frame.
### 9.4 Component Library (manage · map · define) — _fully specified (was the weakest section)_
- **Purpose:** the user's system as objects; **map** base-kit their real coded components, and define reusable patterns. This is the retention flywheel and the wedge-critical mapping surface.
- **Elements:**
- **Library list:** base kit · **mapped** components (linked to the team's real import path + prop names) · user-saved patterns; each shows usage count + a **mapping status** (mapped / unmapped / drifted).
- **Component detail:** a **variant matrix** (variant × state) with a **live state grid** (default / hover / focus / active / disabled / loading) rendered from the real runtime; a **token-binding panel** (which token drives which property); **prop editor**.
- **Mapping panel (wedge-critical):** map "Veect Button" `@/components/ui/Button`, map props (`variant→kind`, etc.); preview the exact import the export will emit.
- **New component from selection** (save a composed pattern).
- **States:** **Empty (user)** "You've got the base kit map it to your real components, or save your first pattern." **Mapping** guided prop-matching with live code preview. **Editing variant** focused mode, live state grid. **Drift flag** quiet non-blocking marker; clicking opens **Impact review** (what changed, where used, apply/ignore). **Success** component usable on canvas; export references the real import.
### 9.5 Tokens / Design-system panel
- **Purpose:** colors, type, spacing, radius, shadow as named tokens = single source of truth. **Elements:** grouped token lists, edit-in-place, **live contrast check** on color pairs, "where used" per token.
- **States:** **Empty** import or seed defaults. **Editing** everything bound updates live (canvas + code) the **token ripple** (Signature Moment #5). **Contrast fail** inline AA warning with ratio + fix (icon+text, not color alone). **Success** change ripples visibly.
### 9.6 Prototype / Preview
- **Purpose:** prove "what you see is what ships." **Elements:** full-screen live render, breakpoint switch, **real hover/focus/active states** (free from real components), device frame optional. _(Frame-to-frame click-through linking is cut from MVP — Figma-parity creep — see PRD §8.)_
- **States:** **Loading** fast real-render (no fake spinner). **Interactive** cursor + keyboard, visible focus rings. **Error** graceful "couldn't render open editor." **(Fast-follow) Shared view** clean, no editor chrome; link lifecycle: active / revoked / expired / 404.
### 9.7 Code / Export
- **Purpose:** earn trust; hand off. **Elements:** file tree, syntax-highlighted **read-only** React+Tailwind, token file, "Copy component," "Download project (.zip)." Code visibly **imports the user's mapped components** and references token vars; **fidelity badge** ("Production-grade" / "Prototype-grade").
- **States:** **Generating** streamed formatting. **Ready** copy/download + honest badge. **Export success** "Runs with `npm i && npm run dev`." **Error** specific, retryable. **Unmapped-components warning** "3 components aren't mapped to your repo yet export will include Veect defaults for these. Map them?"
### 9.8 System update (re-import changed tokens) — _new screen (review fix; closes JTBD #2)_
- **Purpose:** keep design & code in lockstep when the system changes. **Elements:** re-import tokens **diff** (added / changed / removed), **impact preview** ("affects 14 components across 3 screens"), one-click **apply with undo**, per-change accept/skip.
- **States:** **No changes** "Your system is up to date." **Diff** grouped changes with before/after swatches. **Breaking change** flags components that would break; safe-apply guidance. **Applied** ripple + "System updated · undo."
### 9.9 Settings — _new (was in IA, unspecified)_
- **Purpose:** manage system source, component **mappings**, craft standard, account. **Elements:** design-system source, mapping table, **craft standard selector** (Veect default / Impeccable / custom), export defaults, team/billing. **States:** standard load/error; mapping health summary.
### 9.10 Polish panel (Impeccable-driven) — _new product surface_
- **Purpose:** critique the current screen against the craft standard and fix, in your tokens/components. **Elements:** ranked issue list (spacing off-scale, weak hierarchy, contrast fail, misalignment, orphaned state), each with a **why** (teach) and a **one-click fix**; "Polish all"; before/after.
- **States:** **Clean** "Impeccable. Nothing to fix." (earned, not flattering). **Issues** grouped by severity, each fix previewable. **Applying** animated corrections. **Can't auto-fix** explains the manual change needed.
### 9.11 Publish & branch status _(new in rev 1.2)_
- **Purpose:** turn a checkpoint into a reviewable PR without the designer knowing git. **Elements:** per-project branch card (`veect/checkout-flow` · commits · behind-base indicator), **Checkpoint** and **Publish** as distinct, honest verbs; after publish, the **compare/PR deep link** as the hero action; "Update from base" with plain-language explanation.
- **States:** **Unpublished checkpoints** gentle nudge chip. **Publishing** progress. **Published** PR link + "your team can review this now." **Push rejected (no write access / protected)** specific fix path, patch-export escape hatch. **Behind base** staleness count + Update action. **Conflict on update** read-only conflict view, "ask a developer" guidance never a merge editor in v1.
### 9.12 Environment & connection health _(new in rev 1.2)_
- **Purpose:** the app's honest answer to "why is preview broken?" **Elements:** per-workspace env form (keys from `.env.example`, values masked, stored encrypted, never committed say so in-UI); connection card (provider, access level, last fetch); doctor strip (git, disk, adapter health) with one-line fixes.
- **States:** **Missing env** adapter crash translated to a human sentence ("Preview needs `DATABASE_URL` add it here; it stays on this machine"). **Values saved** adapter restarts automatically. **Token expired / revoked** re-auth flow inline. **Disk pressure** per-workspace usage + archive suggestions.
## 10. Signature moments (the award bar — craft these first)
1. **"The system comes alive."** During onboarding, as tokens resolve, the neutral base kit **re-themes to the user's brand in one crafted ~700ms cascade** (colors, type, radius sweeping across components). The _"those are mine"_ moment. The single most important animation in the product.
2. **"What you see is what ships."** Live synced split: nudge a component on canvas and the **real code updates in lockstep**, with the one reserved **live-green** indicator affirming preview = code = export.
3. **"On-brand in one prompt."** Type _"a pricing section, three tiers"_ it assembles from **their** Card/Button/Text in **their** tokens, with provenance chips visibly _not_ the generic slate/Inter output expected from v0.
4. **"The clean handoff."** Export becomes a readable file tree that **imports their real components** a confident, almost anticlimactic _"of course it's real."_ Delight through trustworthiness.
5. **"Change once, everywhere."** _(new)_ Edit `brand-500` in the token panel and watch a **~400ms ripple** re-theme every affected component on canvas _and_ highlight the changed code lines. The best possible demo of "system as source of truth"; the daily-use aha.
6. **"The graceful refusal."** _(new — the differentiator, as a moment not an error)_ AI hits something your system can't express a crafted, calm beat: _"You don't have a component for this yet. Compose one from your primitives?"_ with its own motion and copy. An error state elevated to a signature interaction is an award-grade move and it's the exact behavior that separates Veect from tools that fake it with generic markup.
## 11. Visual & art direction — **v3: SUPERSEDED by the shipped design language**
> **The implemented design language wins.** The prototype resolved this section's recommendations into something sharper than what was written here — the **monochrome ink instrument**: no chromatic accent at all (the accent IS the ink, `#161513`/`#F4F4F2`), warm paper neutrals, radius **2px** everywhere in chrome, hairline separation with zero floating shadows, **Instrument Sans** (UI) + **Fragment Mono** (engraved labels) + the customer's own font for canvas content, hand-drawn 16-grid icons, **amber reserved exclusively for AI-scope affordances**, muted `--live` green for status, dark by default. **The authoritative tokens, values, and rules live in `veect-design-spec-current.md` §2 — design all new surfaces from that file, not from this section's history.**
>
> What survives from this section as still-binding intent: the **personality** ("a precise, calm instrument — matte body around a bright photo"); **color never the only signal** (icon + label always); the **canvas art-board theme is independent** of app chrome so light brands aren't judged on black; chrome type never competes with the customer's canvas font; and the data-viz restraint rule below.
>
> **Wordmark (corrected from the naming decision):** the mark is the lowercase `veect` wordmark closed by the **square ink terminal** — "the vector point" (design spec §2.1). No pictorial mark. _(The earlier ee-pair concept is retired; the pair/parity story lives on in Signature Moment #2's canvas=code lockstep, not in the logotype.)_
- **Data-viz (light use usage counts, contrast meters, polish scores):** monochrome + single accent; meters and small bars, not chart junk.
- **Data-viz (light use usage counts, contrast meters, polish scores):** monochrome + single accent; meters and small bars, not chart junk (follow standard restrained categorical palette if a dashboard grows).
### 11.5 Craft standard — Impeccable alignment
Veect's UI (and the output it generates) must pass the craft checklist in **§20**, derived from Impeccable's anti-slop philosophy: intentional type hierarchy (real size _and_ weight contrast, not just size), strict spacing scale, purposeful and restrained color, true visual hierarchy and focal point, optical alignment/correction, depth used sparingly, motion with purpose, and **every state designed** (empty/loading/error/success are where craft shows). 🟡 _Reconcile exact rules with the real Impeccable ruleset before locking (§0 note)._
## 12. Motion & micro-interactions
- **Character:** precise, quick, spring-based for direct manipulation; motion clarifies causality, never decorates.
- **Params (review fix buildable, not vibes):** drag/direct-manipulation spring **stiffness 210 / damping 24**; micro-feedback **90160ms** ease-out; panels/drawers **180240ms**; **re-theme reveal 600800ms** (the one indulgent moment); **token ripple ~400ms** propagation with synced code-line highlight; **AI placement stagger ~90ms** per element.
- **`prefers-reduced-motion`:** honor fully re-theme cascade crossfade; ripple instant; disable springs/parallax. No motion is load-bearing for meaning.
## 13. Voice & microcopy
- **Tone:** precise, calm, designer-native; speak in **components, tokens, frames, variants** never "divs/markup." Confident, never hypey; honest about fidelity; **explains _why_** when it fixes something (the Impeccable "teach" instinct).
- **Do words:** compose, system, tokens, components, live, real, ships, export, on-brand, polish, craft.
- **Don't words:** magic -as-crutch, "just," "simply," "AI-powered," "pixel-perfect," "website builder," "slop."
- **Example strings:** onboarding success _"Your system is live."_ · export _"Ready to ship. Runs with `npm i && npm run dev`."_ · AI can't map _"You don't have a component for this yet. Want me to compose one from your primitives?"_ · polish clean _"Impeccable. Nothing to fix."_ · polish fix _"Bumped this to your 24px step and matched your heading weight — here's why."_
## 14. Accessibility & responsive
- **Target:** WCAG 2.2 AA for Veect's own UI (the palette in §11 is tuned to pass a tool that _sells_ contrast checking cannot fail its own). Full keyboard operability of the canvas; visible focus rings; ARIA for panels/trees; respects reduced-motion + prefers-color-scheme.
- **Color independence:** every status (live/warn/error, contrast/polish pass/fail) pairs icon/label with color.
- **Output a11y:** surface **contrast checks on the user's token pairs** at import and in the token panel; the base kit ships **semantic HTML + ARIA** so exported code passes Devon's review (not just contrast).
- **Chrome-vs-brand collision policy (review fix):** the iris selection outline and live-green dot must stay legible when the user's brand _is_ violet or green use a **dual-tone selection outline** (light/dark stroke pair) and always pair the live indicator with an icon+label; test chrome over violet/green/black/white canvases.
- **Responsive (the app):** desktop-first, optimized ~12802560px; graceful 1024px; below "Veect is best on desktop." Generated **output** is responsive-ready (auto-layout), with the second breakpoint a near-term follow (PRD).
## 15. Technical & platform constraints (for design awareness)
- **Stack:** desktop web app; output is **React + Tailwind**, tokens as CSS vars / Tailwind theme. Canvas, preview, and export share **one component runtime** visual parity is by construction; design assuming no divergent mock rendering.
- **Wedge-critical:** export emits the user's **real, mapped components** (import paths + prop names), not Veect-internal clones design the **mapping** surface 9.4) as first-class.
- **Constraint that shapes UX:** AI is hard-limited to the project's component/token registry design the **"can't map / compose from primitives"** path (Moment #6) and the **Polish** loop as first-class flows.
- **Budgets:** <16ms/frame canvas on a 50-_node_ screen (define node = one rendered element instance, incl. nested primitives); AI first paint <2s.
## 16. Design success metrics
- **Activation:** % of new users who compose a screen from their own system **and export** (target 40% 🔴).
- **Time-to-first-value:** signup first exported on-brand screen (<20 min median 🔴; guarded by the no-file onboarding path).
- **Craft lift:** Polish-panel issues per screen trend down; % screens exported "clean" (no open craft issues).
- **Task success:** compose-a-known-section success 90% in usability tests 🟡.
- **Trust/delight:** SUS 80 🟡. _(The primary trust metric — would an engineer merge it — is measured on the eng side; see PRD §3.)_
## 17. Deliverables expected (from the design agent)
1. **User flows** for the 3 journeys 7), incl. the **no-file onboarding** and the **system-update** loop.
2. **Low→mid-fi wireframes** for all screens in §9 (9.19.10), each with empty/loading/error/success (+ save/offline/conflict for the editor).
3. **Hi-fi designs:** onboarding (incl. re-theme frames), Editor, Component Library (variant matrix + mapping + drift), Tokens, System update, Polish panel, Preview, Code/Export, Settings.
4. **Veect's own design system** (tokens, recessive-chrome components, dark+light) dogfood the concept; ship it passing §20.
5. **Prototypes + motion specs** for the 6 signature moments 10).
6. **Redlines** for the two hardest interactions: canvascode sync, and the constrained-AI **propose→accept / graceful-refusal** flow 10.6).
7. **Microcopy deck** (the voice in §13 across states) and **a11y-annotated** redlines.
## 18. Inspiration / benchmarks (emulate the _quality_, do **not** clone)
- **Linear** precision, keyboard-first speed, restrained dark UI, K discipline.
- **Figma** canvas calm, direct-manipulation fluency, inspector clarity (the muscle memory to respect).
- **Vercel/Geist & Raycast** code-as-first-class-object; velocity _but note (review):_ leaning on these too hard reproduces the 2026 default uniform; borrow the discipline, not the skin.
- **Subframe** nearest competitor; study its visual-builderReact flow, then out-design it on "your own system + craft is the source of truth."
- **Impeccable (impeccable.style)** the craft bar itself; the anti-slop standard Veect must meet and enforce.
- **One off-cluster reference (review fix):** **Teenage Engineering / broadcast-console & camera UI** for one ownable, tactile detail that escapes the sameness. Cash the "instrument" metaphor into form: e.g., **engraved-label token chips** and **dial-like prop steppers** for numeric tokens.
> Do not clone any of these. The synthesis — _a recessive, precise instrument that makes the user's brand and real, well-crafted code the hero_ — is Veect's own.
## 19. Open design questions (validate before locking — carries strategy 🔴s)
- 🔴 **A1 (owns-code):** How much _code surface_ do designers want? Design two framings "export & hand to dev" (code as proof) vs. "you own/edit the code" (code as workspace) and test which converts. Changes how prominent the code panel is.
- 🔴 **A2 (Figma coexistence):** replacement canvas or per-phase tool alongside Figma? Recommend designing for **coexistence** first; validate with a clickable-mock task test before building the canvas.
- 🔴 **A4 (vs Subframe):** make the "system + craft as source of truth" differentiation _visible_ in the UI before hi-fi.
- 🟡 **Mapping vs authoring:** MVP leans on **mapping to real components**; how much in-app authoring does Devon expect? Design mapping as first-class now, authoring as a path.
- 🔴 **Impeccable rules (fidelity):** reconcile §11.520 with the verbatim Impeccable `DESIGN.md`; decide whether Veect _embeds the Impeccable skill_ or ships a compatible ruleset.
- 🟡 **Fidelity labeling:** validate "Production-grade / Prototype-grade" language with real engineers.
## 20. Appendix — Craft checklist (the "Impeccable-grade" bar)
Every screen (Veect's UI _and_ generated output) should pass:
- **Type:** a real hierarchy via size **and** weight (not size alone); 2 families; consistent scale; no default-Inter look.
- **Spacing:** everything on the 4px scale; intentional whitespace; related things grouped, unrelated things separated; no arbitrary gaps.
- **Color:** restrained; one purposeful accent; neutrals do the work; color never the only signal; AA contrast.
- **Hierarchy:** one clear focal point per screen; secondary/tertiary genuinely de-emphasized; alignment optical, not just mathematical.
- **Depth:** used sparingly and consistently (one shadow tier); borders hairline; radius on-scale.
- **Motion:** purposeful, fast, causal; reduced-motion honored.
- **States:** empty/loading/error/success all designed; empty and error states are craft showcases, not afterthoughts.
- **Detail:** optical corrections, consistent icon weight, no orphaned or truncated content, real content not lorem.
> 🟡 Align exact thresholds with the real Impeccable ruleset (§0).
---
### Sources (Impeccable)
- Impeccable impeccable.style (site, docs, "Designing with Impeccable"): https://impeccable.style/ · https://impeccable.style/docs/impeccable/ · https://impeccable.style/designing/
- GitHub pbakaus/impeccable (incl. `DESIGN.md`, `SKILL.md`): https://github.com/pbakaus/impeccable
- Overviews: https://abduzeedo.com/impeccable-open-source-ai-design-skill-better-ui · https://emelia.io/hub/impeccable-ai-design-skill
_End of brief v2. Pair with `design-app-prd.md` for scope and acceptance criteria. Update as 🔴 items validate._