@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.
Files changed (136) hide show
  1. package/.tidyfactor +52 -0
  2. package/AGENTS.md +75 -0
  3. package/CHANGELOG.md +210 -0
  4. package/LICENSE +17 -0
  5. package/README.ar.md +398 -0
  6. package/README.de.md +44 -0
  7. package/README.es.md +44 -0
  8. package/README.fa.md +44 -0
  9. package/README.fr.md +44 -0
  10. package/README.md +418 -0
  11. package/README.pt.md +44 -0
  12. package/README.zh.md +44 -0
  13. package/SKILL-REGISTRY.md +69 -0
  14. package/SKILL.md +46 -0
  15. package/VISION.md +43 -0
  16. package/assets/blog.png +0 -0
  17. package/assets/content_layout.png +0 -0
  18. package/assets/content_output.png +0 -0
  19. package/assets/dark.png +0 -0
  20. package/assets/dashboard_layout.png +0 -0
  21. package/assets/dashboard_output.png +0 -0
  22. package/assets/ecommerce_layout.png +0 -0
  23. package/assets/ecommerce_output.png +0 -0
  24. package/assets/github-social-preview-2.png +0 -0
  25. package/assets/github-social-preview.png +0 -0
  26. package/assets/hero-banner.png +0 -0
  27. package/assets/light.png +0 -0
  28. package/assets/media_layout.png +0 -0
  29. package/assets/media_output.png +0 -0
  30. package/assets/og-default.png +0 -0
  31. package/assets/video.png +0 -0
  32. package/bin/add-skill.js +31 -0
  33. package/bin/create-kit.js +372 -0
  34. package/bin/remove-skill.js +137 -0
  35. package/brand.json +279 -0
  36. package/memory/01-design-schools.md +85 -0
  37. package/memory/02-design-tokens.md +41 -0
  38. package/memory/03-narrative-conversion.md +47 -0
  39. package/memory/04-motion-principles.md +44 -0
  40. package/memory/05-component-anatomy.md +34 -0
  41. package/memory/06-quality-bar.md +83 -0
  42. package/memory/07-consistency-contract.md +33 -0
  43. package/memory/08-arabic-bilingual.md +54 -0
  44. package/memory/09-prototype-flow.md +36 -0
  45. package/memory/10-python-tooling.md +64 -0
  46. package/memory/11-brand-json-v2.md +86 -0
  47. package/memory/12-typography-matrix.md +31 -0
  48. package/memory/13-layout-archetypes.md +30 -0
  49. package/memory/14-nav-footer-catalog.md +26 -0
  50. package/memory/15-performance-budget.md +18 -0
  51. package/memory/16-design-movements-guide.md +1084 -0
  52. package/memory/17-storytelling-industries-ux.md +143 -0
  53. package/memory/18-design-decision-engine.md +81 -0
  54. package/package.json +64 -0
  55. package/references/commands/_template.md +27 -0
  56. package/references/commands/assets.md +35 -0
  57. package/references/commands/audit.md +15 -0
  58. package/references/commands/brand.md +85 -0
  59. package/references/commands/brief.md +107 -0
  60. package/references/commands/clone.md +26 -0
  61. package/references/commands/components.md +46 -0
  62. package/references/commands/dashboard.md +45 -0
  63. package/references/commands/deploy.md +45 -0
  64. package/references/commands/flow.md +44 -0
  65. package/references/commands/handoff.md +53 -0
  66. package/references/commands/i18n.md +64 -0
  67. package/references/commands/init.md +30 -0
  68. package/references/commands/layout.md +81 -0
  69. package/references/commands/motion.md +62 -0
  70. package/references/commands/nav-footer.md +54 -0
  71. package/references/commands/page.md +45 -0
  72. package/references/commands/palette.md +35 -0
  73. package/references/commands/perf.md +57 -0
  74. package/references/commands/retrofit.md +15 -0
  75. package/references/commands/school.md +41 -0
  76. package/references/commands/states.md +48 -0
  77. package/references/commands/study.md +98 -0
  78. package/references/commands/tokens.md +45 -0
  79. package/references/commands/typography.md +87 -0
  80. package/references/foundations/daisyui.md +44 -0
  81. package/references/foundations/hybrid.md +32 -0
  82. package/references/foundations/native.md +31 -0
  83. package/references/foundations/tailwind-utility.md +43 -0
  84. package/references/memory/01-design-schools.md +85 -0
  85. package/references/memory/02-design-tokens.md +41 -0
  86. package/references/memory/03-narrative-conversion.md +47 -0
  87. package/references/memory/04-motion-principles.md +44 -0
  88. package/references/memory/05-component-anatomy.md +34 -0
  89. package/references/memory/06-quality-bar.md +83 -0
  90. package/references/memory/07-consistency-contract.md +33 -0
  91. package/references/memory/08-arabic-bilingual.md +54 -0
  92. package/references/memory/09-prototype-flow.md +36 -0
  93. package/references/memory/10-python-tooling.md +64 -0
  94. package/references/memory/11-brand-json-v2.md +86 -0
  95. package/references/memory/12-typography-matrix.md +31 -0
  96. package/references/memory/13-layout-archetypes.md +30 -0
  97. package/references/memory/14-nav-footer-catalog.md +26 -0
  98. package/references/memory/15-performance-budget.md +18 -0
  99. package/references/memory/16-design-movements-guide.md +1084 -0
  100. package/references/memory/17-storytelling-industries-ux.md +143 -0
  101. package/references/memory/18-design-decision-engine.md +81 -0
  102. package/references/memory/architecture.md +39 -0
  103. package/references/memory/decision-points.md +50 -0
  104. package/references/memory/foundations.md +15 -0
  105. package/references/memory/quality-bar.md +20 -0
  106. package/references/tidyfactor-vision.md +66 -0
  107. package/references/workflow.md +49 -0
  108. package/references/workflows/audit-prototype.md +26 -0
  109. package/references/workflows/brief.md +30 -0
  110. package/references/workflows/clone-prototype.md +27 -0
  111. package/references/workflows/init-prototype.md +28 -0
  112. package/references/workflows/retrofit-prototype.md +25 -0
  113. package/scripts/__pycache__/_utils.cpython-312.pyc +0 -0
  114. package/scripts/_utils.py +60 -0
  115. package/scripts/build.py +194 -0
  116. package/scripts/check_alpha.py +52 -0
  117. package/scripts/extract_palette.py +139 -0
  118. package/scripts/generate_transitions.py +105 -0
  119. package/scripts/inspect_images.py +48 -0
  120. package/scripts/minify_assets.py +140 -0
  121. package/scripts/optimize_assets.py +91 -0
  122. package/scripts/optimize_images.py +176 -0
  123. package/scripts/prepare_images.py +67 -0
  124. package/scripts/remove_backgrounds.py +61 -0
  125. package/scripts/test_build.py +228 -0
  126. package/templates/design-system/base.css +75 -0
  127. package/templates/design-system/components.css +229 -0
  128. package/templates/design-system/interactions.js +31 -0
  129. package/templates/design-system/motion.js +42 -0
  130. package/templates/design-system/tokens.css +81 -0
  131. package/templates/design-system/utilities.css +47 -0
  132. package/templates/index.html +84 -0
  133. package/templates/proto-nav.js +56 -0
  134. package/tools/build-skill.js +126 -0
  135. package/tools/validate-skill.js +144 -0
  136. 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.