@mthanh/vespercli 2.2.1 → 2.3.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 (157) hide show
  1. package/README.md +3 -2
  2. package/assets/CATALOG.md +9 -2
  3. package/assets/claude/.claude-plugin/marketplace.json +9 -9
  4. package/assets/claude/.claude-plugin/plugin.json +1 -1
  5. package/assets/claude/agents/code-planner.md +1 -1
  6. package/assets/claude/agents/code-reviewer.md +1 -1
  7. package/assets/claude/agents/code-tester.md +1 -1
  8. package/assets/claude/agents/copywriter.md +1 -1
  9. package/assets/claude/agents/feature-wrap-document.md +1 -1
  10. package/assets/claude/agents/janitor.md +1 -1
  11. package/assets/claude/agents/modernization.md +1 -1
  12. package/assets/claude/agents/principal-software-engineer.md +1 -1
  13. package/assets/claude/agents/refine-issue.md +1 -1
  14. package/assets/claude/agents/se-system-architecture-reviewer.md +1 -1
  15. package/assets/claude/agents/se-technical-writer.md +1 -1
  16. package/assets/claude/agents/skill-creator.md +1 -1
  17. package/assets/claude/agents/task-researcher.md +1 -1
  18. package/assets/claude/agents/technical-product-manager.md +1 -1
  19. package/assets/claude/agents/vision-analyst.md +1 -1
  20. package/assets/claude/agents/vitest.md +1 -1
  21. package/assets/claude/agents/workspace-learner.md +2 -2
  22. package/assets/claude/packs/backend/.claude-plugin/plugin.json +1 -1
  23. package/assets/claude/packs/backend/agents/firebase-developer.md +1 -1
  24. package/assets/claude/packs/backend/agents/nodejs-express-developer.md +1 -1
  25. package/assets/claude/packs/docs/.claude-plugin/plugin.json +1 -1
  26. package/assets/claude/packs/frontend/.claude-plugin/plugin.json +1 -1
  27. package/assets/claude/packs/frontend/agents/expert-nextjs-developer.md +1 -1
  28. package/assets/claude/packs/frontend/agents/expert-react-frontend-engineer.md +1 -1
  29. package/assets/claude/packs/frontend/agents/jest-react-component-analyzer.md +1 -1
  30. package/assets/claude/packs/frontend/agents/jest-react-scenario-scanner.md +1 -1
  31. package/assets/claude/packs/frontend/agents/jest-react-test-generator.md +1 -1
  32. package/assets/claude/packs/frontend/agents/jest-react-test-planner.md +1 -1
  33. package/assets/claude/packs/frontend/skills/design-taste-frontend/LICENSE +21 -0
  34. package/assets/claude/packs/frontend/skills/design-taste-frontend/SKILL.md +529 -0
  35. package/assets/claude/packs/frontend/skills/design-taste-frontend/UPSTREAM.json +7 -0
  36. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/app.css +216 -0
  37. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/base.css +105 -0
  38. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/base.js +37 -0
  39. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/charts.js +617 -0
  40. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.css +28 -0
  41. package/assets/claude/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.js +133 -0
  42. package/assets/claude/packs/frontend/skills/design-taste-frontend/evals/evals.json +76 -0
  43. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/app.json +1327 -0
  44. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/directions.json +1078 -0
  45. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/heroes.json +1086 -0
  46. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/motions.json +92 -0
  47. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/palettes.json +1485 -0
  48. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/photos.json +7240 -0
  49. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/sections.json +4429 -0
  50. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/sites.json +8350 -0
  51. package/assets/claude/packs/frontend/skills/design-taste-frontend/library/type.json +2024 -0
  52. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/app-screens.md +1199 -0
  53. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/colour.md +141 -0
  54. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/copy.md +177 -0
  55. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/critique.md +182 -0
  56. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/imagery.md +791 -0
  57. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/layout.md +292 -0
  58. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/motion.md +980 -0
  59. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/research.md +356 -0
  60. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/scenes.md +174 -0
  61. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/tells.md +115 -0
  62. package/assets/claude/packs/frontend/skills/design-taste-frontend/references/type.md +170 -0
  63. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/assets.mjs +865 -0
  64. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/draw.mjs +584 -0
  65. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/inspect.mjs +303 -0
  66. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/app-draw.mjs +203 -0
  67. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/cdp.mjs +248 -0
  68. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/probe.mjs +909 -0
  69. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lib/rules.mjs +243 -0
  70. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/lint.mjs +119 -0
  71. package/assets/claude/packs/frontend/skills/design-taste-frontend/scripts/scenes.mjs +124 -0
  72. package/assets/claude/packs/graphify/.claude-plugin/plugin.json +1 -1
  73. package/assets/claude/packs/integrations/.claude-plugin/plugin.json +1 -1
  74. package/assets/claude/packs/playwright/.claude-plugin/plugin.json +1 -1
  75. package/assets/claude/packs/playwright/agents/playwright-component-analyzer.md +1 -1
  76. package/assets/claude/packs/playwright/agents/playwright-scenario-scanner.md +1 -1
  77. package/assets/claude/packs/playwright/agents/playwright-test-generator.md +1 -1
  78. package/assets/claude/packs/playwright/agents/playwright-test-planner.md +1 -1
  79. package/assets/claude/packs/playwright/agents/playwright-tester.md +1 -1
  80. package/assets/claude/packs/polyglot/.claude-plugin/plugin.json +1 -1
  81. package/assets/claude/packs/styles/.claude-plugin/plugin.json +1 -1
  82. package/assets/copilot/agents/code-planner.agent.md +1 -1
  83. package/assets/copilot/agents/code-reviewer.agent.md +1 -1
  84. package/assets/copilot/agents/code-tester.agent.md +1 -1
  85. package/assets/copilot/agents/copywriter.agent.md +1 -1
  86. package/assets/copilot/agents/feature-wrap-document.agent.md +1 -1
  87. package/assets/copilot/agents/janitor.agent.md +1 -1
  88. package/assets/copilot/agents/modernization.agent.md +1 -1
  89. package/assets/copilot/agents/principal-software-engineer.agent.md +1 -1
  90. package/assets/copilot/agents/refine-issue.agent.md +1 -1
  91. package/assets/copilot/agents/se-system-architecture-reviewer.agent.md +1 -1
  92. package/assets/copilot/agents/se-technical-writer.agent.md +1 -1
  93. package/assets/copilot/agents/skill-creator.agent.md +1 -1
  94. package/assets/copilot/agents/task-researcher.agent.md +1 -1
  95. package/assets/copilot/agents/technical-product-manager.agent.md +1 -1
  96. package/assets/copilot/agents/vision-analyst.agent.md +1 -1
  97. package/assets/copilot/agents/vitest.agent.md +1 -1
  98. package/assets/copilot/agents/workspace-learner.agent.md +2 -2
  99. package/assets/copilot/packs/backend/agents/firebase-developer.agent.md +1 -1
  100. package/assets/copilot/packs/backend/agents/nodejs-express-developer.agent.md +1 -1
  101. package/assets/copilot/packs/frontend/agents/expert-nextjs-developer.agent.md +1 -1
  102. package/assets/copilot/packs/frontend/agents/expert-react-frontend-engineer.agent.md +1 -1
  103. package/assets/copilot/packs/frontend/agents/jest-react-component-analyzer.agent.md +1 -1
  104. package/assets/copilot/packs/frontend/agents/jest-react-scenario-scanner.agent.md +1 -1
  105. package/assets/copilot/packs/frontend/agents/jest-react-test-generator.agent.md +1 -1
  106. package/assets/copilot/packs/frontend/agents/jest-react-test-planner.agent.md +1 -1
  107. package/assets/copilot/packs/frontend/skills/design-taste-frontend/LICENSE +21 -0
  108. package/assets/copilot/packs/frontend/skills/design-taste-frontend/SKILL.md +529 -0
  109. package/assets/copilot/packs/frontend/skills/design-taste-frontend/UPSTREAM.json +7 -0
  110. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/app.css +216 -0
  111. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/base.css +105 -0
  112. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/base.js +37 -0
  113. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/charts.js +617 -0
  114. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.css +28 -0
  115. package/assets/copilot/packs/frontend/skills/design-taste-frontend/assets/scenes/stage.js +133 -0
  116. package/assets/copilot/packs/frontend/skills/design-taste-frontend/evals/evals.json +76 -0
  117. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/app.json +1327 -0
  118. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/directions.json +1078 -0
  119. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/heroes.json +1086 -0
  120. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/motions.json +92 -0
  121. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/palettes.json +1485 -0
  122. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/photos.json +7240 -0
  123. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/sections.json +4429 -0
  124. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/sites.json +8350 -0
  125. package/assets/copilot/packs/frontend/skills/design-taste-frontend/library/type.json +2024 -0
  126. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/app-screens.md +1199 -0
  127. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/colour.md +141 -0
  128. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/copy.md +177 -0
  129. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/critique.md +182 -0
  130. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/imagery.md +791 -0
  131. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/layout.md +292 -0
  132. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/motion.md +980 -0
  133. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/research.md +356 -0
  134. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/scenes.md +174 -0
  135. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/tells.md +115 -0
  136. package/assets/copilot/packs/frontend/skills/design-taste-frontend/references/type.md +170 -0
  137. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/assets.mjs +865 -0
  138. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/draw.mjs +584 -0
  139. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/inspect.mjs +303 -0
  140. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/app-draw.mjs +203 -0
  141. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/cdp.mjs +248 -0
  142. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/probe.mjs +909 -0
  143. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lib/rules.mjs +243 -0
  144. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/lint.mjs +119 -0
  145. package/assets/copilot/packs/frontend/skills/design-taste-frontend/scripts/scenes.mjs +124 -0
  146. package/assets/copilot/packs/playwright/agents/playwright-component-analyzer.agent.md +1 -1
  147. package/assets/copilot/packs/playwright/agents/playwright-scenario-scanner.agent.md +1 -1
  148. package/assets/copilot/packs/playwright/agents/playwright-test-generator.agent.md +1 -1
  149. package/assets/copilot/packs/playwright/agents/playwright-test-planner.agent.md +1 -1
  150. package/assets/copilot/packs/playwright/agents/playwright-tester.agent.md +1 -1
  151. package/assets/manifest.json +2 -0
  152. package/dist/cli.min.js +102 -102
  153. package/package.json +1 -1
  154. package/scripts/__snapshots__/generate-claude-assets.test.js.snap +1 -1
  155. package/scripts/generate-claude-assets.strict.test.js +1 -1
  156. package/scripts/generate-claude-assets.test.js +6 -6
  157. package/scripts/packs-layout.test.js +2 -1
