@tidyfactor/design 1.5.0
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/.tidyfactor +52 -0
- package/AGENTS.md +75 -0
- package/CHANGELOG.md +210 -0
- package/LICENSE +17 -0
- package/README.ar.md +398 -0
- package/README.de.md +44 -0
- package/README.es.md +44 -0
- package/README.fa.md +44 -0
- package/README.fr.md +44 -0
- package/README.md +418 -0
- package/README.pt.md +44 -0
- package/README.zh.md +44 -0
- package/SKILL-REGISTRY.md +69 -0
- package/SKILL.md +46 -0
- package/VISION.md +43 -0
- package/assets/blog.png +0 -0
- package/assets/content_layout.png +0 -0
- package/assets/content_output.png +0 -0
- package/assets/dark.png +0 -0
- package/assets/dashboard_layout.png +0 -0
- package/assets/dashboard_output.png +0 -0
- package/assets/ecommerce_layout.png +0 -0
- package/assets/ecommerce_output.png +0 -0
- package/assets/github-social-preview-2.png +0 -0
- package/assets/github-social-preview.png +0 -0
- package/assets/hero-banner.png +0 -0
- package/assets/light.png +0 -0
- package/assets/media_layout.png +0 -0
- package/assets/media_output.png +0 -0
- package/assets/og-default.png +0 -0
- package/assets/video.png +0 -0
- package/bin/add-skill.js +31 -0
- package/bin/create-kit.js +372 -0
- package/bin/remove-skill.js +137 -0
- package/brand.json +279 -0
- package/memory/01-design-schools.md +85 -0
- package/memory/02-design-tokens.md +41 -0
- package/memory/03-narrative-conversion.md +47 -0
- package/memory/04-motion-principles.md +44 -0
- package/memory/05-component-anatomy.md +34 -0
- package/memory/06-quality-bar.md +83 -0
- package/memory/07-consistency-contract.md +33 -0
- package/memory/08-arabic-bilingual.md +54 -0
- package/memory/09-prototype-flow.md +36 -0
- package/memory/10-python-tooling.md +64 -0
- package/memory/11-brand-json-v2.md +86 -0
- package/memory/12-typography-matrix.md +31 -0
- package/memory/13-layout-archetypes.md +30 -0
- package/memory/14-nav-footer-catalog.md +26 -0
- package/memory/15-performance-budget.md +18 -0
- package/memory/16-design-movements-guide.md +1084 -0
- package/memory/17-storytelling-industries-ux.md +143 -0
- package/memory/18-design-decision-engine.md +81 -0
- package/package.json +64 -0
- package/references/commands/_template.md +27 -0
- package/references/commands/assets.md +35 -0
- package/references/commands/audit.md +15 -0
- package/references/commands/brand.md +85 -0
- package/references/commands/brief.md +107 -0
- package/references/commands/clone.md +26 -0
- package/references/commands/components.md +46 -0
- package/references/commands/dashboard.md +45 -0
- package/references/commands/deploy.md +45 -0
- package/references/commands/flow.md +44 -0
- package/references/commands/handoff.md +53 -0
- package/references/commands/i18n.md +64 -0
- package/references/commands/init.md +30 -0
- package/references/commands/layout.md +81 -0
- package/references/commands/motion.md +62 -0
- package/references/commands/nav-footer.md +54 -0
- package/references/commands/page.md +45 -0
- package/references/commands/palette.md +35 -0
- package/references/commands/perf.md +57 -0
- package/references/commands/retrofit.md +15 -0
- package/references/commands/school.md +41 -0
- package/references/commands/states.md +48 -0
- package/references/commands/study.md +98 -0
- package/references/commands/tokens.md +45 -0
- package/references/commands/typography.md +87 -0
- package/references/foundations/daisyui.md +44 -0
- package/references/foundations/hybrid.md +32 -0
- package/references/foundations/native.md +31 -0
- package/references/foundations/tailwind-utility.md +43 -0
- package/references/memory/01-design-schools.md +85 -0
- package/references/memory/02-design-tokens.md +41 -0
- package/references/memory/03-narrative-conversion.md +47 -0
- package/references/memory/04-motion-principles.md +44 -0
- package/references/memory/05-component-anatomy.md +34 -0
- package/references/memory/06-quality-bar.md +83 -0
- package/references/memory/07-consistency-contract.md +33 -0
- package/references/memory/08-arabic-bilingual.md +54 -0
- package/references/memory/09-prototype-flow.md +36 -0
- package/references/memory/10-python-tooling.md +64 -0
- package/references/memory/11-brand-json-v2.md +86 -0
- package/references/memory/12-typography-matrix.md +31 -0
- package/references/memory/13-layout-archetypes.md +30 -0
- package/references/memory/14-nav-footer-catalog.md +26 -0
- package/references/memory/15-performance-budget.md +18 -0
- package/references/memory/16-design-movements-guide.md +1084 -0
- package/references/memory/17-storytelling-industries-ux.md +143 -0
- package/references/memory/18-design-decision-engine.md +81 -0
- package/references/memory/architecture.md +39 -0
- package/references/memory/decision-points.md +50 -0
- package/references/memory/foundations.md +15 -0
- package/references/memory/quality-bar.md +20 -0
- package/references/tidyfactor-vision.md +66 -0
- package/references/workflow.md +49 -0
- package/references/workflows/audit-prototype.md +26 -0
- package/references/workflows/brief.md +30 -0
- package/references/workflows/clone-prototype.md +27 -0
- package/references/workflows/init-prototype.md +28 -0
- package/references/workflows/retrofit-prototype.md +25 -0
- package/scripts/__pycache__/_utils.cpython-312.pyc +0 -0
- package/scripts/_utils.py +60 -0
- package/scripts/build.py +194 -0
- package/scripts/check_alpha.py +52 -0
- package/scripts/extract_palette.py +139 -0
- package/scripts/generate_transitions.py +105 -0
- package/scripts/inspect_images.py +48 -0
- package/scripts/minify_assets.py +140 -0
- package/scripts/optimize_assets.py +91 -0
- package/scripts/optimize_images.py +176 -0
- package/scripts/prepare_images.py +67 -0
- package/scripts/remove_backgrounds.py +61 -0
- package/scripts/test_build.py +228 -0
- package/templates/design-system/base.css +75 -0
- package/templates/design-system/components.css +229 -0
- package/templates/design-system/interactions.js +31 -0
- package/templates/design-system/motion.js +42 -0
- package/templates/design-system/tokens.css +81 -0
- package/templates/design-system/utilities.css +47 -0
- package/templates/index.html +84 -0
- package/templates/proto-nav.js +56 -0
- package/tools/build-skill.js +126 -0
- package/tools/validate-skill.js +144 -0
- package/tools/validate_skill.py +121 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Command: `school` — Conscious Design Direction
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Force a named, justified aesthetic choice before any token or component
|
|
5
|
+
exists — the single biggest lever against a prototype defaulting to
|
|
6
|
+
generic AI-generated design patterns (see `memory/01-design-schools.md` for
|
|
7
|
+
the calibration list of overused defaults to actively avoid unless the brief
|
|
8
|
+
asks for them specifically).
|
|
9
|
+
|
|
10
|
+
## When to run it
|
|
11
|
+
- Always, as part of `init`, before `tokens`.
|
|
12
|
+
- The prototype "feels generic" or "could be any brand" — re-run to
|
|
13
|
+
re-anchor the direction.
|
|
14
|
+
- User phrasing: "make this feel more [X]", "pick a design direction",
|
|
15
|
+
`school`.
|
|
16
|
+
|
|
17
|
+
## What it does
|
|
18
|
+
1. Read the brief's subject matter, audience, and any stated visual
|
|
19
|
+
references. If the brief pins down a direction, follow it exactly.
|
|
20
|
+
2. Where the brief leaves it open, choose deliberately from `memory/16-design-movements-guide.md` (all 20 Visual Aesthetics & Design Movements: Swiss, Flat, Material, Minimalism, Brutalism/Neo-Brutalism, Bauhaus, Skeuomorphism, Glassmorphism, Maximalism, Industrial, Bento Box, Aurora Mesh, Neumorphism, Corporate Memphis, Cyberpunk, Claymorphism, Isometric, Kinetic Typography, Organic/Amorphous, Frutiger Aero/Y2K) and `memory/17-storytelling-industries-ux.md` (4 Storytelling Archetypes, 8 Industry Registers, 8 UX Philosophies) — never by defaulting to whichever is most common in training data.
|
|
21
|
+
3. **Actively avoid** the three AI-design tells unless the brief calls for
|
|
22
|
+
one specifically: warm-cream + terracotta serif, near-black + single
|
|
23
|
+
acid accent, broadsheet-hairline-columns-everywhere applied
|
|
24
|
+
indiscriminately regardless of subject.
|
|
25
|
+
4. Document the choice in one short paragraph: which school, why it fits
|
|
26
|
+
this subject/audience, and the one signature element the direction will
|
|
27
|
+
be remembered by.
|
|
28
|
+
5. This decision governs every later token value and component style —
|
|
29
|
+
`tokens`/`components` implement it, they don't re-decide it.
|
|
30
|
+
|
|
31
|
+
## Output convention
|
|
32
|
+
```
|
|
33
|
+
design-system/brand.json
|
|
34
|
+
"school": { "direction": "...", "rationale": "...", "signatureElement": "..." }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Checklist
|
|
38
|
+
- [ ] Direction is a real choice made for this subject, not a default
|
|
39
|
+
- [ ] Signature element identified — the one thing this prototype will be
|
|
40
|
+
remembered by
|
|
41
|
+
- [ ] Decision recorded in `brand.json`, not left implicit in code
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Command: `states` — Interactive States, Not a Static Mockup
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
This is what separates an "interactive prototype" from a picture of a
|
|
5
|
+
website — the difference the whole positioning of this skill depends on.
|
|
6
|
+
Kept as its own command because states are easy to skip under time
|
|
7
|
+
pressure and easy to audit for once isolated.
|
|
8
|
+
|
|
9
|
+
## When to run it
|
|
10
|
+
- After a component/page/screen has its default look — always follow with
|
|
11
|
+
a states pass before calling it done.
|
|
12
|
+
- User phrasing: "add hover states", "what does this look like empty/
|
|
13
|
+
loading", `states`.
|
|
14
|
+
|
|
15
|
+
## What it does
|
|
16
|
+
1. For every interactive component in scope, confirm the full matrix
|
|
17
|
+
applies where relevant: default, hover, focus-visible, active/pressed,
|
|
18
|
+
disabled, loading, empty, error, success.
|
|
19
|
+
2. Implement via `interactions.js` (shared) for stateful JS behavior
|
|
20
|
+
(dropdown open/close, tab switching, modal show/hide, toast
|
|
21
|
+
dismiss) and CSS pseudo-classes for the rest — never a per-page
|
|
22
|
+
`<script>` for one page's interactive widget.
|
|
23
|
+
3. **Empty states are a design decision, not a placeholder**: what caused
|
|
24
|
+
it, what the user should do next — same principle as `frontend-design`'s
|
|
25
|
+
"an empty screen is an invitation to act", applied consistently across
|
|
26
|
+
the whole prototype rather than per page.
|
|
27
|
+
4. **Loading states**: skeleton shapes matching the eventual content's
|
|
28
|
+
layout, not a generic spinner-only blank — this is what makes a
|
|
29
|
+
dashboard prototype credible.
|
|
30
|
+
5. Keyboard/focus-visible states are not optional — every interactive
|
|
31
|
+
element needs a visible focus ring using a token color, not the browser
|
|
32
|
+
default.
|
|
33
|
+
|
|
34
|
+
## Output convention
|
|
35
|
+
```
|
|
36
|
+
design-system/
|
|
37
|
+
components.css ← :hover, :focus-visible, [disabled], .is-loading, .is-empty, .is-error
|
|
38
|
+
interactions.js ← shared stateful behavior (toggle/modal/dropdown/tab)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Checklist
|
|
42
|
+
- [ ] Hover, focus-visible, active, and disabled states present on every
|
|
43
|
+
interactive component
|
|
44
|
+
- [ ] Empty and loading states designed deliberately, not left as
|
|
45
|
+
placeholders
|
|
46
|
+
- [ ] Stateful behavior lives in shared `interactions.js`, never a
|
|
47
|
+
per-page script
|
|
48
|
+
- [ ] Focus ring visible and token-colored on every focusable element
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Command: `study` — Design DNA Extraction & Competitive Analysis
|
|
2
|
+
|
|
3
|
+
Runtime entry point for extracting design DNA from a live URL, screenshot, or reference site. Part of the **Discovery** lifecycle phase.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
- Before starting any new design project (run `study` → then `brief` → then `init`)
|
|
8
|
+
- When reverse-engineering a competitor's design language
|
|
9
|
+
- When a client says "make it feel like [reference]"
|
|
10
|
+
|
|
11
|
+
## Dispatch Steps
|
|
12
|
+
|
|
13
|
+
1. Load `memory/06-quality-bar.md` — anti-slop awareness (so the study doesn't praise AI patterns).
|
|
14
|
+
2. Load `memory/01-design-schools.md` — classify the reference into a design movement.
|
|
15
|
+
3. Execute the DNA extraction protocol below.
|
|
16
|
+
4. Output a diagnosis report — user decides next step.
|
|
17
|
+
|
|
18
|
+
## DNA Extraction Protocol
|
|
19
|
+
|
|
20
|
+
### Input
|
|
21
|
+
One of:
|
|
22
|
+
- **Live URL** → browse the page, capture computed styles, screenshot sections
|
|
23
|
+
- **Screenshot / image** → visual analysis only (less precise on exact hex values)
|
|
24
|
+
- **Multiple URLs** → cross-reference to find the shared design language
|
|
25
|
+
|
|
26
|
+
### Extraction Axes (6 Dimensions)
|
|
27
|
+
|
|
28
|
+
| Axis | What to extract | How to extract |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| **Macrostructure** | Section rhythm, hero type, scroll behavior | Map each viewport-height section, note sticky/parallax/pinned |
|
|
31
|
+
| **Color Anchor** | Primary, surface, text, accent colors | Computed styles from `getComputedStyle()` on buttons, headers, body, backgrounds — NOT visual guesses from screenshots |
|
|
32
|
+
| **Type Pairing** | Heading family, body family, weight usage | `<link>` and `@font-face` declarations, NOT visual matching |
|
|
33
|
+
| **Spacing System** | Base unit, scale pattern, section gaps | Measure actual padding/margin values on key containers |
|
|
34
|
+
| **Motion Register** | Entrance style, scroll interaction, transition timing | Observe scroll behavior, hover states, page transitions |
|
|
35
|
+
| **Component DNA** | Card style, button shape, nav pattern, footer pattern | Classify against the catalogs in `memory/14-nav-footer-catalog.md` |
|
|
36
|
+
|
|
37
|
+
### Critical Rules
|
|
38
|
+
- **Sample computed styles** (actual rendered hex values from buttons, headers, body text) — never guess from a screenshot's visual impression.
|
|
39
|
+
- **Extract font family names** from `<link>`/`@font-face` declarations — never from visual matching.
|
|
40
|
+
- **Do NOT extract layout structure** — the reference site's section order is not a design token; the engine's layout archetypes (`memory/13-layout-archetypes.md`) own that decision.
|
|
41
|
+
- **Do NOT extract literal copy text** — voice *rules* transfer (tone, banned words), literal sentences don't.
|
|
42
|
+
|
|
43
|
+
## Output: Design DNA Report
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
## Design DNA Report: [Reference Name]
|
|
47
|
+
|
|
48
|
+
### Classification
|
|
49
|
+
- **Design School**: [from 01-design-schools.md]
|
|
50
|
+
- **Genre**: editorial / modern-minimal / atmospheric / playful / luxury / industrial
|
|
51
|
+
- **Mood**: [2-3 adjective tone words]
|
|
52
|
+
|
|
53
|
+
### Color Anchor
|
|
54
|
+
| Token | Hex | Source |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| primary | #XXXXXX | computed: button background |
|
|
57
|
+
| surface | #XXXXXX | computed: card background |
|
|
58
|
+
| text | #XXXXXX | computed: body color |
|
|
59
|
+
| accent | #XXXXXX | computed: link/highlight color |
|
|
60
|
+
|
|
61
|
+
### Type Pairing
|
|
62
|
+
- Heading: [Family] (weight [N])
|
|
63
|
+
- Body: [Family] (weight [N])
|
|
64
|
+
- Source: [<link> tag / @font-face / Google Fonts import]
|
|
65
|
+
|
|
66
|
+
### Spacing System
|
|
67
|
+
- Base unit: [N]px
|
|
68
|
+
- Section gaps: [pattern]
|
|
69
|
+
|
|
70
|
+
### Motion Register
|
|
71
|
+
- Entrance: [fade-up / clip-reveal / slide / none]
|
|
72
|
+
- Scroll: [sticky / parallax / scroll-snap / standard]
|
|
73
|
+
- Hover: [lift / scale / glow / none]
|
|
74
|
+
|
|
75
|
+
### Component DNA
|
|
76
|
+
- Nav: [N1–N9 from catalog]
|
|
77
|
+
- Footer: [Ft1–Ft8 from catalog]
|
|
78
|
+
- Cards: [elevation / bordered / flat / glassmorphic]
|
|
79
|
+
- Buttons: [rounded / pill / square / ghost]
|
|
80
|
+
|
|
81
|
+
### Anti-Pattern Tells Detected
|
|
82
|
+
- [List any of the 16 AI tells found in the reference]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## User Decision After Report
|
|
86
|
+
|
|
87
|
+
The user can:
|
|
88
|
+
1. **Lock** the DNA into a `design.md` project brief → flow into `init`
|
|
89
|
+
2. **Cherry-pick** specific axes (e.g., "use their color anchor but our own typography")
|
|
90
|
+
3. **Stop** at diagnosis — study is complete
|
|
91
|
+
|
|
92
|
+
## Checklist
|
|
93
|
+
|
|
94
|
+
- [ ] Color values extracted from computed styles, not visual guesses
|
|
95
|
+
- [ ] Font families extracted from `<link>`/`@font-face`, not visual matching
|
|
96
|
+
- [ ] Layout structure NOT carried over — only tokens
|
|
97
|
+
- [ ] Report classifies against design schools and anti-pattern catalogs
|
|
98
|
+
- [ ] User presented with 3 clear next-step options
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Command: `tokens` — Design Tokens & `brand.json`
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Establish the single source of truth every other command reads from. This
|
|
5
|
+
is the one command every later command depends on — re-running it (a
|
|
6
|
+
rebrand, a palette fix) is how a change propagates to every page at once.
|
|
7
|
+
|
|
8
|
+
## When to run it
|
|
9
|
+
- Start of `init` — always first, right after `school`.
|
|
10
|
+
- The user says "update the brand colors", "adjust the type scale",
|
|
11
|
+
"we rebranded", `tokens`.
|
|
12
|
+
|
|
13
|
+
## What it does
|
|
14
|
+
1. Derive token categories from the `school` decision and brief:
|
|
15
|
+
- `colors` — primary/secondary/accent + light/dark surface scales
|
|
16
|
+
- `typography` — display/body/mono families, a type scale (not
|
|
17
|
+
arbitrary per-heading sizes), weights
|
|
18
|
+
- `spacing` — a consistent scale (e.g. 4px base), not ad hoc values
|
|
19
|
+
- `radius`, `shadow` — a small fixed set, not one-off values per
|
|
20
|
+
component
|
|
21
|
+
- `motion` — duration/easing tokens (feeds `motion` command)
|
|
22
|
+
2. Write `design-system/tokens.css` as `:root` custom properties (Native/
|
|
23
|
+
Hybrid), or the equivalent theme-config object (Tailwind), or the
|
|
24
|
+
`[data-theme]` block (daisyUI) — per `references/foundations/<choice>.md`.
|
|
25
|
+
3. Write/update `design-system/brand.json`: `meta.*`, `colors.*`,
|
|
26
|
+
`typography.*`, `spacing.*`, `voice.*` (copy tone/register), `cssFoundation`,
|
|
27
|
+
`localization.*` (default locale, RTL locales — see `i18n`).
|
|
28
|
+
4. **If tokens.css already exists and pages already reference it**: this is
|
|
29
|
+
a propagating change — flag every existing page for re-verification
|
|
30
|
+
after the update, don't silently assume they still look correct.
|
|
31
|
+
|
|
32
|
+
## Output convention
|
|
33
|
+
```
|
|
34
|
+
design-system/
|
|
35
|
+
tokens.css ← :root custom properties (or foundation-equivalent)
|
|
36
|
+
brand.json ← structured source; tokens.css is generated to match it
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Checklist
|
|
40
|
+
- [ ] Every token category present: colors, typography, spacing, radius,
|
|
41
|
+
shadow, motion
|
|
42
|
+
- [ ] `cssFoundation` recorded in `brand.json` and matches the project's
|
|
43
|
+
actual `<head>` includes
|
|
44
|
+
- [ ] If tokens changed on an existing project, affected pages flagged for
|
|
45
|
+
re-verification
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Command: `typography` — Mood-Routed Typography Pairing
|
|
2
|
+
|
|
3
|
+
Runtime entry point for selecting and configuring typography pairings based on project mood, layout archetype, and language requirements. Part of the **Foundation** lifecycle phase.
|
|
4
|
+
|
|
5
|
+
## When to use
|
|
6
|
+
|
|
7
|
+
- During `init` or `brand` when choosing fonts
|
|
8
|
+
- When the default pair (El Messiri + Tajawal) doesn't match the project mood
|
|
9
|
+
- When switching between layout archetypes that call for different type registers
|
|
10
|
+
- When adding a new locale or adjusting Arabic typography weight
|
|
11
|
+
|
|
12
|
+
## Dispatch Steps
|
|
13
|
+
|
|
14
|
+
1. Load `memory/12-typography-matrix.md` — the mood → pairing matrix.
|
|
15
|
+
2. Load `memory/08-arabic-bilingual.md` — Arabic/RTL base rules.
|
|
16
|
+
3. Identify the project mood from `brief` output or user description.
|
|
17
|
+
4. Route to the matching pairing row.
|
|
18
|
+
5. Update `brand.json` `typography.families` and `googleFontsUrl`.
|
|
19
|
+
|
|
20
|
+
## The Mood → Typography Matrix
|
|
21
|
+
|
|
22
|
+
| Mood | Arabic Heading | Arabic Body | Latin Accent | Best Layouts | Avoid For |
|
|
23
|
+
|---|---|---|---|---|---|
|
|
24
|
+
| **Default luxury** (safe, warm) | El Messiri | Tajawal | Cormorant Garamond | any | — |
|
|
25
|
+
| **Editorial / literary** | Markazi Text | IBM Plex Sans Arabic | Fraunces | `story` (editorial) | `app` (too soft for UI chrome) |
|
|
26
|
+
| **Art-Deco / high fashion** | Jomhuria *(display ≥48px only)* | Cairo | Bodoni Moda | `film` (fullbleed) | `creator` (too loud for quiet page) |
|
|
27
|
+
| **Modern minimal / tech** | Cairo | Cairo (weight-differentiated) | Marcellus | `app` (interface), `creator` (minimal) | `space` (reads cold for real estate) |
|
|
28
|
+
| **Warm hospitality / travel** | El Messiri | Almarai | Prata | `space` (spatial) | — |
|
|
29
|
+
| **E-Commerce & conversion** | El Messiri | Tajawal | Cormorant Garamond | `product`, `store` | — |
|
|
30
|
+
| **Automotive / performance** | El Messiri + Oswald (numerals) | Tajawal | Oswald | `film`, `story` (auto use case) | non-automotive builds |
|
|
31
|
+
|
|
32
|
+
## Font Rules
|
|
33
|
+
|
|
34
|
+
### Hard constraints (from `memory/06-quality-bar.md`)
|
|
35
|
+
- **Never Amiri** for headings above ~24px — too calligraphic for display text
|
|
36
|
+
- **Never manuscript/Naskh** faces above ~24px, regardless of which pair is chosen
|
|
37
|
+
- **Display-only faces** (e.g., Jomhuria) must NOT be used for body copy or long captions
|
|
38
|
+
- All fonts must be **Google Fonts** (CDN-only, no self-hosting, no build step)
|
|
39
|
+
|
|
40
|
+
### Pairing principles
|
|
41
|
+
- **Serif-with-serif**: Arabic serif heading → Latin serif accent (Markazi Text → Fraunces)
|
|
42
|
+
- **Geometric-with-geometric**: Arabic geometric heading → Latin geometric accent (Cairo → Marcellus)
|
|
43
|
+
- **Never mismatched by default**: Arabic serif heading + Latin sans accent is wrong unless it's a deliberate `brand.json` override (stated in report, not silent)
|
|
44
|
+
|
|
45
|
+
### Weight discipline
|
|
46
|
+
- ≤ 3 families, ≤ 4 weights total across the entire page (performance budget from `memory/15-performance-budget.md`)
|
|
47
|
+
- Use weight differentiation within a single family (e.g., Cairo 400 body / 700 heading) before adding a second family
|
|
48
|
+
|
|
49
|
+
## Accent Faces
|
|
50
|
+
|
|
51
|
+
- **`display`** token in `brand.json` — optional Latin accent face for large hero text
|
|
52
|
+
- Falls back to `Cormorant Garamond` when `typography.families.display` is absent
|
|
53
|
+
- **Oswald for numerals** — condensed Latin, used ONLY for spec numbers (horsepower, dimensions, pricing) inside automotive/performance builds, layered alongside the primary Arabic pair, never replacing it
|
|
54
|
+
|
|
55
|
+
## Google Fonts `<link>` Reference
|
|
56
|
+
|
|
57
|
+
Load only the families actually in use — never load every family in this file on every build:
|
|
58
|
+
|
|
59
|
+
```html
|
|
60
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
61
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
62
|
+
<link href="https://fonts.googleapis.com/css2?family=[FAMILIES]&display=swap" rel="stylesheet">
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Output Convention
|
|
66
|
+
|
|
67
|
+
After selecting a pairing, update `brand.json`:
|
|
68
|
+
```json
|
|
69
|
+
"typography": {
|
|
70
|
+
"families": {
|
|
71
|
+
"heading": { "primary": "[Selected]", "fallback": "[Stack]" },
|
|
72
|
+
"body": { "primary": "[Selected]", "fallback": "[Stack]" },
|
|
73
|
+
"display": { "primary": "[Selected]", "fallback": "[Stack]" },
|
|
74
|
+
"arabicHeading": "[Selected]",
|
|
75
|
+
"arabicBody": "[Selected]"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Checklist
|
|
81
|
+
|
|
82
|
+
- [ ] Pairing matches the mood table row, or deviation is a deliberate `brand.json` override (stated explicitly)
|
|
83
|
+
- [ ] No manuscript/calligraphic face above ~24px
|
|
84
|
+
- [ ] Display-only faces not used for body copy
|
|
85
|
+
- [ ] `<link>` loads ONLY families actually referenced in CSS
|
|
86
|
+
- [ ] ≤ 3 families, ≤ 4 weights total (performance budget)
|
|
87
|
+
- [ ] Latin accent pairs intentionally with Arabic heading (serif+serif or geometric+geometric)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Foundation: daisyUI (on Tailwind CDN)
|
|
2
|
+
|
|
3
|
+
## When this is the right choice
|
|
4
|
+
- Dashboards, SaaS app screens, admin panels — anything needing a large,
|
|
5
|
+
complete, accessible component set fast (tables, modals, drawers,
|
|
6
|
+
dropdowns, steps, toasts, stat cards...).
|
|
7
|
+
- The prototype needs to look and behave production-grade quickly, with
|
|
8
|
+
design effort spent on the brand layer (theme, signature elements)
|
|
9
|
+
rather than on rebuilding every interactive component from scratch.
|
|
10
|
+
|
|
11
|
+
## Setup (CDN, zero build)
|
|
12
|
+
```html
|
|
13
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
14
|
+
<link href="https://cdn.jsdelivr.net/npm/daisyui@latest/daisyui.css" rel="stylesheet" type="text/css" />
|
|
15
|
+
```
|
|
16
|
+
daisyUI v5 themes are CSS custom properties (OKLCH-based) — this is the one
|
|
17
|
+
foundation where `tokens.css` and the component library's theme system are
|
|
18
|
+
almost the same file. Define a custom `[data-theme="brand"]` block in
|
|
19
|
+
`design-system/tokens.css` mapping every `brand.json` color to daisyUI's
|
|
20
|
+
theme variables, then set `data-theme="brand"` on `<html>` in every page.
|
|
21
|
+
|
|
22
|
+
## brand.json → daisyUI theme mapping
|
|
23
|
+
`colors.primary` → `--p` (primary); `colors.light`/`colors.dark` base tones
|
|
24
|
+
→ `--b1`/`--b2`/`--b3` (base surfaces); a generated neutral/accent scale →
|
|
25
|
+
`--n`/`--a`. Full variable list: see the official daisyUI colors reference.
|
|
26
|
+
|
|
27
|
+
## Getting exact component markup — don't guess, don't vendor a stale copy
|
|
28
|
+
daisyUI publishes and maintains its own official, free, MIT-licensed skill
|
|
29
|
+
covering every component's exact class names and required markup structure,
|
|
30
|
+
at `https://daisyui.com/skills/daisyui/` (installable via
|
|
31
|
+
`npx skills add saadeghi/daisyui`, compatible with any coding agent). When a
|
|
32
|
+
component's exact daisyUI markup is needed (a `card`, a `steps` component, a
|
|
33
|
+
`drawer`...), fetch the matching reference from that live source rather than
|
|
34
|
+
reconstructing it from memory or from a frozen local copy — daisyUI ships
|
|
35
|
+
frequent version updates and class names do change across majors.
|
|
36
|
+
|
|
37
|
+
## Convention
|
|
38
|
+
- `components.css` in a daisyUI project holds only project-specific
|
|
39
|
+
overrides and the signature/identity elements that shouldn't look like
|
|
40
|
+
"generic daisyUI" — never a re-implementation of something daisyUI
|
|
41
|
+
already provides.
|
|
42
|
+
- Respect daisyUI's own component structure exactly (required wrapper
|
|
43
|
+
divs, ARIA attributes) — don't simplify it away for brevity; that's
|
|
44
|
+
usually what breaks the built-in accessibility/interaction behavior.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Foundation: Hybrid (daisyUI + Native)
|
|
2
|
+
|
|
3
|
+
## When this is the right choice
|
|
4
|
+
The default recommendation for most real briefs: composite, "solved"
|
|
5
|
+
components (tables, modals, forms, navigation, steps) don't need
|
|
6
|
+
reinventing — but the handful of elements that carry the brand's actual
|
|
7
|
+
personality (the hero, a signature interaction, a distinctive card variant)
|
|
8
|
+
deserve hand-authored treatment so the result doesn't read as "generic
|
|
9
|
+
daisyUI".
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
Same CDN includes as `daisyui.md`. `components.css` loads after daisyUI's
|
|
13
|
+
stylesheet so Native overrides/additions win without needing `!important`.
|
|
14
|
+
|
|
15
|
+
## Division of labor
|
|
16
|
+
- **daisyUI owns**: anything structurally standard — tables, modals,
|
|
17
|
+
drawers, dropdowns, form controls, pagination, toasts, steps.
|
|
18
|
+
- **Native (`components.css`) owns**: the hero treatment, any signature
|
|
19
|
+
card/section variant called out during `school`, and anything the brief
|
|
20
|
+
explicitly flags as "this must not look templated".
|
|
21
|
+
|
|
22
|
+
## Decision rule for `components`/`page`/`dashboard`
|
|
23
|
+
Before styling anything, ask: "is this a solved, standard UI pattern, or is
|
|
24
|
+
this where the brand's personality needs to show?" First → daisyUI class.
|
|
25
|
+
Second → Native class in `components.css`. Never build a Native
|
|
26
|
+
reimplementation of something daisyUI already solves well — that defeats
|
|
27
|
+
the point of choosing Hybrid over pure Native.
|
|
28
|
+
|
|
29
|
+
## brand.json mapping
|
|
30
|
+
Both mappings from `daisyui.md` and `native.md` apply simultaneously — the
|
|
31
|
+
daisyUI theme handles color of standard components, `tokens.css` custom
|
|
32
|
+
properties handle everything Native-owned.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Foundation: Native (hand-authored semantic components)
|
|
2
|
+
|
|
3
|
+
## When this is the right choice
|
|
4
|
+
- The brief calls for a visual identity that shouldn't read as "built on a
|
|
5
|
+
known component library" — high-end brand work, a signature aesthetic.
|
|
6
|
+
- Zero external dependency is a hard requirement.
|
|
7
|
+
- The team downstream will hand-roll production CSS anyway, so a component
|
|
8
|
+
library choice now wouldn't survive the handoff.
|
|
9
|
+
|
|
10
|
+
## Convention
|
|
11
|
+
- BEM-style class naming: `.card`, `.card__title`, `.card--featured`. No
|
|
12
|
+
utility classes mixed in — layout uses `components.css`-defined layout
|
|
13
|
+
primitives (`.stack`, `.cluster`, `.grid-auto`), not ad hoc flexbox per
|
|
14
|
+
page.
|
|
15
|
+
- `tokens.css` custom properties are the only source of raw values —
|
|
16
|
+
`components.css` rules reference `var(--color-primary)`,
|
|
17
|
+
`var(--space-4)`, etc., never a literal.
|
|
18
|
+
- `utilities.css` stays small and layout-only (spacing/alignment helpers) —
|
|
19
|
+
resist growing it into a parallel utility framework; that's what the
|
|
20
|
+
Tailwind foundation is for.
|
|
21
|
+
|
|
22
|
+
## brand.json → tokens.css mapping
|
|
23
|
+
Same field set as the daisyUI/Tailwind foundations (see `tokens` command) —
|
|
24
|
+
`colors.*`, `typography.*`, `spacing.*` all become `:root` custom
|
|
25
|
+
properties. Native foundation is the only one with no theme-config layer in
|
|
26
|
+
between — the mapping is direct.
|
|
27
|
+
|
|
28
|
+
## What `components` produces here
|
|
29
|
+
Hand-authored rules in `components.css`, one block per component, each
|
|
30
|
+
documented with a one-line comment naming the states it supports (hover,
|
|
31
|
+
active, disabled, loading).
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Foundation: Tailwind Utility-First
|
|
2
|
+
|
|
3
|
+
## When this is the right choice
|
|
4
|
+
- Fast iteration matters more than a hand-authored component vocabulary.
|
|
5
|
+
- The team downstream already works in Tailwind and will inherit these
|
|
6
|
+
classes directly into production — matches `tidyfactor-cinematic`'s own
|
|
7
|
+
CDN-only Tailwind usage, so a project can share visual language with a
|
|
8
|
+
cinematic landing page built alongside it.
|
|
9
|
+
- No named component abstraction wanted — every page composed from raw
|
|
10
|
+
utilities.
|
|
11
|
+
|
|
12
|
+
## Setup (CDN, zero build — same pattern as `tidyfactor-cinematic`)
|
|
13
|
+
```html
|
|
14
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
15
|
+
<script>
|
|
16
|
+
tailwind.config = {
|
|
17
|
+
theme: {
|
|
18
|
+
extend: {
|
|
19
|
+
colors: { /* generated from tokens.css / brand.json colors.* */ },
|
|
20
|
+
fontFamily: { /* generated from typography.families.* */ },
|
|
21
|
+
spacing: { /* generated from spacing.* if it departs from Tailwind defaults */ },
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
26
|
+
```
|
|
27
|
+
This config block lives in one place — `design-system/` — and every page's
|
|
28
|
+
`<head>` includes the same two `<script>` tags. Never redefine
|
|
29
|
+
`tailwind.config` per page.
|
|
30
|
+
|
|
31
|
+
## Convention
|
|
32
|
+
- `components.css` still exists, but holds only the handful of patterns
|
|
33
|
+
Tailwind utilities can't express cleanly (complex pseudo-element tricks,
|
|
34
|
+
keyframe-driven states) — most pages need zero custom CSS at all.
|
|
35
|
+
- No `@apply` sprawl — if a class combination repeats across 3+ pages
|
|
36
|
+
often enough to deserve a name, that's a signal to move it into
|
|
37
|
+
`components.css` as a real named class (see `components` command),
|
|
38
|
+
not to keep re-typing the utility string.
|
|
39
|
+
|
|
40
|
+
## brand.json → Tailwind mapping
|
|
41
|
+
`colors.*` → `theme.extend.colors`; `typography.families.*` →
|
|
42
|
+
`theme.extend.fontFamily`; `spacing.*`/`radius.*`/`shadow.*` → their
|
|
43
|
+
matching `theme.extend.*` keys when they depart from Tailwind's defaults.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Design Schools & Movements — Quick Calibration Index
|
|
2
|
+
|
|
3
|
+
For complete operational rules, visual tokens, typography pairings, color systems, CSS rules, shadow styles, and anti-patterns across all 20 visual aesthetics, see:
|
|
4
|
+
👉 **[`memory/16-design-movements-guide.md`](16-design-movements-guide.md)** (All 20 Visual Movements & Design Tokens)
|
|
5
|
+
👉 **[`memory/17-storytelling-industries-ux.md`](17-storytelling-industries-ux.md)** (4 Storytelling Archetypes, 8 Industry Registers, 8 UX Philosophies)
|
|
6
|
+
👉 **[`memory/18-design-decision-engine.md`](18-design-decision-engine.md)** (9-Step Decision Tree & Anti-Design-Soup Constraint)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 🎨 20 Visual Aesthetics At-A-Glance Index
|
|
11
|
+
1. **Swiss Style**: Objective 12-column grid, sans-serif, high contrast.
|
|
12
|
+
2. **Flat Design**: 2D vector, zero shadows, vibrant color blocks.
|
|
13
|
+
3. **Material Design**: Paper/ink depth, elevation shadows, touch ripples.
|
|
14
|
+
4. **Minimalism**: Extreme negative space, typography focal point.
|
|
15
|
+
5. **Brutalism & Neo-Brutalism**: Hard 4px black offset shadows, 2px borders, pop colors.
|
|
16
|
+
6. **Bauhaus**: Primary color geometry (red/blue/yellow), form follows function.
|
|
17
|
+
7. **Skeuomorphism**: Tactile real-world textures, inner bevels, realistic depth.
|
|
18
|
+
8. **Glassmorphism**: Translucent frosted panels (`backdrop-filter: blur`), spatial layers.
|
|
19
|
+
9. **Maximalism**: Collage layering, kinetic typography, energetic multi-color.
|
|
20
|
+
10. **Industrial Style**: Monospaced data density, blueprint grids, telemetry dots.
|
|
21
|
+
11. **Bento Box UI**: Compartmentalized modular masonry grids, `rounded-2xl` tiles.
|
|
22
|
+
12. **Aurora UI**: Luminescent mesh gradients (`blur(60px)`), dark aura spotlights.
|
|
23
|
+
13. **Neumorphism**: Extruded surface shadows (`inset` + drop), monochromatic grounds.
|
|
24
|
+
14. **Corporate Memphis**: Friendly geometric characters, pastel panels, soft pills.
|
|
25
|
+
15. **Cyberpunk & Vaporwave**: Pitch black grounds, neon cyan/magenta, monospaced HUD.
|
|
26
|
+
16. **Claymorphism**: Soft 3D clay volumes, warm inner light reflections, rounded shapes.
|
|
27
|
+
17. **Isometric Design**: 30° 2D parallel projection vector worlds.
|
|
28
|
+
18. **Kinetic Typography**: Text as the animated hero visual (`clamp()` font scales).
|
|
29
|
+
19. **Organic / Amorphous UI**: Fluid blob shapes (`border-radius: 60% 40% ...`), natural tones.
|
|
30
|
+
20. **Frutiger Aero & Y2K**: Glossy glass buttons, lens flares, vibrant sky blue/lime gradients.
|
|
31
|
+
|
|
32
|
+
## Bauhaus
|
|
33
|
+
Geometric shapes as structural/decorative elements, primary-plus-black
|
|
34
|
+
palettes, function-follows-form typography. Fits: education, design tools,
|
|
35
|
+
brands wanting to signal craft/foundational thinking. Avoid: costume-party
|
|
36
|
+
Bauhaus (circles+triangles as decoration with no structural logic).
|
|
37
|
+
|
|
38
|
+
## Brutalism (web)
|
|
39
|
+
Raw, unstyled-looking HTML elements used deliberately, harsh contrast,
|
|
40
|
+
visible grid lines, monospace accents, intentionally "undesigned". Fits:
|
|
41
|
+
developer tools, portfolios, brands wanting to signal authenticity/anti-
|
|
42
|
+
polish. Avoid: actual unstyled defaults mistaken for the aesthetic —
|
|
43
|
+
brutalism is a considered choice, not the absence of one.
|
|
44
|
+
|
|
45
|
+
## Editorial / Broadsheet
|
|
46
|
+
Hairline rules, dense multi-column text, serif display, byline/dateline
|
|
47
|
+
conventions borrowed from print journalism. Fits: publications, long-form
|
|
48
|
+
content, thought-leadership brands. Avoid: applying hairline-column density
|
|
49
|
+
to a page that has nothing to say at that density (see `frontend-design`'s
|
|
50
|
+
warning on this as an overused AI-design default).
|
|
51
|
+
|
|
52
|
+
## Minimalism
|
|
53
|
+
Extreme restraint, one accent color maximum, huge whitespace, type doing
|
|
54
|
+
almost all the work. Fits: luxury, premium single-product brands. Avoid:
|
|
55
|
+
minimalism as an excuse for lack of a real design decision — every
|
|
56
|
+
remaining element must be precisely placed.
|
|
57
|
+
|
|
58
|
+
## Glassmorphism
|
|
59
|
+
Frosted-glass translucent panels, soft shadows, layered depth over a
|
|
60
|
+
blurred background. Fits: modern consumer apps, dashboards wanting a soft/
|
|
61
|
+
approachable data-density feel. Avoid: layering glass panels on glass
|
|
62
|
+
panels — contrast and legibility break down fast.
|
|
63
|
+
|
|
64
|
+
## Material-influenced
|
|
65
|
+
Elevation via shadow, clear touch targets, motion as spatial logic (things
|
|
66
|
+
move the way physical objects would). Fits: cross-platform app UI,
|
|
67
|
+
utilitarian dashboards. Avoid: importing Material's specific component
|
|
68
|
+
shapes wholesale when the brand wants its own identity — take the
|
|
69
|
+
principles, not the skin.
|
|
70
|
+
|
|
71
|
+
## Modern SaaS (Vercel/Linear-influenced)
|
|
72
|
+
Near-black or pure-white grounds, one saturated accent, monospace for data/
|
|
73
|
+
code, tight type scale, subtle gradient accents, generous but efficient
|
|
74
|
+
spacing. Fits: developer tools, B2B SaaS, technical dashboards. Avoid:
|
|
75
|
+
defaulting here just because the brief is "a SaaS product" — this look is
|
|
76
|
+
common enough now to read as generic if the brand has no other point of
|
|
77
|
+
view.
|
|
78
|
+
|
|
79
|
+
## Calibration: defaults to avoid unless the brief asks for them
|
|
80
|
+
Per `frontend-design`'s own calibration: warm-cream + terracotta-serif,
|
|
81
|
+
near-black + single acid-green/vermilion accent, and broadsheet-hairline-
|
|
82
|
+
columns applied regardless of subject are the three most common AI-design
|
|
83
|
+
tells right now. Choosing one deliberately because it fits the brief is
|
|
84
|
+
fine; landing on one by default is the failure mode `school` exists to
|
|
85
|
+
prevent.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Design Tokens — Reference for `tokens`
|
|
2
|
+
|
|
3
|
+
## Categories and what belongs in each
|
|
4
|
+
|
|
5
|
+
**Colors** — primary, secondary, accent; a light surface scale
|
|
6
|
+
(background/surface/surface-raised) and a dark equivalent if the project
|
|
7
|
+
supports both themes; semantic colors (success/warning/error/info) derived
|
|
8
|
+
from the palette, not generic red/green/yellow dropped in unrelated to the
|
|
9
|
+
brand.
|
|
10
|
+
|
|
11
|
+
**Typography** — a display family (used with restraint, per
|
|
12
|
+
`frontend-design`'s principle), a body family, optionally a mono/utility
|
|
13
|
+
family for data. A type scale (e.g. a 1.25 or 1.333 ratio from a base size)
|
|
14
|
+
— not arbitrary per-heading pixel values. Weight and letter-spacing as
|
|
15
|
+
named tokens tied to the scale, not per-instance tweaks.
|
|
16
|
+
|
|
17
|
+
**Spacing** — one consistent base unit (4px or 8px) and a small named scale
|
|
18
|
+
(`--space-1` through `--space-8` or similar) — every margin/padding/gap in
|
|
19
|
+
the project traces to this scale.
|
|
20
|
+
|
|
21
|
+
**Radius** — a small fixed set (e.g. none/sm/md/lg/full) — resist a
|
|
22
|
+
different radius value per component.
|
|
23
|
+
|
|
24
|
+
**Shadow** — a small fixed elevation set (e.g. sm/md/lg), consistent light
|
|
25
|
+
angle/color across all of them (usually a tint of the darkest neutral in
|
|
26
|
+
the palette, not pure black).
|
|
27
|
+
|
|
28
|
+
**Motion** — duration tokens (fast/base/slow) and easing tokens
|
|
29
|
+
(ease-out for entrances, ease-in for exits, a signature easing curve for
|
|
30
|
+
the brand's characteristic motion if `school` calls for one).
|
|
31
|
+
|
|
32
|
+
## Naming convention
|
|
33
|
+
`--color-*`, `--font-*`, `--space-*`, `--radius-*`, `--shadow-*`,
|
|
34
|
+
`--ease-*`/`--duration-*` — consistent prefixing so any command (or a human
|
|
35
|
+
reading the CSS) can immediately tell a value's category.
|
|
36
|
+
|
|
37
|
+
## Contrast policy
|
|
38
|
+
Every text/background pairing derived from tokens should pass WCAG AA
|
|
39
|
+
(4.5:1 for body text, 3:1 for large text/UI components) — check this when
|
|
40
|
+
`school` picks a direction with strong color contrast ambitions
|
|
41
|
+
(near-black grounds, saturated accents), not just at the end.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Narrative & Conversion — Reference for `page`/`dashboard`
|
|
2
|
+
|
|
3
|
+
## Hero as thesis
|
|
4
|
+
The opening of any page states its single job immediately — a headline, a
|
|
5
|
+
demo, a number, whatever form fits the subject. Never a generic "Welcome
|
|
6
|
+
to X" holding pattern. (Shared principle with `frontend-design`, applied
|
|
7
|
+
here as a persistent rule across every page in the prototype, not just one.)
|
|
8
|
+
|
|
9
|
+
## AIDA (Attention, Interest, Desire, Action)
|
|
10
|
+
A useful ordering check for marketing pages: does the hero earn Attention
|
|
11
|
+
specific to this audience? Does the next section build real Interest (not
|
|
12
|
+
generic feature bullets)? Does the page build Desire before it asks for
|
|
13
|
+
anything? Is the Action (CTA) singular and obvious, not competing with
|
|
14
|
+
three other asks on the same screen?
|
|
15
|
+
|
|
16
|
+
## StoryBrand-style framing
|
|
17
|
+
The visitor is the hero of their own story, not the brand. Copy and layout
|
|
18
|
+
should cast the product as the guide (the thing that helps), not the
|
|
19
|
+
protagonist. A page that talks entirely about the company/product without
|
|
20
|
+
naming the visitor's problem first usually reads as self-absorbed rather
|
|
21
|
+
than persuasive.
|
|
22
|
+
|
|
23
|
+
## Jobs-to-be-Done framing (for dashboards/app screens)
|
|
24
|
+
A dashboard screen's design should answer "what job is the person here to
|
|
25
|
+
do right now" before anything else — scanning for an anomaly, completing a
|
|
26
|
+
task, deciding on an action. Information hierarchy follows that job, not a
|
|
27
|
+
generic "show everything" density.
|
|
28
|
+
|
|
29
|
+
## Structural devices carry meaning, or they don't belong
|
|
30
|
+
Numbered steps, eyebrows, dividers — only use them where they encode
|
|
31
|
+
something real (an actual sequence, an actual category boundary). A
|
|
32
|
+
numbered "01/02/03" on three cards that aren't actually sequential is
|
|
33
|
+
decoration pretending to be information — cut it or fix the content to
|
|
34
|
+
actually be sequential.
|
|
35
|
+
|
|
36
|
+
## Gestalt basics worth naming
|
|
37
|
+
Proximity (related things grouped, unrelated things separated) and
|
|
38
|
+
continuity (aligned edges read as connected) do more consistency work than
|
|
39
|
+
almost any color/type decision — check these before reaching for a visual
|
|
40
|
+
fix when a page "feels off".
|
|
41
|
+
|
|
42
|
+
## CTA hierarchy
|
|
43
|
+
One primary action per page/screen, styled as the obvious next step;
|
|
44
|
+
secondary actions visually subordinate (not competing in size/color).
|
|
45
|
+
Repeating the same primary CTA at natural decision points down a long page
|
|
46
|
+
is a legitimate pattern — offering multiple *different* primary actions is
|
|
47
|
+
not.
|