@marver-design/marver 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/{build-D0GnIR4G.mjs → build-CNoXE13J.mjs} +3 -3
- package/dist/cli.mjs +23 -7
- package/dist/{dev-BK4x3PBr.mjs → dev-Blyy4jOL.mjs} +24 -5
- package/dist/init-3h9pXEzp.mjs +337 -0
- package/dist/manifest-CHmKAAtG.mjs +298 -0
- package/dist/{plugin-DB5t2WUl.mjs → plugin-DiDJA9n-.mjs} +157 -120
- package/dist/{serve-BPNmWeJx.mjs → serve-BvbAbWeK.mjs} +8 -1
- package/package.json +4 -3
- package/src/client/frame-host/bridge.js +8 -2
- package/src/client/frame-host/main.tsx +7 -1
- package/src/client/shell/App.tsx +69 -8
- package/src/client/shell/canvas/FrameNode.tsx +9 -0
- package/src/client/shell/store.ts +58 -8
- package/src/client/shell/styles.css +21 -2
- package/templates/AGENTS-embedded.md +38 -26
- package/templates/AGENTS-studio.md +38 -26
- package/templates/instructions/boards.md +38 -0
- package/templates/instructions/brand.md +60 -0
- package/templates/instructions/components.md +52 -0
- package/templates/instructions/configure.md +44 -0
- package/templates/instructions/craft.md +90 -0
- package/templates/instructions/discover.md +52 -0
- package/templates/instructions/reference/color.md +53 -0
- package/templates/instructions/reference/concepts.md +68 -0
- package/templates/instructions/reference/copy.md +57 -0
- package/templates/instructions/reference/critique.md +53 -0
- package/templates/instructions/reference/delight.md +35 -0
- package/templates/instructions/reference/layout.md +51 -0
- package/templates/instructions/reference/motion.md +66 -0
- package/templates/instructions/reference/operate.md +38 -0
- package/templates/instructions/reference/slop.md +76 -0
- package/templates/instructions/reference/states.md +48 -0
- package/templates/instructions/reference/tune.md +61 -0
- package/templates/instructions/reference/typography.md +45 -0
- package/templates/instructions/review.md +51 -0
- package/templates/instructions/wireframe.md +49 -0
- package/dist/config-DMBEpdEN.mjs +0 -132
- package/dist/init-DcOy1krf.mjs +0 -168
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Brand - extract it, or create it deliberately
|
|
2
|
+
|
|
3
|
+
Every high-fidelity frame renders inside a visual world. This phase makes that world
|
|
4
|
+
explicit. Never skip it silently: hi-fi work without a settled brand converges on the
|
|
5
|
+
same generic AI look every model produces.
|
|
6
|
+
|
|
7
|
+
## Path A - the repo has a brand: extract it
|
|
8
|
+
|
|
9
|
+
If the app has real screens, tokens, or a theme, the brand already exists. Document
|
|
10
|
+
it, never reinvent it:
|
|
11
|
+
|
|
12
|
+
1. Read the theme CSS, tokens, tailwind config, and 2-3 representative components.
|
|
13
|
+
2. Write `design/DESIGN.md` (10-20 lines): grounds and surfaces, accent
|
|
14
|
+
and its meaning, type faces and scale, radius language, shadow/border policy,
|
|
15
|
+
voice of the copy. Cite the token file as the source of truth.
|
|
16
|
+
3. Frames then consume the app's real tokens. Hand-typed hex values in a frame are a
|
|
17
|
+
defect - if a value is missing, it is a token to propose, not a literal to inline.
|
|
18
|
+
|
|
19
|
+
## Path B - no brand exists: create one, deliberately
|
|
20
|
+
|
|
21
|
+
For a whole new surface or site, read instructions/reference/concepts.md FIRST - it
|
|
22
|
+
owns the discipline of deriving distinctive directions (naming the category rut,
|
|
23
|
+
candidates from the audience's world, full commitment). This section covers the
|
|
24
|
+
token-level work once a direction exists.
|
|
25
|
+
|
|
26
|
+
1. **Name the world first.** The product's mechanism in one sentence; the audience's
|
|
27
|
+
cultural home; three adjectives the interface should earn. Write these down before
|
|
28
|
+
touching a color.
|
|
29
|
+
2. **Derive, don't default.** From the audience's actual world (its objects, notation,
|
|
30
|
+
publications, screen traditions), propose 2-3 distinct directions as one frame each -
|
|
31
|
+
same content, different world. Each direction commits fully: its own palette, type
|
|
32
|
+
pairing, radius/material language. Half-committed directions are unjudgeable.
|
|
33
|
+
3. **The forbidden defaults.** These are what every unguided model produces; reaching
|
|
34
|
+
for one when the brief didn't ask means you were not deciding:
|
|
35
|
+
- warm cream ground + serif display + terracotta accent; oversized ITALIC serif
|
|
36
|
+
as the hero voice
|
|
37
|
+
- near-black + lone neon/acid accent, cyan-on-dark, purple-to-blue gradient heroes,
|
|
38
|
+
dark mode made of colored glows
|
|
39
|
+
- glassmorphism as decoration, gradient text, Inter/Geist/Space Grotesk as the
|
|
40
|
+
"safe" pick
|
|
41
|
+
- emoji as icons, `rounded-lg` on everything, everything centered
|
|
42
|
+
(the complete tell catalog: reference/slop.md)
|
|
43
|
+
4. **Settle it into tokens.** The winning direction becomes CSS custom properties in
|
|
44
|
+
the theme (grounds, text tiers, accent + meaning, radius scale, spacing scale, two
|
|
45
|
+
type roles minimum). Then write DESIGN.md as in Path A. Components consume tokens;
|
|
46
|
+
nothing hand-types values.
|
|
47
|
+
|
|
48
|
+
## Rules for CREATED brands (Path B)
|
|
49
|
+
|
|
50
|
+
Path A documents the shipped system as it is - a mature brand with three accents or
|
|
51
|
+
four faces gets described, never trimmed to fit these defaults. When CREATING:
|
|
52
|
+
|
|
53
|
+
- **One accent carries the brand.** Semantic colors (success/warning/danger) are not
|
|
54
|
+
accents and never decorate.
|
|
55
|
+
- **The accent has a meaning** (action, selection, live state) - write it down and
|
|
56
|
+
spend it only there.
|
|
57
|
+
- **Both themes or one, decided.** Light + dark as token sets, or a deliberate
|
|
58
|
+
single-theme commitment recorded in DESIGN.md. Never an accidental single theme.
|
|
59
|
+
- **Type is two faces** (display + body; mono only when the content is code, data,
|
|
60
|
+
or measurement). A third face is a decision Path B does not make alone.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Components - engineering rules for promotable design
|
|
2
|
+
|
|
3
|
+
Frames become the app (see AGENTS.md's promotion section). These rules make that
|
|
4
|
+
promotion mechanical instead of a rewrite.
|
|
5
|
+
|
|
6
|
+
## Structure
|
|
7
|
+
|
|
8
|
+
- **Composition over configuration.** A component takes children and a few props;
|
|
9
|
+
it does not take a `variant` prop that swaps its entire body. When two variants
|
|
10
|
+
share less than half their markup, they are two components.
|
|
11
|
+
- **Variants are props, never forks.** `<Button intent="danger">`, not
|
|
12
|
+
`DangerButton.tsx` copied from `Button.tsx`. A fork's fixes never propagate.
|
|
13
|
+
- **Presentational only.** Props in, JSX out. No stores, no network, no auth, no
|
|
14
|
+
router imports inside anything that lives in `design/` (the AGENTS.md law) - and
|
|
15
|
+
keep it true after promotion: containers own data, components own pixels.
|
|
16
|
+
- **Fixture shapes match PROP shapes, not API shapes.** `_fixtures.ts` exports typed
|
|
17
|
+
objects the component accepts directly, so tsc catches drift. Mapping backend
|
|
18
|
+
responses into those props is the container's job at promotion time - never bend a
|
|
19
|
+
component's props toward an endpoint.
|
|
20
|
+
|
|
21
|
+
## Accessibility baseline (non-negotiable)
|
|
22
|
+
|
|
23
|
+
- Interactive = a real `<button>`, `<a>`, or input - never a div with onClick.
|
|
24
|
+
- Every input has a label; every icon-only button has an aria-label.
|
|
25
|
+
- Focus-visible styling exists and comes from the palette.
|
|
26
|
+
- Keyboard order follows reading order; Escape closes what Enter opened.
|
|
27
|
+
|
|
28
|
+
## States are part of the component, not the page
|
|
29
|
+
|
|
30
|
+
Every component ships knowing the states that APPLY to it: an input has error and
|
|
31
|
+
disabled; a list has loading and empty; a divider has neither. Screens own the
|
|
32
|
+
orchestration states (page-level loading, empty, failure - see
|
|
33
|
+
reference/states.md). Pages compose component states; they never invent them per-use.
|
|
34
|
+
|
|
35
|
+
## The gallery is the contract
|
|
36
|
+
|
|
37
|
+
Each shared component gets `design/components/<name>/variants.tsx`: every variant ×
|
|
38
|
+
every state, labeled, in one frame. The gallery is the review surface, the regression
|
|
39
|
+
canary, and the documentation. A component change without a gallery update is
|
|
40
|
+
incomplete work.
|
|
41
|
+
|
|
42
|
+
## Maintain - pay down drift before it solidifies
|
|
43
|
+
|
|
44
|
+
When the same ad-hoc pattern (a value, a markup shape, a style cluster) appears a
|
|
45
|
+
third time, that is the promotion trigger: extract it into a token or shared
|
|
46
|
+
component and update design/DESIGN.md in the same pass. Drift left in place becomes
|
|
47
|
+
the system; three identical one-offs are a primitive announcing itself.
|
|
48
|
+
|
|
49
|
+
## Naming
|
|
50
|
+
|
|
51
|
+
Name by role, not appearance: `PriceCard`, not `BlueBox`. Appearance changes;
|
|
52
|
+
the role is the API.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Configure - reach the idle state, once per repo
|
|
2
|
+
|
|
3
|
+
The idle state is marver fully wired into THIS repo: frames render with the app's
|
|
4
|
+
real theme, the app's components import cleanly, and the brand is documented. Every
|
|
5
|
+
design session assumes it. Verify it on your first session in a repo, or whenever
|
|
6
|
+
frames render suspiciously unstyled - then never think about it again.
|
|
7
|
+
|
|
8
|
+
## The idle-state checklist
|
|
9
|
+
|
|
10
|
+
1. **Theme wired**: `design/theme.css` exists and imports the app's real stylesheet.
|
|
11
|
+
Proof: the demo/existing frames render styled on the canvas, not as bare HTML.
|
|
12
|
+
2. **Components importable**: the import alias in AGENTS.md's UI line actually
|
|
13
|
+
resolves (open one app component from a frame and render it).
|
|
14
|
+
3. **Brand documented**: `design/DESIGN.md` exists and matches the
|
|
15
|
+
app's tokens (see brand.md Path A). Without it, every hi-fi session re-derives
|
|
16
|
+
the brand and drifts.
|
|
17
|
+
4. **Manifest honest**: `design/manifest.json` lists what is really on disk.
|
|
18
|
+
|
|
19
|
+
All four true → idle state. Go design.
|
|
20
|
+
|
|
21
|
+
## By repo maturity
|
|
22
|
+
|
|
23
|
+
- **Brand-new repo (no app)**: `design/instructions/setup.md` exists and is the
|
|
24
|
+
authority - STOP, follow it (set up the stack, re-run init). Do not design against
|
|
25
|
+
a repo that has nothing to build from.
|
|
26
|
+
- **Fresh repo (app scaffolded, little product code)**: init's detection is usually
|
|
27
|
+
right. Verify the checklist, create DESIGN.md from the starter tokens (Path A -
|
|
28
|
+
even a default shadcn theme is a documentable brand), and note in it which parts
|
|
29
|
+
are placeholder so Brand can revisit deliberately.
|
|
30
|
+
- **Old repo (mature app)**: detection may have picked the wrong stylesheet or missed
|
|
31
|
+
the real component library. Read the app's entry point and layout to find the TRUE
|
|
32
|
+
theme entry; fix `design/theme.css`'s import if init guessed wrong. Map the real
|
|
33
|
+
component library (where do buttons actually live?) and correct AGENTS.md's UI
|
|
34
|
+
line if needed (delete its marker line first to take ownership, or ask the human
|
|
35
|
+
to re-run `npx marver init` after fixing `components.json`). Old repos often have
|
|
36
|
+
several half-brands - document the one the app actually ships in DESIGN.md and
|
|
37
|
+
name the others as legacy.
|
|
38
|
+
|
|
39
|
+
## When it breaks mid-project
|
|
40
|
+
|
|
41
|
+
Frames suddenly unstyled → the theme import path moved: fix `design/theme.css`.
|
|
42
|
+
New app components not resolving → the alias changed: fix the frame imports and tell
|
|
43
|
+
the human AGENTS.md's UI line is stale. Never work around a broken idle state with
|
|
44
|
+
hand-rolled CSS - that is how throwaway styling metastasizes.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Craft - the quality floor for high-fidelity frames
|
|
2
|
+
|
|
3
|
+
Binding rules for every hi-fi frame. Read them before Build, then apply them silently -
|
|
4
|
+
never announce a checklist. The brief and the settled brand (DESIGN.md) override
|
|
5
|
+
anything here; your own habits never do.
|
|
6
|
+
|
|
7
|
+
## When you are stuck, or the human is unhappy: the reference shelf
|
|
8
|
+
|
|
9
|
+
This file is the floor. Depth lives in instructions/reference/ - pull the ONE file
|
|
10
|
+
that owns the problem, when the problem appears:
|
|
11
|
+
|
|
12
|
+
| Symptom / task | Read |
|
|
13
|
+
|---|---|
|
|
14
|
+
| hierarchy unclear, spacing monotone, "layout feels off" | reference/layout.md |
|
|
15
|
+
| type roles blur, reading uncomfortable, scale arbitrary | reference/typography.md |
|
|
16
|
+
| palette aimless, contrast failing, dark mode wrong | reference/color.md |
|
|
17
|
+
| adding any animation, or motion feels cheap | reference/motion.md |
|
|
18
|
+
| labels/errors/empty-state text | reference/copy.md |
|
|
19
|
+
| human says "bland" / "too much" / "too busy" | reference/tune.md |
|
|
20
|
+
| loading/empty/error coverage, stress inputs, first-run | reference/states.md |
|
|
21
|
+
| dense app UI, dashboards, settings, tables | reference/operate.md |
|
|
22
|
+
| a personality moment, celebration, easter egg | reference/delight.md |
|
|
23
|
+
| brand-new surface or visual world (with brand.md) | reference/concepts.md |
|
|
24
|
+
| a full review pass was requested | reference/critique.md |
|
|
25
|
+
| output feels generic; sweeping for AI tells | reference/slop.md |
|
|
26
|
+
|
|
27
|
+
These rules target content surfaces (marketing, docs, product pages). Dense Operate
|
|
28
|
+
UI (dashboards, editors, admin) follows its platform's conventions where they
|
|
29
|
+
conflict - a data table is allowed to be tight, and DESIGN.md's decisions always win.
|
|
30
|
+
|
|
31
|
+
## Verify - checks against the RENDERED frame, never against intentions
|
|
32
|
+
|
|
33
|
+
- **Contrast**: body and placeholder text ≥ 4.5:1, large text ≥ 3:1. Secondary text
|
|
34
|
+
on a colored surface takes its tint from that surface's hue - plain gray on color
|
|
35
|
+
reads broken.
|
|
36
|
+
- **Spacing rhythm**: elements inside a group sit close; groups sit far apart; a
|
|
37
|
+
heading holds more air above it than below. All gaps come from the spacing scale.
|
|
38
|
+
- **Type**: prose columns in the 45-75ch range (65-75 ideal for long-form); each level of hierarchy differs in BOTH size and
|
|
39
|
+
weight; letter-spacing never tighter than -0.04em; headings get `text-wrap:
|
|
40
|
+
balance`; render the real copy at every device width and fix whatever overflows.
|
|
41
|
+
- **Depth**: pick borders or shadows per element, never stack both on one card. A
|
|
42
|
+
real shadow has offset and blur; an unblurred colored ring around an element is
|
|
43
|
+
ornament pretending to be elevation.
|
|
44
|
+
- **States**: hover, focus-visible, disabled, loading, error, empty. A control
|
|
45
|
+
missing its states is an illustration of a control.
|
|
46
|
+
- **Copy**: buttons say what they do ("Publish", not "Submit"); error text says what
|
|
47
|
+
went wrong and how to recover; everything in the product's own vocabulary.
|
|
48
|
+
- **Browser-owned surfaces**: selection color, caret, focus rings, scrollbars, and
|
|
49
|
+
the numerals in data tables (`font-variant-numeric: tabular-nums`) all default to
|
|
50
|
+
browser styling that belongs to no brand. Claiming them is cheap and reads as care;
|
|
51
|
+
skipping them is the fastest giveaway of unconsidered work.
|
|
52
|
+
- **Motion**: one deliberate, well-placed moment beats an effect on everything.
|
|
53
|
+
Ease-out, starting from a visible state; never the identical fade-in stamped on
|
|
54
|
+
each section; honor `prefers-reduced-motion`.
|
|
55
|
+
|
|
56
|
+
## Refuse - the defaults every unguided model reaches for
|
|
57
|
+
|
|
58
|
+
A brief can explicitly ask for any of these. Reaching for one unprompted means no
|
|
59
|
+
decision was made - rewrite the element rather than toning it down. This is the
|
|
60
|
+
short list; the COMPLETE catalog of generated-UI tells is reference/slop.md - sweep
|
|
61
|
+
it on review passes.
|
|
62
|
+
|
|
63
|
+
- Uniform icon+heading+paragraph card grids as the whole page structure; a card
|
|
64
|
+
inside a card (no exceptions); the oversized-number-with-tiny-label stat hero.
|
|
65
|
+
- Little uppercase labels riding above every heading; numbered section markers
|
|
66
|
+
(01/02/03) when the order carries no information.
|
|
67
|
+
- Gradient-filled text; blur/glass on elements that aren't overlaying anything;
|
|
68
|
+
thick colored left-border stripes on cards and alerts; chunky offset block shadows
|
|
69
|
+
in a design that isn't committed to that style throughout.
|
|
70
|
+
- Monospace to signal "technical" - mono earns its place only under code, data, or
|
|
71
|
+
measurement.
|
|
72
|
+
- Emoji or unicode symbols as icons - icons come drawn, from the app's icon set, in
|
|
73
|
+
one consistent stroke weight.
|
|
74
|
+
- Centering everything; the same border-radius on every element; pill shapes on
|
|
75
|
+
large containers (pills belong to small controls).
|
|
76
|
+
- Choosing light or dark by product category reflex - the use scene decides, or
|
|
77
|
+
DESIGN.md already did.
|
|
78
|
+
|
|
79
|
+
## Frame law
|
|
80
|
+
|
|
81
|
+
- Frames are made of the app's real components and tokens. Rebuilding a lookalike of
|
|
82
|
+
an existing component inside a frame is a defect.
|
|
83
|
+
- Repeated and semantic values (colors, type sizes, radii, the spacing rhythm)
|
|
84
|
+
resolve to tokens; a missing one is a proposal to raise with the human, not a
|
|
85
|
+
literal quietly inlined. One-off layout geometry (a grid ratio, a max-width, an
|
|
86
|
+
SVG coordinate) may stay local - the test is "would a second use want this value".
|
|
87
|
+
- Declare `meta.viewport` for the target width, then check the neighbors - the human
|
|
88
|
+
WILL sweep devices with keys 1-5.
|
|
89
|
+
- Live fully inside the settled visual world. A direction executed at full commitment
|
|
90
|
+
can be judged and improved; a hedged one can only be redone.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Discover - understand before you draw
|
|
2
|
+
|
|
3
|
+
Run this phase for any NEW surface, feature, or project. Skip it only when a brief
|
|
4
|
+
already answers everything below. Its output is a written brief; nothing gets designed
|
|
5
|
+
until the brief has a human nod.
|
|
6
|
+
|
|
7
|
+
## 1. Read the repo, then interview
|
|
8
|
+
|
|
9
|
+
First inspect what exists: the app's screens, components, theme, copy, and any brief
|
|
10
|
+
or README - questions the repo answers are never asked. THEN ask at most five
|
|
11
|
+
questions, in one message; never CSS values or aesthetic lanes. Ask what changes the
|
|
12
|
+
work:
|
|
13
|
+
|
|
14
|
+
1. **Who** must this serve, and in what scene (device, ambient light, attention level)?
|
|
15
|
+
2. **The one job**: what should a visitor be able to decide, complete, understand, or
|
|
16
|
+
feel? (One job. If you get three, ask which one wins.)
|
|
17
|
+
3. **The core flow**: entry → the moment of value → done. What are the 3-6 screens?
|
|
18
|
+
4. **What exists**: real content, brand assets, an app, competitors they respect,
|
|
19
|
+
any screenshots or sites they LOVE? (A visual reference beats a paragraph of
|
|
20
|
+
description - ask for one when the direction matters.)
|
|
21
|
+
5. **Out of scope**: what must NOT be touched or built?
|
|
22
|
+
|
|
23
|
+
## 2. Pick the mode - it drives every later decision
|
|
24
|
+
|
|
25
|
+
Name the surface's mode in the brief. The mode is the visitor's success:
|
|
26
|
+
|
|
27
|
+
- **Persuade** - the visitor decides and acts (landing, pricing, campaign). The offer
|
|
28
|
+
and the action must be legible in the first viewport.
|
|
29
|
+
- **Operate** - the visitor completes a task (app UI, dashboard, settings). Scanability
|
|
30
|
+
and native expectations outrank expression.
|
|
31
|
+
- **Read** - the visitor understands (docs, guides). Structure for comprehension.
|
|
32
|
+
- **Experience** - the visitor is inside the work (portfolio, gallery). The artifact
|
|
33
|
+
leads; the interface recedes.
|
|
34
|
+
|
|
35
|
+
A tool's landing page is Persuade. A fashion house's docs are Read. The mode belongs
|
|
36
|
+
to the SURFACE, not the product.
|
|
37
|
+
|
|
38
|
+
## 3. Write the brief
|
|
39
|
+
|
|
40
|
+
Create `design/scenes/<scene>/_brief.md`: audience + scene, the one job, mode, the
|
|
41
|
+
flow as a numbered list, content sources, out-of-scope. Ten lines, not a document.
|
|
42
|
+
Show it. Get the nod.
|
|
43
|
+
|
|
44
|
+
## 4. Align on flow with a diagram frame
|
|
45
|
+
|
|
46
|
+
When the flow has branches or more than four screens, draw it before wireframing:
|
|
47
|
+
one frame (`<scene>/flow.tsx`) of labeled boxes and arrows - plain divs and SVG lines,
|
|
48
|
+
grayscale, no dependency. Each box names a future frame. The human can look at one
|
|
49
|
+
picture and say "step 3 is wrong" before step 3 costs anything.
|
|
50
|
+
|
|
51
|
+
Then move to Wireframe. Do not brand, do not pick type, do not open the craft rules
|
|
52
|
+
yet - those phases come after the flow and words are agreed.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Color - roles, meaning, atmosphere
|
|
2
|
+
|
|
3
|
+
Color encodes hierarchy, action, and state before it decorates. Preserve confirmed
|
|
4
|
+
brand commitments; a new identity is a Brand decision, not a colorize pass.
|
|
5
|
+
|
|
6
|
+
## Build roles, not a bag of swatches
|
|
7
|
+
|
|
8
|
+
Every palette answers to this role list; a color without a role has no reason to exist:
|
|
9
|
+
|
|
10
|
+
- canvas + elevated surfaces (a SECOND neutral layer for sidebars/toolbars/panels,
|
|
11
|
+
slightly warmer or cooler than the content surface, gives product UI depth for free)
|
|
12
|
+
- primary + secondary text tiers
|
|
13
|
+
- action, focus, selection (usually one accent - rarity is what gives it force)
|
|
14
|
+
- borders and separators
|
|
15
|
+
- success / warning / error / info (semantic, stable meanings, never decorative)
|
|
16
|
+
- data categories or scales when the content needs them
|
|
17
|
+
|
|
18
|
+
## Strategy rules
|
|
19
|
+
|
|
20
|
+
- Let the strongest color OWN a deliberate region or role; scattering tiny accents
|
|
21
|
+
reads as indecision. Name the dosage before editing: restrained or immersive is a
|
|
22
|
+
choice, not a percentage rule.
|
|
23
|
+
- Never spend the primary action's color on decoration - it must stay the easiest
|
|
24
|
+
thing to find.
|
|
25
|
+
- On a colored surface, secondary text derives from that surface's hue or the
|
|
26
|
+
foreground - generic gray on color always reads broken.
|
|
27
|
+
- Tinted neutrals (warm or cool grays) add depth without loudness; pure gray is
|
|
28
|
+
valid only when the world calls for it.
|
|
29
|
+
- Prefer OKLCH for new palettes: lightness and chroma adjust predictably. When
|
|
30
|
+
building ramps, vary lightness and REDUCE chroma near white and black.
|
|
31
|
+
- Dark mode is COMPOSED, never mechanically inverted: design surface elevation and
|
|
32
|
+
contrast explicitly per theme.
|
|
33
|
+
- Prefer explicit colors over stacked translucent overlays when alpha would make
|
|
34
|
+
contrast context-dependent.
|
|
35
|
+
|
|
36
|
+
## Contrast (verify computed pairs, not intentions)
|
|
37
|
+
|
|
38
|
+
| Content | Minimum |
|
|
39
|
+
|---|---|
|
|
40
|
+
| body text | 4.5:1 |
|
|
41
|
+
| large text | 3:1 |
|
|
42
|
+
| meaningful controls, icons, focus indicators | 3:1 |
|
|
43
|
+
|
|
44
|
+
Disabled controls are exempt from contrast minimums (but should still read as
|
|
45
|
+
present). Focus indicators need contrast AND a clearly visible change of appearance.
|
|
46
|
+
Check interactive states, text over images, and BOTH themes.
|
|
47
|
+
Anything conveyed by color alone also needs text, shape, icon, or position.
|
|
48
|
+
|
|
49
|
+
## Verify
|
|
50
|
+
|
|
51
|
+
Every color has a stable role; attention lands on the intended action; the palette
|
|
52
|
+
holds across quiet, dense, error, and empty states; both themes are composed; the
|
|
53
|
+
result is recognizably THIS product, not a generic colorful treatment.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Concepts - deriving a distinctive direction for brand-new work
|
|
2
|
+
|
|
3
|
+
For a genuinely new surface or a new visual world (brand.md Path B routes here for
|
|
4
|
+
whole pages/sites). The enemy is the RUT: every product category has the page it
|
|
5
|
+
always ships, and an unguided pass lands in it. This discipline exists to keep
|
|
6
|
+
successive attempts from converging on the category default.
|
|
7
|
+
|
|
8
|
+
## 1. Ground it
|
|
9
|
+
|
|
10
|
+
Name in writing: the product's unique mechanism in one sentence; the audience's real
|
|
11
|
+
scene; the product's cultural home; what this first surface must prove. Then name
|
|
12
|
+
the RUT explicitly - the page this category always ships and its predictable
|
|
13
|
+
opposite - and keep both off the candidate list.
|
|
14
|
+
|
|
15
|
+
## 2. Derive candidates from the audience's world
|
|
16
|
+
|
|
17
|
+
List 5-7 concrete visual systems, artifacts, places, or rituals the audience knows
|
|
18
|
+
by heart, each with one line on why it resonates and how it can carry the product's
|
|
19
|
+
mechanism. The audience's world includes its SCREEN traditions, not just objects:
|
|
20
|
+
the notation, publications, identity programs, data graphics, and interfaces it
|
|
21
|
+
reads daily. Ask: what would this product look like as a physical object? What did
|
|
22
|
+
its world look like before the web?
|
|
23
|
+
|
|
24
|
+
Discipline checks:
|
|
25
|
+
|
|
26
|
+
- Near-duplicates count once.
|
|
27
|
+
- When more than three candidates share one material family, the derivation stopped
|
|
28
|
+
at the subject's most obvious artifact - dig until the list spans at least three
|
|
29
|
+
families.
|
|
30
|
+
- A brief that paints its own picture (a name, a metaphor) gets AT MOST one
|
|
31
|
+
candidate for its literal reading; derive the rest from elsewhere.
|
|
32
|
+
|
|
33
|
+
## 3. Commit and present
|
|
34
|
+
|
|
35
|
+
Turn the strongest 2-3 into complete directions: each joins a reusable visual world
|
|
36
|
+
to a concrete first-surface experience. Build each as ONE fully-committed frame -
|
|
37
|
+
same content, different world; a hedged direction cannot be judged. Present with:
|
|
38
|
+
its thesis, first viewport, signature interaction, and one honest risk each.
|
|
39
|
+
|
|
40
|
+
Alongside them (not among the derived candidates - the rut exclusion in step 1
|
|
41
|
+
applies to derivation, not to this), include the CATEGORY STANDARD as a quiet
|
|
42
|
+
standing option, played straight: familiar and effective is a legitimate destination,
|
|
43
|
+
and the human deciding that trade is the point. Present it honestly, never let it
|
|
44
|
+
soften the committed directions, and when the human picks it, execute it at full
|
|
45
|
+
craft without smuggled quirk.
|
|
46
|
+
|
|
47
|
+
## 4. Every candidate must already be viable
|
|
48
|
+
|
|
49
|
+
True claims only (prices, customers, capabilities come from supplied facts -
|
|
50
|
+
illustrative material is labeled synthetic); a real palette and component family;
|
|
51
|
+
workable at full-surface scale. A candidate that fails on truth is replaced before
|
|
52
|
+
presenting, never rescued by enthusiasm. Refusing a bold direction because its demo
|
|
53
|
+
data does not exist yet is timidity wearing honesty's clothes - author the
|
|
54
|
+
illustrative material and label it.
|
|
55
|
+
|
|
56
|
+
## The voice rule
|
|
57
|
+
|
|
58
|
+
Loud or restrained - never neutral. Restraint is a committed direction with a point
|
|
59
|
+
of view; neutrality is the absence of one, and it is what unguided generation
|
|
60
|
+
produces by default. If the chosen direction cannot be described in three specific
|
|
61
|
+
adjectives, it is neutral.
|
|
62
|
+
|
|
63
|
+
## Modes bind the winner
|
|
64
|
+
|
|
65
|
+
Persuade: the offer and action legible in the first viewport, however committed the
|
|
66
|
+
form. Operate: expression never obscures task, state, or familiar affordance.
|
|
67
|
+
Read: comprehension and wayfinding stay intact. Experience: the work leads, the
|
|
68
|
+
interface recedes.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Copy - interface language that works
|
|
2
|
+
|
|
3
|
+
Read the whole interaction path, never isolated strings. For each state, decide the
|
|
4
|
+
message hierarchy before writing: (1) the ONE fact the user needs now, (2) the action
|
|
5
|
+
available next, (3) context that changes the decision, (4) the tone this moment
|
|
6
|
+
earns. Say each idea once - a heading that explains the state makes the intro under
|
|
7
|
+
it redundant.
|
|
8
|
+
|
|
9
|
+
## By function
|
|
10
|
+
|
|
11
|
+
**Actions.** Consequential actions get a specific verb + object ("Publish post",
|
|
12
|
+
not "Submit"); labels describe what WILL HAPPEN, not the gesture. Navigation names
|
|
13
|
+
its DESTINATION ("Settings", not "View Settings"). Same noun and verb for the same
|
|
14
|
+
concept everywhere - interfaces never vary words for literary effect. Destructive
|
|
15
|
+
actions name the object and the consequence; prefer undo over confirmation when
|
|
16
|
+
recovery is safe; when confirming, the button repeats the action ("Delete board"),
|
|
17
|
+
never "Yes"/"OK".
|
|
18
|
+
|
|
19
|
+
**Forms.** Persistent labels - placeholders are examples, never labels. Format and
|
|
20
|
+
eligibility requirements BEFORE submission, next to the field. Validation says what
|
|
21
|
+
needs attention and how to fix it, without blaming. Required/optional treatment is
|
|
22
|
+
consistent across the product.
|
|
23
|
+
|
|
24
|
+
**Errors.** An actionable error answers: what failed; why, when known AND useful;
|
|
25
|
+
how to recover or what alternative remains. No internal codes as the headline. Never
|
|
26
|
+
promise a cause the system cannot know. Privacy, payment, deletion, and blocked work
|
|
27
|
+
get gravity - warmth is welcome, jokes are not.
|
|
28
|
+
|
|
29
|
+
**Loading / empty / success.** Loading names the real operation; never invent
|
|
30
|
+
progress. Empty states are five DIFFERENT states - first use, cleared, no results,
|
|
31
|
+
no permission, failed to load - each with its own explanation and next action.
|
|
32
|
+
Success confirms the outcome; mention the next consequence only when it changes what
|
|
33
|
+
the user should do; routine success stays brief.
|
|
34
|
+
|
|
35
|
+
**Help.** Helper text answers an implicit question, never restates the control.
|
|
36
|
+
Link text makes sense out of context. Icon-only controls carry accessible names.
|
|
37
|
+
|
|
38
|
+
## Cadence tells (generated-copy tics to sweep)
|
|
39
|
+
|
|
40
|
+
Em dashes sprinkled through body copy; manufactured-contrast aphorisms closing
|
|
41
|
+
sections ("It's not X. It's Y."); dismissing things as "theater"; generic SaaS
|
|
42
|
+
buzzwords ("supercharge", "seamless", "unlock"); the same label repeated in several
|
|
43
|
+
slots of one card. Plain sentences in the product's own vocabulary beat all of these.
|
|
44
|
+
|
|
45
|
+
## Voice and resilience
|
|
46
|
+
|
|
47
|
+
Voice stays constant; tone adapts to the moment's stakes. Plain language without
|
|
48
|
+
flattening terminology the audience genuinely knows. Complete translatable sentences,
|
|
49
|
+
never concatenated fragments. Allow for text expansion instead of pre-abbreviating.
|
|
50
|
+
Alt text conveys the image's information (empty alt for decoration).
|
|
51
|
+
|
|
52
|
+
## Verify
|
|
53
|
+
|
|
54
|
+
Read the flow aloud in context: comprehensible without insider knowledge; actionable
|
|
55
|
+
at every error and empty state; terminology consistent; survives long names and 200%
|
|
56
|
+
zoom; tone proportional to consequence. The final copy is as short as it can be
|
|
57
|
+
without losing meaning or recovery.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Critique - the structured review pass
|
|
2
|
+
|
|
3
|
+
For a real review (the human asked "review this", or you are gating your own work
|
|
4
|
+
before a milestone). Think like a design director: the deliverable is a written
|
|
5
|
+
critique, not a pile of nitpicks.
|
|
6
|
+
|
|
7
|
+
## Start with the specificity verdict
|
|
8
|
+
|
|
9
|
+
Before anything else, answer: **could a neighboring product use this design
|
|
10
|
+
unchanged?** Cover coherence, structural sameness, category-interchangeable choices,
|
|
11
|
+
and missed opportunities for product character. This is the single most predictive
|
|
12
|
+
question for AI-generated design - answer it before any checklist can anchor you.
|
|
13
|
+
|
|
14
|
+
## Score the ten heuristics (0-4 each)
|
|
15
|
+
|
|
16
|
+
| # | Heuristic | Asks |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| 1 | Visibility of system status | does the UI always show what is happening? |
|
|
19
|
+
| 2 | Match to the real world | user's language and concepts, not the system's? |
|
|
20
|
+
| 3 | User control and freedom | undo, escape hatches, no traps? |
|
|
21
|
+
| 4 | Consistency and standards | same thing looks and acts the same everywhere? |
|
|
22
|
+
| 5 | Error prevention | dangerous actions guarded before, not apologized after? |
|
|
23
|
+
| 6 | Recognition over recall | options visible, nothing memorized between screens? |
|
|
24
|
+
| 7 | Flexibility and efficiency | shortcuts for the fluent, defaults for the new? |
|
|
25
|
+
| 8 | Aesthetic and minimalist | every element earns its place? |
|
|
26
|
+
| 9 | Error recovery | errors named plainly with a way out? |
|
|
27
|
+
| 10 | Help and documentation | help where it is needed, when it is needed? |
|
|
28
|
+
|
|
29
|
+
Be honest: 4 means genuinely excellent and should be rare - an all-4 row means the
|
|
30
|
+
review did not look hard enough, not that the interface is perfect.
|
|
31
|
+
Mark a heuristic n/a with a one-line reason when it truly cannot apply (7 and 10
|
|
32
|
+
often on marketing surfaces) and renormalize the total to the applicable maximum.
|
|
33
|
+
|
|
34
|
+
## Two more lenses
|
|
35
|
+
|
|
36
|
+
- **Cognitive load**: flag decision points where options compete undifferentiated
|
|
37
|
+
(no default, no grouping, no visible consequence - a labeled menu of twelve is
|
|
38
|
+
fine; four equal-weight buttons with vague labels are not), and any screen where
|
|
39
|
+
the user must remember something from a previous screen.
|
|
40
|
+
- **Emotional journey**: peak-end rule - what is the peak moment and what is the
|
|
41
|
+
exit moment? Reassurance present at high-stakes points (payment, deletion, send)?
|
|
42
|
+
|
|
43
|
+
## Report format
|
|
44
|
+
|
|
45
|
+
1. Specificity verdict (one paragraph, first).
|
|
46
|
+
2. Heuristic table with per-row key issue.
|
|
47
|
+
3. **What works** - 2-3 things, specific about WHY they work.
|
|
48
|
+
4. **Priority issues** - 3-5, ordered, each tagged P0 (blocks/misleads) to P3 (nit),
|
|
49
|
+
with: what, why it matters, and a concrete fix.
|
|
50
|
+
5. One provocative question the team should sit with.
|
|
51
|
+
|
|
52
|
+
Never bury the diagnosis: if the concept itself is wrong, the report says so at the
|
|
53
|
+
top and recommends re-entering Wireframe - a P0 concept issue outranks every P2 list.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Delight - personality that earns its place
|
|
2
|
+
|
|
3
|
+
Delight is product character revealed at a moment that deserves it - never a layer
|
|
4
|
+
of generic whimsy. One thesis per surface: state in a sentence what the user should
|
|
5
|
+
feel and why that feeling belongs to THIS product. Then build the smallest system
|
|
6
|
+
that delivers it.
|
|
7
|
+
|
|
8
|
+
## Where delight is earned
|
|
9
|
+
|
|
10
|
+
- **Effort worth acknowledging**: completion of something hard. Match the response
|
|
11
|
+
to the consequence - milestones may expand; routine saves simply feel certain.
|
|
12
|
+
- **Waiting that can inform**: truthful progress with product-specific texture.
|
|
13
|
+
Never fake work or delay completion to stage a flourish.
|
|
14
|
+
- **First use and empty states**: orient first, charm second. The next action must
|
|
15
|
+
be clear before personality is added.
|
|
16
|
+
- **Errors and recovery**: warmth reduces stress; jokes must never trivialize loss,
|
|
17
|
+
money, privacy, or blocked work.
|
|
18
|
+
- **Discovery**: reward curiosity with real utility, never hide required
|
|
19
|
+
functionality behind an easter egg.
|
|
20
|
+
- **Repetition test**: will the hundredth encounter still satisfy? Charm that decays
|
|
21
|
+
into friction was mis-scoped.
|
|
22
|
+
|
|
23
|
+
## The specificity bar
|
|
24
|
+
|
|
25
|
+
The moment must be specific enough that a neighboring product could not use it
|
|
26
|
+
unchanged. Derive the treatment from the product's own mechanism and world - a
|
|
27
|
+
confetti burst is a stock part; the way THIS product acknowledges completion is a
|
|
28
|
+
design decision.
|
|
29
|
+
|
|
30
|
+
## Protections (absolute)
|
|
31
|
+
|
|
32
|
+
Delight never: delays or blocks the primary task; overrides platform conventions or
|
|
33
|
+
accessibility; plays sound without consent; becomes mandatory or unskippable; adds a
|
|
34
|
+
dependency disproportionate to the moment. The interface must remain fast and
|
|
35
|
+
obvious with the flourish removed.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Layout - reading order, grouping, rhythm
|
|
2
|
+
|
|
3
|
+
Layout turns product priority into reading order. Diagnose the structural problem
|
|
4
|
+
before moving boxes.
|
|
5
|
+
|
|
6
|
+
## Diagnose first (against the rendered frame)
|
|
7
|
+
|
|
8
|
+
- **The squint test.** Blur your mental image of the frame: can you still identify
|
|
9
|
+
the primary element, the secondary element, and the major groups in order? If not,
|
|
10
|
+
the hierarchy fails regardless of how the details look.
|
|
11
|
+
- **Grouping.** Are related items CLOSE and distinct groups SEPARATED - or are
|
|
12
|
+
containers and borders compensating for weak proximity? Proximity is the primary
|
|
13
|
+
grouping tool; boxes are the fallback.
|
|
14
|
+
- **Rhythm.** Do tight and generous intervals alternate deliberately, or is one
|
|
15
|
+
spacing value repeated until everything has equal weight? Monotone spacing is the
|
|
16
|
+
most common layout defect in generated UI.
|
|
17
|
+
- **Structure.** Does the topology match the content, or is it a framework default?
|
|
18
|
+
Repeated same-size cards imply the items are equivalent - are they?
|
|
19
|
+
- **Density.** Information per region should match use frequency and decision
|
|
20
|
+
complexity, not a universal airiness.
|
|
21
|
+
- **Extremes.** Long content, empty states, overlays, sticky elements - do they
|
|
22
|
+
break the structure?
|
|
23
|
+
|
|
24
|
+
## Set a spatial thesis before editing
|
|
25
|
+
|
|
26
|
+
Name in one or two sentences: the primary reading/task path; what belongs together
|
|
27
|
+
and what must separate; which element leads; the intended density. Then pick the
|
|
28
|
+
simplest structural model that expresses those relationships.
|
|
29
|
+
|
|
30
|
+
## Apply
|
|
31
|
+
|
|
32
|
+
- Group by meaning with proximity BEFORE adding containers or decoration.
|
|
33
|
+
- Create rhythm through deliberate contrast: tight inside groups, generous between
|
|
34
|
+
them, more space above a heading than below it.
|
|
35
|
+
- Use a documented spacing scale; a 4px base gives useful middle steps an 8-only
|
|
36
|
+
scale misses. One-off gap values are how rhythm dies.
|
|
37
|
+
- Hierarchy follows product priority, not framework defaults - the most important
|
|
38
|
+
thing is the most visually weighted thing.
|
|
39
|
+
- `gap` on the parent beats per-child margins for sibling rhythm.
|
|
40
|
+
- Responsive behavior is STRUCTURAL: reorder, collapse, reveal based on what remains
|
|
41
|
+
important at each width - not just shrinking everything. Feature amputation is not
|
|
42
|
+
responsive design: every capability stays reachable at every supported width.
|
|
43
|
+
- Depth (shadow/elevation) only where it clarifies state or hierarchy.
|
|
44
|
+
- Repetition supports recognition; break it only when content or priority changes.
|
|
45
|
+
Variation for its own sake reads as noise.
|
|
46
|
+
|
|
47
|
+
## Verify
|
|
48
|
+
|
|
49
|
+
Squint test passes; the task path is clear at every supported width; related content
|
|
50
|
+
groups without boxes; tight/generous rhythm is visible; long text and empty states
|
|
51
|
+
hold; DOM order agrees with visual order.
|