@@ -0,0 +1,141 @@
1
+ # Colour
2
+
3
+ The direction sheet deals a palette with named roles. This file is how to apply it so the page looks
4
+ decided rather than tinted.
5
+
6
+ ## Contents
7
+
8
+ 1. What the study measured
9
+ 2. The roles
10
+ 3. Proportion
11
+ 4. Surfaces without lines or shadows
12
+ 5. Colour fields
13
+ 6. Dark pages
14
+ 7. Colour and photographs
15
+ 8. Contrast
16
+ 9. Banned families, and what "warm" means here
17
+
18
+ ## 1. What the study measured
19
+
20
+ - 41% of the studied pages are dark, 59% light. A quarter sit on pure white; 12% on pure black.
21
+ - Schemes, as the panel classed them: monochrome plus one accent 23%, light neutral 22%, dark neutral
22
+ 14%, several flat colours 13%, strictly two-tone 12%, colour carried by photographs 9%, one saturated
23
+ field 6%.
24
+ - Buttons are neutral (black, white, grey) on 52% of sites. A coloured button is a choice, not a
25
+ requirement.
26
+ - Gradient fills appear on 22% of the top-scored sites and 52% of the weak ones; gradient text on 2%
27
+ against 13%.
28
+ - One site in 246 has a terracotta primary button and none has a violet one. Those are colours of
29
+ generated pages, not of the gallery. Warm off-white grounds do occur (32 sites), nearly always with
30
+ a dark or green ink rather than an orange accent.
31
+ - Top-scored sites change the page's field colour between sections more often (a median of two section
32
+ grounds against one).
33
+
34
+ ## 2. The roles
35
+
36
+ ```css
37
+ :root {
38
+ --bg: …; /* the ground: most of the surface */
39
+ --surface: …; /* one tone step from the ground: filled panels, form fields, tiles */
40
+ --ink: …; /* main text and the strongest marks */
41
+ --muted: …; /* secondary text; still passes contrast on --bg */
42
+ --accent: …; /* the one accent */
43
+ --accent-ink: …; /* text on the accent */
44
+ /* --field-1 … --field-n and their inks, when the palette has section fields */
45
+ }
46
+ ```
47
+
48
+ Use the tokens for every colour in the build. A raw hex in a component is a second palette starting.
49
+ Do not add greys between the roles: if you need a quieter text, it is `--muted`; if you need a quieter
50
+ surface, it is `--surface`.
51
+
52
+ ## 3. Proportion
53
+
54
+ Decide the shares before colouring anything and check them in the screenshot:
55
+
56
+ - **Ground:** 70–90% of the page.
57
+ - **Ink:** text and perhaps one inverted section (ink as ground, ground as ink).
58
+ - **Accent:** under 5% of any screen. It marks the action and at most one other recurring thing. The
59
+ moment it appears in five places it stops meaning "here".
60
+
61
+ Palettes with fields (flat-loud, pastel) work differently: each section is one field at full strength
62
+ and the proportion rule applies inside each section (field, its ink, nothing else).
63
+
64
+ The accent is not for headings, icons, bullets, borders or underlines unless the direction sheet says
65
+ so. A headline is ink.
66
+
67
+ ## 4. Surfaces without lines or shadows
68
+
69
+ With rules and shadows banned, a surface is told apart from the ground by tone alone:
70
+
71
+ ```css
72
+ .panel { background: var(--surface); } /* 2–6 lightness points from --bg */
73
+ .field { background: var(--surface); border: 0; } /* inputs: filled, with a clear focus state */
74
+ .field:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
75
+ ```
76
+
77
+ - One step is enough. If a panel does not read, increase padding or separate with space before
78
+ reaching for a second tone.
79
+ - Do not nest a panel inside a panel.
80
+ - Images do not need a frame. If a light photograph melts into a light ground, change the crop or set
81
+ it on `--surface`, do not outline it.
82
+ - A thick bar (4px or more) in ink or accent is a graphic element, allowed where the direction uses
83
+ it. A 1px line is not.
84
+
85
+ ## 5. Colour fields
86
+
87
+ A section that changes the whole ground colour is the strongest colour move available, and it replaces
88
+ dividers, cards and background decoration at once.
89
+
90
+ - Fields meet edge to edge with a hard line. Nothing fades.
91
+ - Every field has its own assigned ink from the palette. Never put `--muted` on a coloured field; use
92
+ the field's ink at full strength, or at 70% opacity for secondary text if it still passes contrast.
93
+ - Neighbouring fields should differ in lightness, not only in hue, or the page vibrates.
94
+ - Order them like chapters: open strong, rest, surprise, close dark or very light.
95
+ - The page's meta theme colour and the navigation follow the first field.
96
+
97
+ ## 6. Dark pages
98
+
99
+ - Put `color-scheme: dark` on the root so form controls and scrollbars follow.
100
+ - The ground is a deep tone with a slight tint from the palette, and the ink is a soft light, not
101
+ `#fff` on `#000`, unless the palette deals exactly that for a stark two-tone direction.
102
+ - Secondary text is where dark pages fail: check `--muted` against the ground (4.5:1).
103
+ - Depth on dark comes from a lighter surface step, never from glows or coloured light.
104
+ - Use lighter font weights than you would on a light page.
105
+
106
+ ## 7. Colour and photographs
107
+
108
+ - When photographs carry the colour, the interface stays neutral and takes its ink from the darkest
109
+ tone in the imagery.
110
+ - Do not wash a photograph with the brand colour. Either leave it alone, or commit to a real treatment
111
+ for every image on the page (all greyscale, or all untouched).
112
+ - Text over a photograph needs a calm region. If there is none, move the text off the image. A neutral
113
+ scrim (black or the ink colour, 30–55% opacity, flat or fading over the text area only) is the one
114
+ gradient the inspector allows.
115
+ - A flat field sampled from a photograph (its sky, its shadow) makes a section sit with that image.
116
+
117
+ ## 8. Contrast
118
+
119
+ - Body text 4.5:1 or better; display type and large numerals 3:1 or better; the dealt palettes meet
120
+ 7:1 for ink on ground.
121
+ - `inspect.mjs` computes contrast for text on flat grounds and fails anything under 2.6:1. It cannot
122
+ see text over photographs: check those in the screenshots yourself.
123
+ - Do not lower opacity on text to make it "soft" unless you have checked the resulting ratio.
124
+ - Focus states and hover states increase contrast, never reduce it.
125
+
126
+ ## 9. Banned families, and what "warm" means here
127
+
128
+ The inspector fails these:
129
+
130
+ - **Cream with terracotta.** A yellow-cream ground (roughly hue 22–62, light and noticeably
131
+ saturated) with a rust, clay or burnt-orange accent is the house look of AI assistants and of the
132
+ pages they generate. Either half alone is suspect; together they are unmistakable.
133
+ - **Violet and indigo.** The first wave of generated pages was purple; it still reads that way.
134
+
135
+ If the brief wants warmth, get it from a low-chroma stone, bone or putty ground (saturation under
136
+ about 15%), from a deep green, brown or oxblood ink, from photographs, or from a full warm field
137
+ (mustard, tomato red, pink) used flat and with conviction. Warmth is not beige.
138
+
139
+ If the brand itself owns one of the banned colours, it is the brand's and you keep it: use
140
+ `--keep palette`, pass `--allow palette-purple` (or the relevant rule) to the inspector, and note it in
141
+ the report.
@@ -0,0 +1,177 @@
1
+ # Words
2
+
3
+ Copy is the first design decision. A headline that needs four lines cannot be rescued by typography,
4
+ and a page of slogans cannot be rescued by layout. Write the page as plain text before any markup.
5
+
6
+ ## Contents
7
+
8
+ 1. Write the argument first
9
+ 2. The two-line headline (with the character budget)
10
+ 3. Headline shapes that work
11
+ 4. Supporting line, body, buttons
12
+ 5. Proof without inventing it
13
+ 6. Things that read as generated
14
+ 7. Micro-typography
15
+
16
+ ## 1. Write the argument first
17
+
18
+ Answer in one line each, in a scratch note:
19
+
20
+ - Who is reading, and what do they already know?
21
+ - What is this, said the way its maker would say it to a friend?
22
+ - What single thing should the reader believe after one screen?
23
+ - What would make them believe it (a picture of the thing, a number, a name, a demonstration)?
24
+ - What do they do next?
25
+
26
+ Then list the page as claims, one per section, each with its proof:
27
+
28
+ ```
29
+ 1. It is a three-legged oak stool, made to order. → the stool, large
30
+ 2. Each seat is cut from one board, so the grain is yours. → three close-ups
31
+ 3. It takes six weeks, and you can follow it. → the stages, photographed
32
+ 4. It costs 240 and is delivered by the maker. → price, button
33
+ ```
34
+
35
+ A section with no claim is filler; delete it. This is also how you escape the stock order of
36
+ hero, logos, features, testimonial, pricing, call to action: the order of the argument is the order of
37
+ the page.
38
+
39
+ ## 2. The two-line headline
40
+
41
+ A headline is a title. It is held in one glance. On the studied gallery sites the hero headline has a
42
+ median of 5 words and 70% sit on one or two lines at desktop width. Every headline on your page, at
43
+ every viewport, fits in **two lines or fewer**. `inspect.mjs` measures this at 1440, 768 and 390 pixels
44
+ and fails the page otherwise.
45
+
46
+ The constraint is arithmetic, so do it before you fall in love with a sentence:
47
+
48
+ ```
49
+ characters per line ≈ line width in px ÷ (font size in px × k)
50
+
51
+ k ≈ 0.40 condensed faces
52
+ k ≈ 0.50 most grotesks and serifs at display size, tight tracking
53
+ k ≈ 0.58 wide / extended faces, all-caps settings
54
+ ```
55
+
56
+ | Where | Line width | Size | Per line | Two-line budget |
57
+ | --- | --- | --- | --- | --- |
58
+ | Phone 390, 20px gutters | 350px | 44px | ~16 | **~32 characters** |
59
+ | Phone 390, 20px gutters | 350px | 34px | ~21 | ~42 characters |
60
+ | Tablet 768 | 690px | 64px | ~22 | ~44 characters |
61
+ | Desktop, 12-col measure | 1100px | 104px | ~21 | ~42 characters |
62
+ | Desktop, half width | 620px | 72px | ~17 | ~34 characters |
63
+
64
+ So a hero headline of **about 32 characters or fewer** (four to six words) survives everywhere at a
65
+ confident size. Up to about 42 works if the phone size comes down to the mid-30s. Past that you are
66
+ writing a sentence; move the rest into the supporting line.
67
+
68
+ Controlling the break:
69
+
70
+ - Give the headline a `max-width` in `ch` so it breaks where you intend, and add
71
+ `text-wrap: balance` so two lines come out even.
72
+ - Where the break matters (it usually does), author it: `Stools for<br> small kitchens`. Check the
73
+ phone screenshot; if an authored line wraps there, hide the `<br>` under a breakpoint or shorten.
74
+ - Never fix a long headline only by shrinking it. A timid 28px headline of nine words is worse than
75
+ five words at 64px.
76
+ - Avoid a single orphan word on line two. Rebalance by cutting a word, not by nudging the width.
77
+
78
+ Section headings follow the same rule and are shorter: two to five words.
79
+
80
+ **A statement is not a headline.** An intro sentence or a quotation set large (the manifesto line
81
+ after the hero, a testimonial) is a paragraph: mark it up as `<p>` or `<blockquote>`, keep it to about
82
+ 25 words, and set it at statement size, which the inspector takes as 36px or less on desktop, 32px on
83
+ a tablet and 24px on a phone. It may then run to about three lines (four on a phone). Set larger than
84
+ that, or marked up as a heading, or placed as the main line of the first screen, it is a headline and
85
+ gets two lines. In blind judging, a sentence set big over three or more lines was read as a long
86
+ headline every time, whatever its markup; if the words matter that much, cut them to a two-line
87
+ headline instead.
88
+
89
+ ## 3. Headline shapes that work
90
+
91
+ All seen repeatedly on the gallery sites. Pick the plainest one that is true.
92
+
93
+ - **The name.** The brand or the person, set very large, with a one-line description elsewhere.
94
+ Strongest when the name is short and the subject is visual (studios, restaurants, hotels, people).
95
+ - **What it is.** "A vinyl shelf in your pocket." "Furniture for small rooms." Category, stated with
96
+ one specific word.
97
+ - **The claim.** "Your bank won't do this." One sentence a competitor could not sign.
98
+ - **The instruction.** "Understand your money." Verb first, short.
99
+ - **The place or the moment.** "Antarctica." "Lisbon, since 1984." For hospitality, events, travel.
100
+
101
+ Shapes to avoid, because they are the average of every landing page:
102
+
103
+ - The mad-lib: "The AI-powered platform for modern teams".
104
+ - The tricolon: "Fast. Simple. Secure." or "Plan. Build. Ship."
105
+ - The correction: "It's not just a tool, it's a workflow". Also "More than a …".
106
+ - "X, reimagined / redefined / made simple". "Welcome to …". "Meet …" for a product nobody has met.
107
+ - A question the reader did not ask.
108
+ - A headline that needs its colon: "Ledgerly: invoicing for freelancers". Drop the name, it is in the
109
+ navigation.
110
+ - One word of the headline styled differently (italic, serif, coloured, underlined, in a pill).
111
+
112
+ Sentence case. No full stop unless the direction's voice uses them everywhere.
113
+
114
+ ## 4. Supporting line, body, buttons
115
+
116
+ **Supporting line.** One sentence, at most about 22 words, that says concretely what the thing is and
117
+ who it is for. It is where the detail cut from the headline goes. It never repeats the headline in
118
+ other words.
119
+
120
+ **Body.** Short paragraphs of plain statements. Prefer the specific noun and the real number: "ships
121
+ in a week" over "fast delivery"; "38 seats" over "intimate". Read every sentence and ask whether a
122
+ different company could print it unchanged; if so, sharpen it or cut it.
123
+
124
+ **Buttons.** Name the action or the thing: "Book a table", "See the plans", "Download for Mac".
125
+ One to three words. The primary action keeps one name everywhere on the page. One primary button per
126
+ screen; a second action is a plain text link. No arrow glyph on every link and button; at most one
127
+ arrow, on the primary action, if the direction uses arrows at all.
128
+
129
+ **Navigation.** The wordmark, up to five plain links, one action. Link labels are single nouns.
130
+
131
+ ## 5. Proof without inventing it
132
+
133
+ Never invent customers, quotes from named people, press logos, user counts, ratings or benchmarks.
134
+ Invented proof is both dishonest and a recognised tell.
135
+
136
+ When the brief supplies no proof, use what is true by construction:
137
+
138
+ - Show the thing itself, large. A real demonstration outranks any quote.
139
+ - State how it works, specifically.
140
+ - Use facts from the brief (price, place, year, materials, what is included).
141
+ - If a testimonial or logo section is explicitly requested and no real ones exist, build the section
142
+ with plainly fictional sample content and say so in your final report so it is replaced before
143
+ launch. Do not put real company names or real people in it.
144
+
145
+ **Sample details are different from proof, and they are expected.** Where the brief gives the shape of
146
+ the content but not every detail (six rooms "from €140", "a short menu", twelve speakers), write the
147
+ full set of plausible details: each room with a name, a bed, a view and its own rate; each dish with
148
+ its price; each speaker with a talk title. A design can only be judged at its real density, and a page
149
+ that shows one rate where six rooms exist looks unfinished. List every sample detail in the report so
150
+ the client confirms or replaces it.
151
+
152
+ ## 6. Things that read as generated
153
+
154
+ `lint.mjs` flags most of these.
155
+
156
+ - Verbs and adjectives of the genre: unlock, unleash, supercharge, elevate, empower, streamline,
157
+ seamless, effortless, robust, cutting-edge, next-generation, world-class, all-in-one, blazing fast.
158
+ - Labels pretending to be editorial: "Field notes", "The details", "Our philosophy", "Quietly trusted
159
+ by". A section heading can simply be "Pricing".
160
+ - Furniture text: locale or time strips, "Est. 2024", coordinates, version stamps, "Scroll", "(Scroll
161
+ to explore)", fake photo credits, status lines such as "Available for work" with a dot, strings of
162
+ words separated by middle dots or slashes.
163
+ - The em dash as a habit. One or two on a page read as writing; ten read as a model. Use a full stop.
164
+ - Explainer captions that narrate the design: "A clean, minimal layout for…".
165
+ - Step labels that duplicate numbers: "Step 1", "Phase 02".
166
+ - Three parallel items everywhere: three features, three stats, three steps. Use the number the
167
+ content has.
168
+
169
+ ## 7. Micro-typography
170
+
171
+ - Curly quotes and apostrophes (“ ” ’), a real ellipsis (…), an en dash for ranges (9–5).
172
+ - Non-breaking space between a number and its unit, and before the last short word of a headline
173
+ when it would otherwise orphan (`&nbsp;`).
174
+ - `font-variant-numeric: tabular-nums` where numbers line up in columns (prices, tables).
175
+ - `text-wrap: balance` on headings, `text-wrap: pretty` on paragraphs.
176
+ - No all-caps for anything longer than three words; if you set caps, add 0.02–0.06em tracking.
177
+ - No text under 13px. No centred paragraphs longer than three lines. No justified text.
@@ -0,0 +1,182 @@
1
+ # Critique — judging the render
2
+
3
+ `inspect.mjs` passing means nothing banned or broken was measured. It says nothing about whether the
4
+ page is good. This file is how you find out. Use it on the screenshots, never on the code: you wrote
5
+ the code, so you will read your intentions into it. The pictures only show what is there.
6
+
7
+ ## Contents
8
+
9
+ 1. How to look (fourteen passes, a few minutes)
10
+ 2. The score
11
+ 3. Caps
12
+ 4. Writing the critique
13
+ 5. What to fix first
14
+ 6. When to stop
15
+
16
+ ## 1. How to look
17
+
18
+ Open `desktop-fold.jpg`, then the `desktop-page-*.jpg` sheets, then `mobile-fold.jpg` and the mobile
19
+ sheets. Make each pass on its own; do not blend them.
20
+
21
+ 1. **One second, then five.** Glance and look away. What did you see? There should be exactly one
22
+ answer: a word, an image, an object. If the answer is "a website", there is no focal point. Then
23
+ give the first screen five seconds as a stranger: can you say what this is, who it is for and
24
+ what to do next? If the title only makes sense after scrolling, it is not a title.
25
+ 2. **Squint.** Blur your attention until text becomes grey bars. The page should reduce to two or
26
+ three large masses with clear size differences. Many small similar masses means everything is
27
+ medium and nothing leads.
28
+ 3. **Cover the logo.** Could this first screen belong to a competitor, or to a different industry?
29
+ If swapping the name and the noun in the headline would produce an equally valid page, the page has
30
+ no idea. Go back to the direction sheet; the idea is written there. Then scroll: does the idea reach
31
+ the pricing, the FAQ and the footer, or does the page turn into stock blocks after the first screen?
32
+ 4. **Edges.** Follow the left edge of every text block down the page. Count the distinct x positions.
33
+ A composed page has two or three, reused on purpose. Six means things were placed one at a time.
34
+ 5. **Space and frame.** Are related things close and unrelated things far? Is the gap between sections
35
+ clearly larger than any gap inside a section? Is any region empty by accident (a hole) rather than
36
+ by decision (a rest)? A hole usually sits beside a short column or under a removed decoration.
37
+ Then look at the frame: are the left and right margins of the page the same? Does any section keep
38
+ its text in one half and leave the other half empty? Is there a stretch of nothing taller than half
39
+ a screen? Readers name these first ("it is pushed to the left", "random empty space"), before any
40
+ detail; in the study of 100 Sites of the Day about 1 section in 100 left half the width empty.
41
+ 6. **Type.** Is the jump from body text to headline decisive (three times or more)? Do you see more
42
+ than five sizes? Any headline with one orphan word on its last line? Any paragraph wider than about
43
+ 75 characters or centred over more than three lines?
44
+ 7. **Colour.** Name the proportions: which colour holds most of the surface, which supports, where is
45
+ the accent? An accent that appears in ten places means nothing. One that appears on the single
46
+ action and one detail means "here".
47
+ 8. **Images.** Count the real pictures: are there at least four, and is there a moving one? A page of
48
+ drawings only, or of type only, looks unfinished next to one with real photographs and footage.
49
+ Is every image doing a job (showing the thing, setting the place, proving the claim)?
50
+ Do the crops share ratios? Is anything a grey box, a stretched photo, a fake screen made of bars?
51
+ Does the photography share one light and one grade, or is it a stock mix?
52
+ 9. **Sameness.** Write one word for each section's layout (split, list, full-bleed, grid, statement,
53
+ index …). The same word twice in a row, or three times on the page, is the template showing.
54
+ 10. **Phone.** Is the mobile screen a composition of its own, with its own crop and its own line
55
+ breaks, or the desktop page squeezed? Is the first screen still one clear thing?
56
+ 11. **Fullness.** Go through the desktop sheets screen by screen. Is each screen a composed poster, or
57
+ is it a narrow column of small text with dead ground either side? Is any statement held on screen
58
+ for three screens? An austere page is not a restrained one: if the page could be mistaken for an
59
+ unfinished wireframe (grey shapes, grey text, one small column), it is underbuilt. A single motif or
60
+ drawing blown up to fill a whole screen with nothing to read is a hole too, however bold it looks.
61
+ 12. **Substance.** Does every section the brief asked for deliver its information completely and at a
62
+ readable size (the full menu, each room, every speaker, the price and what it includes)? Would the
63
+ visitor leave knowing what they came to find out? Is the primary action a real button on the first
64
+ screen?
65
+ 13. **Collisions.** Is anything lying on top of a headline, a statement or a button at any scroll
66
+ position? Does any element run off the edge of the phone screen? A row that scrolls sideways on
67
+ the phone reads as cut off in a screenshot and to most visitors; wrap it unless the cut is
68
+ plainly deliberate (a partial card showing at the edge).
69
+ 14. **The competitor and the live thing.** Put the nearest competitor's name on the page: does the
70
+ idea still work? Then name the one live thing (what the visitor can do or what differs each visit).
71
+ If either answer is weak, that is the first problem of the round, ahead of any detail.
72
+
73
+ A note from testing: in blind comparisons a richer page full of template devices beat a cleaner page
74
+ that was thin, every time. The house rules remove the devices; passes 11–13 are where you make sure the
75
+ page did not lose its substance with them.
76
+
77
+ ## 2. The score
78
+
79
+ Score like an Awwwards juror: four criteria, 1–10 each, weighted **design 40%, usability 30%,
80
+ creativity 20%, content 10%**.
81
+
82
+ **Design (40%)** — composition, typography, colour, imagery, craft.
83
+ - 9–10: every screen holds as a poster. Nothing could be removed or moved.
84
+ - 8: confident and coherent; one or two soft spots a designer would notice.
85
+ - 7: clean and professional, a clear system, little tension.
86
+ - 6: tidy but anonymous. Reads as a kit.
87
+ - 5 or less: weak hierarchy, accidental spacing, default type, mismatched images.
88
+
89
+ **Usability (30%)** — orientation in three seconds, readable text, obvious actions, honest mobile.
90
+ - 9–10: you know what it is, who it is for and what to do without scrolling; flawless on a phone.
91
+ - 8: clear and comfortable; minor friction (a long section, a small target).
92
+ - 7: works, with one real problem (weak contrast somewhere, a cramped phone layout).
93
+ - 6 or less: you have to hunt, or something breaks.
94
+
95
+ **Creativity (20%)** — an idea you can state in a sentence, carried through.
96
+ - 9–10: a concept specific to this subject that you have not seen applied this way.
97
+ - 8: a clear idea with one memorable move.
98
+ - 7: a tasteful execution of a known approach.
99
+ - 6 or less: the category default.
100
+
101
+ **Content (10%)** — words and pictures that are specific, true-sounding and edited.
102
+ - 9–10: every line could only be about this subject; imagery is the subject.
103
+ - 7–8: clear and concrete, some generic lines.
104
+ - 6 or less: slogans, filler, stock.
105
+
106
+ `overall = 0.4·design + 0.3·usability + 0.2·creativity + 0.1·content`
107
+
108
+ For calibration: real Sites of the Day land around 7.5–8.0 overall from the jury. An honest 8.5 is
109
+ rare. If your first score for your own work is 9, score it again as the juror who did not build it.
110
+
111
+ ## 3. Caps
112
+
113
+ These override the arithmetic.
114
+
115
+ - Any `FAIL` still reported by `inspect.mjs`: overall cannot exceed **6.0**.
116
+ - A headline of three or more lines at any viewport, an eyebrow label, monospace labels, 01/02/03
117
+ numbering, a decorative gradient, a shadow on a resting element, or a decorative hairline visible in
118
+ a screenshot: overall cannot exceed **6.5**, whatever else is true.
119
+ - Pass 3 fails (the page could belong to anyone): creativity cannot exceed **6**.
120
+ - The idea passes for the nearest competitor (pass 14): creativity cannot exceed **7**.
121
+ - Fewer than four real pictures (photographs, archival images, footage; drawings do not count):
122
+ design cannot exceed **6.5**.
123
+ - A page that barely moves (the inspector's `still-page`), or motion that is one identical fade on
124
+ every block: design cannot exceed **7**.
125
+ - No live thing (pass 14): creativity cannot exceed **7.5**.
126
+ - Any placeholder (grey box, lorem, "Image here"): content cannot exceed **5**.
127
+ - Two or more desktop screens that are mostly empty ground, or a page whose running text is small and
128
+ grey: design cannot exceed **6.5**.
129
+ - A section the brief asked for that is missing or reduced to a few words: content cannot exceed **6**.
130
+ - No real button for the primary action on the first screen: usability cannot exceed **7**.
131
+ - The five-second pass fails (no clear title saying what this is on the first screen): usability
132
+ cannot exceed **6**.
133
+ - Unequal page margins, a section huddled on one side with the other half empty, or a blank stretch
134
+ taller than half a screen: design cannot exceed **6.5**.
135
+ - A section of running text with no heading naming it: usability cannot exceed **7**.
136
+ - Anything covering a headline at any scroll position: usability cannot exceed **6**.
137
+ - A blank band where a reveal did not fire, or content clipped off-screen: usability cannot exceed **5**.
138
+
139
+ ## 4. Writing the critique
140
+
141
+ Write it down; do not just think it. Use exactly this shape so rounds can be compared:
142
+
143
+ ```
144
+ ROUND n
145
+ Seen in one second: …
146
+ Idea (one sentence): …
147
+ Live thing: …
148
+ Layout words by section: hero=… / …=… / …
149
+ Scores: design _ · usability _ · creativity _ · content _ → overall _._
150
+ Caps applied: …
151
+ Top three problems (most visible first), each with the screenshot it shows in and the fix:
152
+ 1. …
153
+ 2. …
154
+ 3. …
155
+ ```
156
+
157
+ Name problems the way a designer would to a colleague: "the supporting paragraph starts 40px left of
158
+ the headline's edge", "the testimonial section is the third split layout in a row", "the phone hero
159
+ crops the bottle out of frame". "Could be more polished" is not a finding.
160
+
161
+ ## 5. What to fix first
162
+
163
+ Fix in this order; later items cannot rescue earlier ones.
164
+
165
+ 1. **The idea.** If pass 3 fails, change the hero concept, not the details.
166
+ 2. **Hierarchy.** One dominant element per screen. Make the big thing bigger and the small things
167
+ fewer before touching anything else.
168
+ 3. **Composition.** Shared edges, section spacing, variety of layout between sections, holes.
169
+ 4. **Typography.** Scale contrast, line breaks, measure, leading.
170
+ 5. **Imagery.** Replace weak pictures, unify crops and grade.
171
+ 6. **Colour.** Proportion and accent discipline.
172
+ 7. **Detail.** States, focus, small alignments, mobile refinements.
173
+ 8. **Motion.** Last.
174
+
175
+ When removing something leaves a gap, do not refill it with an ornament. Close the gap, enlarge what
176
+ remains, or let a picture or a colour field take the space.
177
+
178
+ ## 6. When to stop
179
+
180
+ Run at most three rounds: critique → fix the top three → re-inspect → critique. Stop early when a round
181
+ finds no problem a stranger would notice. If round three still scores under 7.5, say so plainly in
182
+ your report, with the remaining problems listed; do not round up.