@mthanh/vespercli 2.2.0 → 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 +6 -3
  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,1078 @@
1
+ [
2
+ {
3
+ "id": "name-as-monument",
4
+ "name": "The name as a monument",
5
+ "sectors": [
6
+ "agency",
7
+ "studio-portfolio",
8
+ "personal-portfolio",
9
+ "hospitality",
10
+ "restaurant",
11
+ "music",
12
+ "culture",
13
+ "fashion",
14
+ "event",
15
+ "architecture",
16
+ "real-estate",
17
+ "physical-product",
18
+ "consumer-app",
19
+ "other"
20
+ ],
21
+ "tones": [
22
+ "bold",
23
+ "editorial",
24
+ "luxury"
25
+ ],
26
+ "needs": [],
27
+ "idea": "The name is the headline. Set it so large that it becomes architecture: as wide as the viewport, cropped by an edge, or stacked to fill the screen. Nothing else on the first screen competes; the description of what this is drops to a single small sentence. The idea comes from treating the name's letters as material. Ask what the subject can do to its own name: a photograph of the work sits inside a counter or replaces a letter, the name repeats down the page like a reel, the letters are split to opposite corners and the page happens between them. In the study this was the single most common device among sites scoring 7.5 or more.",
28
+ "composition": "First screen: the wordmark spans 88–100% of the viewport width (font-size 16–24vw, set with a clamp so it never wraps), anchored either to the bottom edge with its descenders nearly touching it, or dead centre with everything else pushed to the corners. One line of supporting text at 16–20px sits in a corner on a shared margin; navigation is three or four words in the opposite corner. After the hero the page is deliberately small and calm: a narrow text column or a simple two-column grid, so the contrast with the monument holds. The name returns once more at full width as the footer, in the inverse colours. Margins are tight (20–32px) so the type reaches the edges. Two type sizes do nearly all the work: the monument and a small text size, with one mid size for section headings.",
29
+ "typography": "One family. The display cut must survive enormous sizes: tight tracking (-0.04 to -0.07em), leading 0.8–0.9, optical kerning on. Section headings are modest (28–40px) on purpose.",
30
+ "typeClasses": [
31
+ "grotesk-tight",
32
+ "condensed-heavy",
33
+ "extended-heavy",
34
+ "heavy-black",
35
+ "serif-display"
36
+ ],
37
+ "colour": "Two values carry the page (ground and ink). The accent, if used at all, appears on one thing only: the single action or the inset image frame. The footer inverts ground and ink.",
38
+ "paletteTags": [
39
+ "light-neutral",
40
+ "dark-neutral",
41
+ "two-tone",
42
+ "mono-accent"
43
+ ],
44
+ "imagery": "Few images, used as inserts in the typography rather than as illustrations beside it: one photograph inside or behind the name (a 4:5 or 1:1 frame replacing a letter, or tucked between two words), then a short run of large full-width or half-width photographs further down. Square corners. No collage of small thumbnails.",
45
+ "sectionTags": [
46
+ "type-led",
47
+ "quiet",
48
+ "poster"
49
+ ],
50
+ "motion": "scaling-wordmark",
51
+ "richness": "Scale. The size of the name against the smallness of everything else is the entire visual event, so protect both ends: do not shrink the name to make room, and do not let body text creep above 20px.",
52
+ "pitfalls": "A long name set small is just a logo. If the name has more than about 12 characters, stack it on two lines or crop it with the viewport edge; never drop below 12vw. Do not add a second big headline under the name. Do not decorate the letters.",
53
+ "seenIn": [
54
+ "aww-nothin",
55
+ "opl-kereliott",
56
+ "aww-paul-kalkbrenner",
57
+ "opl-nia-creative",
58
+ "aww-house-of-honey-1",
59
+ "aww-produx-design"
60
+ ],
61
+ "allow": []
62
+ },
63
+ {
64
+ "id": "sentence-as-layout",
65
+ "name": "The sentence is the layout",
66
+ "sectors": [
67
+ "agency",
68
+ "saas",
69
+ "ai-product",
70
+ "dev-tool",
71
+ "nonprofit",
72
+ "culture",
73
+ "education",
74
+ "physical-product",
75
+ "consumer-app",
76
+ "finance",
77
+ "health",
78
+ "event",
79
+ "other"
80
+ ],
81
+ "tones": [
82
+ "bold",
83
+ "editorial"
84
+ ],
85
+ "needs": [],
86
+ "idea": "One short sentence, set at poster scale, is the composition. The trick that makes it an idea rather than a big headline: something from the subject sits inside the sentence where a word would be. A strip of photograph fills the gap between two words; a small live fragment of the product replaces the noun; the object the sentence names is pictured at the size of a letter. Write the sentence first, find the word that can be shown instead of said, and put the showing in its place. The reader completes the sentence with their eyes.",
87
+ "composition": "The sentence is four to seven words and runs as one or two full-width lines at 9–13vw. Inline with the type, on the baseline, sits one media slot: a rounded-rectangle or square frame exactly one line-height tall and two to three ems wide, holding a photograph or a looping crop. Above and below the sentence the screen is empty except for a small navigation line and one supporting sentence set small, both on the same left margin. Later sections repeat the grammar at smaller scale: each is a short statement on the left six columns with its proof (image, figure, list) on the right, so the page reads as a series of sentences with evidence. Generous vertical space (160px or more) between sections.",
88
+ "typography": "Display weight with real presence (medium to bold), tracking -0.03 to -0.05em, leading 0.95–1.0 so two lines sit close. The inline frame aligns to cap height and baseline exactly; set it with em units so it scales with the type.",
89
+ "typeClasses": [
90
+ "grotesk-tight",
91
+ "serif-display",
92
+ "condensed-heavy",
93
+ "serif-light-large"
94
+ ],
95
+ "colour": "A calm ground with ink at full contrast. The only colour comes from the photograph inside the sentence; if the palette has an accent, use it once, on the action.",
96
+ "paletteTags": [
97
+ "two-tone",
98
+ "light-neutral",
99
+ "single-field",
100
+ "mono-accent"
101
+ ],
102
+ "imagery": "One strong, simple photograph that reads at small size (a face, an object, a texture, a horizon), cropped to a wide strip inside the sentence. The same image may open to full width in the next section, so the small slot feels like a window onto something larger.",
103
+ "sectionTags": [
104
+ "type-led",
105
+ "poster",
106
+ "quiet"
107
+ ],
108
+ "motion": "masked-headline",
109
+ "richness": "The collision of big type and one live image inside it. Because there is only one image on the first screen, choose it with care and give it perfect alignment to the letters.",
110
+ "pitfalls": "The sentence must be short enough for two lines on a phone, where the inline frame drops to its own line between the two halves. Do not style one word differently to fake the device. Do not use more than one slot per sentence.",
111
+ "seenIn": [
112
+ "aww-colonia-zacamil",
113
+ "aww-bleibtgleich26",
114
+ "opl-spatial",
115
+ "aww-coffeetech-r",
116
+ "opl-midnight-2"
117
+ ],
118
+ "allow": []
119
+ },
120
+ {
121
+ "id": "pinned-poster",
122
+ "name": "The pinned poster",
123
+ "sectors": [
124
+ "culture",
125
+ "music",
126
+ "event",
127
+ "fashion",
128
+ "personal-portfolio",
129
+ "studio-portfolio",
130
+ "physical-product",
131
+ "ecommerce",
132
+ "hospitality",
133
+ "consumer-app"
134
+ ],
135
+ "tones": [
136
+ "bold",
137
+ "editorial"
138
+ ],
139
+ "needs": [],
140
+ "idea": "Something stays put while everything else changes. A title holds its place across the viewport and the images beneath it swap; the name is split to two opposite corners and the page passes between the halves; a single frame stays centred while its contents change. Every scroll step is a new cover of the same magazine. The idea suits subjects that are a series (a book of portraits, a line-up, a collection, a set of projects): the fixed element says what the series is, the changing element shows its members.",
141
+ "composition": "A sticky layer holds the fixed element for the height of two to three viewports: usually the title at 10–14vw across the middle or top of the screen, or two words pinned to the top-left and bottom-right corners. Under it, a stack of full-height panels scrolls by, each a single large photograph (portrait 4:5, centred, 40–50% of the viewport wide) with one line of caption at the same small size everywhere. The title sits above the images in the stacking order and uses `mix-blend-mode: difference` or a solid colour that reads on every panel. When the pinned run ends, the page releases into ordinary flowing sections with a narrow measure. Build with `position: sticky`; never hijack the scroll.",
142
+ "typography": "The pinned title is the only large type on the page. Captions and body share one small size (15–17px). Tight tracking and solid weight so the title reads over photographs.",
143
+ "typeClasses": [
144
+ "grotesk-tight",
145
+ "condensed-heavy",
146
+ "heavy-black",
147
+ "extended-heavy"
148
+ ],
149
+ "colour": "One strong title colour against a pale or dark ground. Each panel may take its own flat ground colour sampled from its photograph.",
150
+ "paletteTags": [
151
+ "two-tone",
152
+ "photographic-neutral",
153
+ "single-field"
154
+ ],
155
+ "imagery": "A series of photographs with the same crop ratio and the same framing (all portraits, all objects, all rooms), so that swapping them reads as one image changing. Five to eight in the pinned run.",
156
+ "sectionTags": [
157
+ "photo-led",
158
+ "poster",
159
+ "type-led"
160
+ ],
161
+ "motion": "pinned-story",
162
+ "richness": "Repetition with change. The fixed title makes each new photograph feel like an event, so the photographs must be good and consistent.",
163
+ "pitfalls": "If the title is not legible over every panel, the idea fails: test each one. Keep the pinned run under six viewports or it feels like a trap. On a phone the title shrinks to 16–18vw and stays pinned at the top; panels become full-width. A pin longer than three screens, or one where the screens under it are nearly empty, read in blind tests as a stuck page. Every screen under the pin needs its own content, and nothing may pass over the pinned words.",
164
+ "seenIn": [
165
+ "opl-city-of-angels",
166
+ "aww-normal-is-boring",
167
+ "aww-glitch-grit",
168
+ "aww-revelatio-studio"
169
+ ],
170
+ "allow": [],
171
+ "needsPictures": true
172
+ },
173
+ {
174
+ "id": "colour-chapters",
175
+ "name": "Colour chapters",
176
+ "sectors": [
177
+ "agency",
178
+ "music",
179
+ "event",
180
+ "education",
181
+ "nonprofit",
182
+ "saas",
183
+ "consumer-app",
184
+ "culture",
185
+ "physical-product",
186
+ "health",
187
+ "finance",
188
+ "ai-product"
189
+ ],
190
+ "tones": [
191
+ "bold",
192
+ "playful"
193
+ ],
194
+ "needs": [],
195
+ "idea": "Every section is a chapter with its own flat colour, floor to ceiling. The page reads like a set of posters hung in a row, held together by one typeface and one grid. The colours are not decoration: they come from the subject (the brand's packaging, the artist's record sleeves, the product's own colour ways, the categories of the content) and each chapter's colour means that chapter. Decide the sequence like a designer orders a book: a strong opener, a quiet second, a surprise in the middle, a dark or very light closer.",
196
+ "composition": "Sections are full-bleed fields, each at least 90svh tall, butted directly against each other with no gap and no divider. Inside every field the same 12-column grid and the same margins apply, and each field holds one thing: a huge heading (8–12vw) with a small paragraph, or one photograph with a caption, or one list. Text colour is chosen per field for strong contrast (ink or paper, never grey). Headings start on the same left edge in every chapter, so the eye feels the system as colours change. The navigation and the footer take the colours of the first and last chapter.",
197
+ "typography": "One typeface in two weights. Headings very large and tight; body 18–20px. Because colour is loud, the type stays plain: no italics, no second face.",
198
+ "typeClasses": [
199
+ "grotesk-tight",
200
+ "heavy-black",
201
+ "geometric",
202
+ "rounded-friendly"
203
+ ],
204
+ "colour": "Four to six flat fields used at full strength, one per section, each with its assigned text colour. No tints, no gradients between them: the hard edge where two fields meet is the look.",
205
+ "paletteTags": [
206
+ "flat-loud",
207
+ "pastel-fields"
208
+ ],
209
+ "imagery": "Sparing. One photograph or object per chapter at most, either cut out and sitting directly on the colour, or a plain rectangle with generous colour around it. Photographs should be simple enough not to fight the field.",
210
+ "sectionTags": [
211
+ "colour-field",
212
+ "type-led",
213
+ "poster"
214
+ ],
215
+ "motion": "colour-on-scroll",
216
+ "richness": "Colour at scale. A whole screen of one saturated colour is rich on its own, so a chapter needs few elements; it still needs its content at full size, because a coloured screen with one small line on it reads as empty.",
217
+ "pitfalls": "Check contrast on every field with the palette's assigned ink. Do not put cards on the fields. Do not use more than six colours. Two neighbouring fields should differ clearly in lightness as well as hue.",
218
+ "seenIn": [
219
+ "aww-warm-fuzzy",
220
+ "aww-paul-kalkbrenner",
221
+ "opl-anidachi",
222
+ "aww-aardvark-book-club",
223
+ "aww-ai-in-design-report-2026"
224
+ ],
225
+ "allow": []
226
+ },
227
+ {
228
+ "id": "place-carries-it",
229
+ "name": "The place carries it",
230
+ "sectors": [
231
+ "hospitality",
232
+ "restaurant",
233
+ "real-estate",
234
+ "architecture",
235
+ "event",
236
+ "health",
237
+ "culture",
238
+ "nonprofit"
239
+ ],
240
+ "tones": [
241
+ "quiet",
242
+ "luxury",
243
+ "warm"
244
+ ],
245
+ "needs": [],
246
+ "idea": "For a place, the photograph is the argument. One full-bleed image of where you would be standing fills the first screen, and the design steps back: the name sits along the bottom edge like a film title, or small in a corner, and nothing else interrupts the view. The page that follows keeps that restraint: few words, large pictures, long pauses. The designer's work here is editing: choosing the one frame that makes someone want to be there, and then not covering it.",
247
+ "composition": "First screen: a single photograph at 100vw by 100svh, focal point kept clear of text. The name is set either very large (14–20vw) hugging the bottom edge with 16–24px of margin, or small (20–28px) top-left with a one-line description bottom-left. Navigation is two to four words in the top corners in the same small size. If text sits on the image, a soft neutral scrim under the text area only. Below, sections alternate between a short centred or left-set paragraph in a narrow column (max 52ch) with wide empty margins, and photographs shown large: one full-bleed, then a pair at different sizes, then one portrait offset to the right. Practical information (hours, address, rates, booking) is gathered once near the end in a plain two-column block.",
248
+ "typography": "A face with some grace for the name; small, calm, well-spaced text everywhere else. Sentence case. Body 17–19px with leading around 1.55.",
249
+ "typeClasses": [
250
+ "serif-display",
251
+ "serif-light-large",
252
+ "condensed-heavy",
253
+ "grotesk-light"
254
+ ],
255
+ "colour": "Neutral paper or deep neutral ground chosen to flatter the photographs; text ink drawn from the darkest tone in the imagery. Colour lives in the pictures.",
256
+ "paletteTags": [
257
+ "photographic-neutral",
258
+ "dark-neutral",
259
+ "earth"
260
+ ],
261
+ "imagery": "The dealt set is the palette. Choose four to six photographs with the same light. The hero image must have a calm area for the name. Full-bleed or large with square corners; never thumbnails, never a carousel of ten.",
262
+ "photoTreatment": "Leave photographs ungraded. If text overlays one, darken only the area behind the text with a neutral scrim.",
263
+ "sectionTags": [
264
+ "photo-led",
265
+ "quiet"
266
+ ],
267
+ "motion": "slow-crossfade",
268
+ "richness": "The photographs, at full size, uninterrupted. Empty paper around short text makes the next image land harder.",
269
+ "pitfalls": "A weak hero photograph cannot be fixed by typography; pick again. Do not stack a headline, a paragraph and two buttons on the image. Do not use a booking bar that covers the bottom of the view; one small action is enough.",
270
+ "seenIn": [
271
+ "aww-white-desert",
272
+ "opl-eagles-nest",
273
+ "aww-tengile-malamala-collection",
274
+ "aww-izanami",
275
+ "aww-seasats"
276
+ ],
277
+ "allow": [],
278
+ "needsPictures": true
279
+ },
280
+ {
281
+ "id": "page-is-the-object",
282
+ "name": "The page is the object",
283
+ "sectors": [
284
+ "restaurant",
285
+ "event",
286
+ "hospitality",
287
+ "culture",
288
+ "music",
289
+ "physical-product",
290
+ "ecommerce",
291
+ "nonprofit",
292
+ "education",
293
+ "personal-portfolio",
294
+ "consumer-app",
295
+ "other"
296
+ ],
297
+ "tones": [
298
+ "warm",
299
+ "playful",
300
+ "editorial"
301
+ ],
302
+ "needs": [],
303
+ "idea": "Find the printed or physical artefact that already exists in the subject's world and build the page as that thing. A wedding site is the invitation card. A restaurant is its menu. A conference is the ticket; a record is its sleeve; a shop is the receipt or the swing tag; an archive is a stack of tabbed folders; a course is the syllabus sheet. The artefact supplies everything a template would otherwise invent: its proportions, its typographic manners, its way of grouping information. Visitors recognise the object instantly, which is why these pages feel specific.",
304
+ "composition": "The first screen shows the artefact as a single filled panel (paper colour on a contrasting ground) centred or offset, with believable proportions: a card at 5:7, a ticket at about 2.2:1 with a notch cut by `clip-path`, a menu as a tall sheet. All primary content lives on it, set the way that object is set: centred and symmetrical for an invitation, in tidy aligned columns for a menu or ticket. The ground behind is a flat colour or one full-bleed photograph. As the page continues, each section is another piece of the same stationery: a second card, a tear-off stub, a folded panel, always filled shapes with real edges (straight, notched, scalloped, perforated by a dotted `border` of round dots at 4px or more), never outlined boxes. The footer is the back of the object.",
305
+ "typography": "Take the manners of the artefact: a bookish serif with small caps avoided, or a blunt condensed face for tickets and posters. Sizes stay within what print would use relative to the panel; the name is large on the panel, details are small and exact.",
306
+ "typeClasses": [
307
+ "serif-text",
308
+ "serif-display",
309
+ "slab",
310
+ "condensed-heavy",
311
+ "grotesk-tight"
312
+ ],
313
+ "colour": "Paper and ink plus the ground the paper sits on. Two or three flat colours in total, like a two-colour print job.",
314
+ "paletteTags": [
315
+ "two-tone",
316
+ "earth",
317
+ "light-neutral"
318
+ ],
319
+ "imagery": "Optional. One photograph behind the object, or small photographs placed on it like tipped-in plates. The object itself is the image.",
320
+ "sectionTags": [
321
+ "object-led",
322
+ "type-led",
323
+ "colour-field"
324
+ ],
325
+ "motion": "curtain-footer",
326
+ "richness": "Recognition. The shaped edges, the print-like alignment and the limited inks make a familiar object out of plain HTML.",
327
+ "pitfalls": "Choose an artefact that truly belongs to the subject, or it becomes costume. Shape the edges with fills and `clip-path`; an outlined rectangle with a thin border is not an object. Keep text sizes readable on a phone, where the object becomes full width with its shaped edge kept at top and bottom.",
328
+ "seenIn": [
329
+ "opl-sarah-matt-wedding",
330
+ "aww-mosbys-files",
331
+ "opl-the-deep-end",
332
+ "opl-weeksync",
333
+ "opl-le-petit-bleu",
334
+ "opl-archiv"
335
+ ],
336
+ "allow": []
337
+ },
338
+ {
339
+ "id": "one-motif",
340
+ "name": "One motif",
341
+ "sectors": [
342
+ "saas",
343
+ "finance",
344
+ "consumer-app",
345
+ "ai-product",
346
+ "dev-tool",
347
+ "health",
348
+ "physical-product",
349
+ "restaurant",
350
+ "education",
351
+ "nonprofit",
352
+ "other"
353
+ ],
354
+ "tones": [
355
+ "playful",
356
+ "technical",
357
+ "warm",
358
+ "bold"
359
+ ],
360
+ "needs": [],
361
+ "idea": "Take one shape from the subject and let it run the whole system. A drilling tool's octagonal cross-section becomes the buttons, the image masks and the loader. A two-account money app becomes two circles that recur as icon, inline dot and section colour. A café's striped awning becomes every band on the page. Look at the product, the logo, the object or the word in the headline and find the simplest geometry in it (a circle, an arc, a chamfer, a stripe, a notch, a ring). Then use only that shape, at three or four very different scales, everywhere a designer would normally reach for a generic rounded rectangle.",
362
+ "composition": "Hero: the motif appears once at enormous scale as a flat filled shape, cropped by the viewport (a circle 120vh across entering from the right, a chamfered block filling the lower half), with a short headline at 6–8vw and one supporting sentence set on the remaining ground, left-aligned on a shared margin. Through the page the motif returns as: the mask for every photograph (via `clip-path` or `border-radius` made from the same geometry), the shape of the primary button, the bullet beside list items at text size, and one full-width band that separates the two halves of the page. Sections use simple two-column or single-column layouts so the shape is the only thing with character.",
363
+ "typography": "A clean geometric or grotesk face that echoes the shape (round bowls for circles, squared terminals for chamfers). Medium weight; headings 6–8vw in the hero and 3–4vw after.",
364
+ "typeClasses": [
365
+ "geometric",
366
+ "grotesk-tight",
367
+ "rounded-friendly"
368
+ ],
369
+ "colour": "The motif carries the accent colour at large scale, flat. Everything else is ground and ink. A second motif colour is allowed only if the subject has a real pair (two accounts, two modes).",
370
+ "paletteTags": [
371
+ "mono-accent",
372
+ "two-tone",
373
+ "pastel-fields"
374
+ ],
375
+ "imagery": "Photographs appear inside the motif's shape. If there is product interface to show, it sits on a flat colour stage shaped by the motif. Draw the shape with CSS or a simple inline SVG path; do not draw illustrations.",
376
+ "sectionTags": [
377
+ "colour-field",
378
+ "object-led",
379
+ "type-led"
380
+ ],
381
+ "motion": "shutter-image",
382
+ "richness": "One shape at many sizes. The giant cropped shape gives the hero mass and colour without a single image.",
383
+ "pitfalls": "One motif means one. A circle here, a hexagon there and a blob behind is the generated look this replaces. The motif must come from the subject and you must be able to say from where in one clause.",
384
+ "seenIn": [
385
+ "aww-sstr-friction-reduction",
386
+ "opl-tara",
387
+ "opl-boaxt",
388
+ "opl-midnight-2",
389
+ "opl-superlocal-2026",
390
+ "opl-billow"
391
+ ],
392
+ "allow": []
393
+ },
394
+ {
395
+ "id": "product-performs",
396
+ "name": "The product performs",
397
+ "sectors": [
398
+ "saas",
399
+ "dev-tool",
400
+ "ai-product",
401
+ "consumer-app",
402
+ "finance"
403
+ ],
404
+ "tones": [
405
+ "technical",
406
+ "quiet"
407
+ ],
408
+ "needs": [],
409
+ "idea": "Software is most convincing when it is doing its job in front of you. Instead of describing features, put small, true, working fragments of the product on the page: the actual control, with real content, responding to the pointer. A colour picker's loupe reads the page's own background and prints its value. A list tool lets you tick an item right there. A type-scale plugin sets the page's own headings. Find the one interaction that is the product and make the hero that interaction; then show each further capability as another fragment at real size. No dashboard collage, no browser frame, no screenshots shrunk until unreadable.",
410
+ "composition": "Hero: a short plain headline (4–6vw, left-aligned, upper-left third) and one sentence; the rest of the first screen is the main fragment at actual interface size, sitting directly on the page or on one flat stage colour, large enough to read every label. The fragment is built in HTML and works. Below, capabilities are a single-column sequence, each a row of two parts on a 5/7 split: a two-line statement on one side and the relevant fragment on the other, with the fragments varying in size and shape so the column never becomes a zigzag of equal blocks. Fragments are cropped pieces of interface (a menu, a row, a control, a panel edge), not whole windows. One section pins a fragment while three short statements change it.",
411
+ "typography": "The marketing type matches the product's interface type so the fragments and the page feel like one thing. Headline modest; interface text at its true size (13–15px) inside fragments.",
412
+ "typeClasses": [
413
+ "grotesk-tight",
414
+ "grotesk-light",
415
+ "geometric"
416
+ ],
417
+ "colour": "Neutral ground. The product's own interface colours provide the colour. At most one flat stage colour behind fragments.",
418
+ "paletteTags": [
419
+ "light-neutral",
420
+ "dark-neutral",
421
+ "mono-accent"
422
+ ],
423
+ "imagery": "The interface fragments are the main imagery: build them carefully with real labels, real numbers and sensible states (one hovered, one selected). Around them, two or three real pictures of the customer's world (found with scripts/assets.mjs), never stock of people at laptops.",
424
+ "sectionTags": [
425
+ "ui-led",
426
+ "quiet"
427
+ ],
428
+ "motion": "pinned-story",
429
+ "richness": "Fidelity. A fragment with believable content and a real hover state is more interesting than any illustration. Spend the effort there.",
430
+ "pitfalls": "A fake interface made of grey bars and circles is the worst outcome; if you cannot build a believable fragment, change direction. Mark each fragment's root element with the attribute data-ui: inside it the product's own conventions apply (1px control borders, small radii, a shadow on its open menu) and the inspector leaves them alone; outside it the house rules hold as usual. data-ui is for cropped fragments only, never for a page wrapper. Do not put the fragment in a browser or laptop frame.",
431
+ "seenIn": [
432
+ "opl-dabbit",
433
+ "opl-rows",
434
+ "opl-typewave",
435
+ "opl-shelf",
436
+ "opl-uni",
437
+ "opl-kontu"
438
+ ],
439
+ "allow": []
440
+ },
441
+ {
442
+ "id": "quiet-instrument",
443
+ "name": "The quiet instrument",
444
+ "sectors": [
445
+ "saas",
446
+ "dev-tool",
447
+ "ai-product",
448
+ "personal-portfolio",
449
+ "consumer-app",
450
+ "finance",
451
+ "other"
452
+ ],
453
+ "tones": [
454
+ "quiet",
455
+ "technical"
456
+ ],
457
+ "needs": [],
458
+ "idea": "Radical understatement. Where every competitor shouts, this page almost whispers: a headline barely larger than body text, a narrow column, small exact demonstrations, and a great deal of untouched space. The restraint is the claim. It says the thing is simple, finished and sure of itself. This only works when it is carried through completely; one loud element breaks it. In the study, a tool for simple lists sold itself with a 27px headline and 12–14px copy and was one of the most confident pages in the set.",
459
+ "composition": "A single column 440–560px wide, placed left of centre (starting at about 22% of the viewport width) or dead centre, running the whole page. The headline is the one large thing on the first screen: two lines at display size (5–7vw), medium weight, starting on the column's left edge and allowed to run wider than the column. The supporting paragraph follows at body size (17–19px) in the full ink. One small primary button and one text link. Below, each point is a short paragraph followed by a compact demonstration or image no wider than the column. Sections are separated only by space (96–140px). Nothing spans the full width until the footer, which is a single quiet line. The first screen is mostly empty and that emptiness is composed: the column's top edge sits at about 30% of the viewport height.",
460
+ "typography": "One family, two weights. A display size for the headline (5–7vw), one heading size for section titles (about 32–40px), body at 17–19px, a small size for captions (14–15px). Leading 1.5 for text. Letter-spacing near zero. The typeface must be handsome at small sizes.",
461
+ "typeClasses": [
462
+ "grotesk-light",
463
+ "serif-text",
464
+ "geometric"
465
+ ],
466
+ "colour": "Paper and two inks (full and soft). One accent used on exactly one element per screen.",
467
+ "paletteTags": [
468
+ "light-neutral",
469
+ "mono-accent"
470
+ ],
471
+ "imagery": "Precise rather than loud: cropped interface details at true size, and real photographs of the customer's world held to the column width, each doing one job. One short looping clip can sit at column width too. Never a large stock hero image.",
472
+ "sectionTags": [
473
+ "quiet",
474
+ "ui-led",
475
+ "type-led"
476
+ ],
477
+ "motion": "stillness",
478
+ "richness": "Precision. With so little on the page, alignment, spacing and the exact size relationships are the design. Every element shares the column's left edge.",
479
+ "pitfalls": "This is the one direction where a small headline is right; the inspector will not object, but do not mix it with a large display line. Emptiness must look decided: keep the column edges exact and the vertical rhythm even. Not suitable when the subject needs emotion or photography to sell. Quiet is not thin: the column must still deliver every piece of content the brief asks for, in full, at 16px or more in the full ink. In blind tests the quiet version lost every time it was quiet everywhere: a small headline beside an empty panel read as unfinished. Quiet means few things, not small things: the headline and the demonstration are large, and every screen holds content.",
480
+ "seenIn": [
481
+ "opl-rows",
482
+ "opl-compile",
483
+ "opl-plastic",
484
+ "opl-bueno-fyi",
485
+ "aww-gil-huybrecht"
486
+ ],
487
+ "allow": []
488
+ },
489
+ {
490
+ "id": "hero-object",
491
+ "name": "The object, large",
492
+ "sectors": [
493
+ "physical-product",
494
+ "ecommerce",
495
+ "consumer-app",
496
+ "fashion",
497
+ "finance",
498
+ "health",
499
+ "restaurant",
500
+ "music"
501
+ ],
502
+ "tones": [
503
+ "bold",
504
+ "luxury",
505
+ "quiet"
506
+ ],
507
+ "needs": [
508
+ "product-photo"
509
+ ],
510
+ "idea": "Show the thing, bigger than seems reasonable. One photographed object fills the first screen, scaled until the viewport crops it, with the text small and tucked beside or behind it. The crop is the idea: a record whose edge leaves the top-right corner, a bottle whose shoulder runs off the bottom, a chair seen so close you read its grain. Being that close reads as confidence in the object. Everything else on the page serves it: details as tight close-ups, facts as short lines, one way to buy.",
511
+ "composition": "First screen: the object occupies 55–75% of the viewport and breaks at least one edge. It sits on a flat field (ground colour or one bold colour), never in a box. The headline is short and either very large and partly hidden behind the object (10–13vw, the object overlapping two or three letters) or small (28–36px) in the opposite corner with a one-line description. No navigation bar beyond a wordmark and one action. Following sections: a row of three or four close-up details at different crop ratios (not equal tiles), a single wide photograph of the object in use, a plain list of facts set large (materials, size, price) aligned to one edge, then the purchase action. The object returns once at the end from a different angle.",
512
+ "typography": "Either very large and structural or very small and precise; pick one for the headline and hold it. Facts are set in the text face at 22–28px, not in a table.",
513
+ "typeClasses": [
514
+ "grotesk-light",
515
+ "grotesk-tight",
516
+ "extended-heavy",
517
+ "serif-light-large"
518
+ ],
519
+ "colour": "A flat field chosen to make the object's own colour sing (its complement, or a tone darker than its shadow side). One field for the whole page, or a second for the facts section.",
520
+ "paletteTags": [
521
+ "single-field",
522
+ "light-neutral",
523
+ "pastel-fields",
524
+ "dark-neutral"
525
+ ],
526
+ "imagery": "Use the product's own photographs if they exist. Otherwise use a still-life from the dealt set as a stand-in and say so. Prefer images with a plain background; use `mix-blend-mode: multiply` on light fields so a white studio background disappears into the page colour.",
527
+ "photoTreatment": "Scale the main image well past its container (`width: 120–160%`) and let `overflow: hidden` on the section do the cropping.",
528
+ "sectionTags": [
529
+ "object-led",
530
+ "photo-led",
531
+ "colour-field"
532
+ ],
533
+ "motion": "shutter-image",
534
+ "richness": "The object's surface at close range, and the tension of the crop.",
535
+ "pitfalls": "A small centred product shot with space all round is a catalogue thumbnail, not this direction. If the image has a busy background it cannot sit on a field; crop tighter or change image. Keep text off the object's focal area.",
536
+ "seenIn": [
537
+ "opl-when-you-wish-upon-a-starboy",
538
+ "opl-plastic",
539
+ "opl-archiv",
540
+ "aww-moto-finance",
541
+ "aww-the-watch",
542
+ "opl-aevion"
543
+ ],
544
+ "allow": []
545
+ },
546
+ {
547
+ "id": "specimen-catalogue",
548
+ "name": "The specimen catalogue",
549
+ "sectors": [
550
+ "ecommerce",
551
+ "physical-product",
552
+ "restaurant",
553
+ "fashion",
554
+ "culture",
555
+ "education",
556
+ "health",
557
+ "other"
558
+ ],
559
+ "tones": [
560
+ "playful",
561
+ "warm",
562
+ "editorial"
563
+ ],
564
+ "needs": [
565
+ "product-photo"
566
+ ],
567
+ "idea": "Present what is on offer the way a field guide presents birds: each item alone on a flat colour, same scale, same angle, named plainly. A bakery's pastries become specimens and the specimens become the menu. A furniture maker's chairs each get their own colour tile. The format flatters ordinary objects because it treats each as worth looking at, and it replaces both the feature grid and the product-card grid with something that has a point of view.",
568
+ "composition": "Hero: a left-aligned statement of what this is (5–7vw, upper-left) beside or above a tight cluster of four to seven specimen tiles of different sizes arranged as a loose mosaic that runs off the right edge. Each tile is a flat colour square or 4:5 rectangle with one photograph centred on it, no border, 8–12px gaps. The main section is the catalogue itself: a grid of tiles in which each item has its name and one fact set beneath the tile in the text face, aligned left to the tile edge. Tile colours rotate through three or four fields from the palette. One tile in every six or seven is double size. Supporting sections (about, how to order) are plain text on the ground colour, kept short.",
569
+ "typography": "Friendly and plain. Item names at 18–22px in medium weight, facts beneath in the soft ink. One big statement in the hero; no other display type.",
570
+ "typeClasses": [
571
+ "grotesk-tight",
572
+ "serif-text",
573
+ "slab",
574
+ "rounded-friendly"
575
+ ],
576
+ "colour": "The tiles are the colour: three or four flat fields from the palette, repeated in a steady rotation. Ground stays neutral.",
577
+ "paletteTags": [
578
+ "pastel-fields",
579
+ "flat-loud",
580
+ "light-neutral"
581
+ ],
582
+ "imagery": "Photographs of single items on plain backgrounds, all cropped to sit at the same apparent size within their tile. On light tiles, `mix-blend-mode: multiply` removes white studio backgrounds. If the subject's own item photographs are missing, use the dealt set and say so.",
583
+ "sectionTags": [
584
+ "object-led",
585
+ "colour-field",
586
+ "photo-led"
587
+ ],
588
+ "motion": "drag-row",
589
+ "richness": "Rhythm of colour tiles and the pleasure of comparing like with like.",
590
+ "pitfalls": "It needs at least six items that can be shown as objects; with three it is a feature row. Keep labels outside the tiles. No shadows under the objects, no hover lift.",
591
+ "seenIn": [
592
+ "aww-noho",
593
+ "opl-madie",
594
+ "opl-humanoid-index",
595
+ "opl-smallbits",
596
+ "aww-butter"
597
+ ],
598
+ "allow": []
599
+ },
600
+ {
601
+ "id": "borrowed-category",
602
+ "name": "Dressed as something else",
603
+ "sectors": [
604
+ "finance",
605
+ "saas",
606
+ "consumer-app",
607
+ "physical-product",
608
+ "health",
609
+ "dev-tool",
610
+ "ai-product",
611
+ "education",
612
+ "nonprofit",
613
+ "real-estate",
614
+ "other"
615
+ ],
616
+ "tones": [
617
+ "bold",
618
+ "playful",
619
+ "luxury"
620
+ ],
621
+ "needs": [],
622
+ "idea": "Art-direct the subject as if it belonged to a different, more vivid category. A money app is sold like a streetwear drop. An industrial roaster is presented like a design object. Drilling hardware gets the calm of a watch brand. A parcel-locker service becomes a fairground of stickers. Choose the borrowed category by asking what feeling the audience is missing from this kind of product (swagger, calm, glamour, play) and which category owns that feeling. Then take its manners completely: its type, its pacing, its way of photographing things. The contrast between dull subject and vivid dress is what people remember.",
623
+ "composition": "Depends on the borrowed category, so decide it explicitly and write it in your notes. Fashion drop: one shouted condensed headline across the full width, a single cropped image under it, then product facts as a blunt list. Watch or perfume: a centred object on a dark field, a small serif name, very few words, long vertical pauses. Poster or zine: flat colour blocks, heavy type, tilted cut-out images. Museum: one item per screen on a plinth-like band of colour with a short label beside it. Whichever you choose, the page structure stays simple (four to six sections) and every section uses the borrowed manners, including pricing and the footer.",
624
+ "typography": "The borrowed category's type, fully committed: condensed and loud, or refined and small. No halfway.",
625
+ "typeClasses": [
626
+ "condensed-heavy",
627
+ "serif-display",
628
+ "extended-heavy",
629
+ "heavy-black"
630
+ ],
631
+ "colour": "The borrowed category's palette, which will be unlike the subject's sector norm. That mismatch is intended.",
632
+ "paletteTags": [
633
+ "flat-loud",
634
+ "two-tone",
635
+ "dark-neutral",
636
+ "single-field"
637
+ ],
638
+ "imagery": "Photograph the subject the way the borrowed category would be photographed. With the dealt set, choose images for attitude, not literal relevance, and crop them hard.",
639
+ "sectionTags": [
640
+ "poster",
641
+ "type-led",
642
+ "photo-led",
643
+ "colour-field"
644
+ ],
645
+ "motion": "edge-marquee",
646
+ "richness": "Attitude. The page has a recognisable voice from another world, applied to a subject nobody expected it for.",
647
+ "pitfalls": "Name the borrowed category in one word before you start, or the result is merely loud. The content must still be clear: what it is, what it costs, how to get it. Avoid borrowing from 'tech startup', which is the default you are escaping.",
648
+ "seenIn": [
649
+ "opl-uglycash",
650
+ "aww-coffeetech-r",
651
+ "aww-sstr-friction-reduction",
652
+ "opl-locker-land",
653
+ "aww-moto-finance",
654
+ "aww-vero-new-york"
655
+ ],
656
+ "allow": []
657
+ },
658
+ {
659
+ "id": "contact-sheet",
660
+ "name": "The contact sheet",
661
+ "sectors": [
662
+ "personal-portfolio",
663
+ "studio-portfolio",
664
+ "agency",
665
+ "fashion",
666
+ "culture",
667
+ "architecture",
668
+ "music",
669
+ "ecommerce"
670
+ ],
671
+ "tones": [
672
+ "quiet",
673
+ "technical",
674
+ "editorial"
675
+ ],
676
+ "needs": [],
677
+ "idea": "Show everything at once, small, in order. The work is laid out like a photographer's contact sheet or an archive drawer: dozens of small frames in strict rows, with all text set at one small size. Nothing is featured, which is the point: the volume and consistency of the body of work is the statement, and the visitor does the choosing. It suits people and studios whose strength is range and output.",
678
+ "composition": "The name, or one sentence about the work, sits at display size (6–9vw) across the top of the first screen, and the sheet begins directly under it, still inside the first screen. The first screen opens with three or four short blocks of small text across the top on a 12-column grid (who, what, where to reach them), all at 14–16px, and immediately below, the sheet begins: rows of thumbnails at a fixed height (90–140px) with their natural widths, 6–10px gaps, each project forming a run of four to eight frames preceded by its title in the same small text. The sheet fills the whole page width edge to edge with 16–20px margins. Hovering a run dims the others and shows that project's one-line description in a fixed position. A single enlarged frame may interrupt the sheet once per screen at four times the size.",
679
+ "typography": "One face. The name at display size on the first screen; everything else at one text size and one small size; hierarchy below the name comes from position and from a single brighter ink for titles.",
680
+ "typeClasses": [
681
+ "grotesk-light",
682
+ "grotesk-tight"
683
+ ],
684
+ "colour": "Black or white ground, so the thumbnails are the only colour.",
685
+ "paletteTags": [
686
+ "dark-neutral",
687
+ "light-neutral"
688
+ ],
689
+ "imagery": "Many images: at least 24 frames to make a sheet. They can be project photographs from the dealt set cropped to mixed ratios, or page captures of the work. Square corners, no captions on the frames.",
690
+ "sectionTags": [
691
+ "dense",
692
+ "photo-led",
693
+ "quiet"
694
+ ],
695
+ "motion": "index-preview",
696
+ "richness": "Density and order. The mass of small images forms a texture; the strict rows keep it calm.",
697
+ "pitfalls": "With fewer than about 20 images it looks unfinished; choose another direction. Do not add a big headline above the sheet. On a phone the frames become two per row at a fixed height and each run scrolls sideways. Rows that run past the right edge read as clipped in screenshots and to most visitors: wrap the frames onto the next line, or end each row inside the grid.",
698
+ "seenIn": [
699
+ "aww-gil-huybrecht",
700
+ "opl-smallbits",
701
+ "opl-gunes-atakan-peksen",
702
+ "opl-proooof",
703
+ "aww-oimachi"
704
+ ],
705
+ "allow": [],
706
+ "needsPictures": true
707
+ },
708
+ {
709
+ "id": "editorial-report",
710
+ "name": "The printed annual",
711
+ "sectors": [
712
+ "culture",
713
+ "nonprofit",
714
+ "education",
715
+ "finance",
716
+ "saas",
717
+ "ai-product",
718
+ "health",
719
+ "agency",
720
+ "other"
721
+ ],
722
+ "tones": [
723
+ "editorial",
724
+ "bold"
725
+ ],
726
+ "needs": [],
727
+ "idea": "Lay the page out like a well-designed printed report or magazine feature: a masthead image, a tight oversized title, text held to a strict column line, and colour used in solid blocks the way a two-colour print job would. It gives weight and authority to subjects that are really about content: findings, a manifesto, a programme, a serious product. The reader should feel that someone edited this.",
728
+ "composition": "A fixed vertical axis at about 42% of the viewport width organises everything: headings begin on it, body columns hang from it, and the 0–42% zone holds small side notes, figures or stays empty. Masthead: a wide image band (photographic mosaic or a single crop) across the top 45% of the first screen; below it the title at 7–9vw starting on the axis, with a two-sentence standfirst at 20–24px. Sections alternate between text pages (title on the axis, body in one or two columns of 34–40ch to its right) and full-bleed colour pages carrying one large figure, quotation or image mosaic. Mosaics are gutterless: photographs and flat colour tiles butted together in a 4- or 6-cell grid. Page numbers, running heads and other print furniture are left out.",
729
+ "typography": "A tight heavy grotesk or a sharp serif for titles; an excellent text face for reading at 18–20px with leading near 1.5. Headings in sentence case, tracked tight.",
730
+ "typeClasses": [
731
+ "grotesk-tight",
732
+ "serif-display",
733
+ "serif-text"
734
+ ],
735
+ "colour": "Paper, ink and two or three solid block colours. A colour page is a whole section in one flat colour.",
736
+ "paletteTags": [
737
+ "flat-loud",
738
+ "two-tone",
739
+ "mono-accent"
740
+ ],
741
+ "imagery": "Photographs used as blocks in mosaics alongside flat colour tiles; mixed subjects are fine if cropped tight and converted to one treatment.",
742
+ "photoTreatment": "Give all photographs in a mosaic one treatment: greyscale via `filter: grayscale(1) contrast(1.05)`, or all full colour. Do not mix.",
743
+ "sectionTags": [
744
+ "type-led",
745
+ "colour-field",
746
+ "dense",
747
+ "poster"
748
+ ],
749
+ "motion": "masked-headline",
750
+ "richness": "The column line, the mosaics and whole pages of colour give structure and variety without ornaments.",
751
+ "pitfalls": "The axis must be exact and reused everywhere or it reads as random indentation. Keep paragraphs to a real reading measure. On a phone the axis collapses to the left margin and side notes move inline above their paragraph.",
752
+ "seenIn": [
753
+ "aww-ai-in-design-report-2026",
754
+ "opl-applied-imagination",
755
+ "opl-the-queue",
756
+ "opl-artem-taradash",
757
+ "opl-belgrade-architecture"
758
+ ],
759
+ "allow": []
760
+ },
761
+ {
762
+ "id": "loud-flat-poster",
763
+ "name": "Loud and flat",
764
+ "sectors": [
765
+ "agency",
766
+ "consumer-app",
767
+ "music",
768
+ "event",
769
+ "education",
770
+ "nonprofit",
771
+ "physical-product",
772
+ "saas",
773
+ "culture"
774
+ ],
775
+ "tones": [
776
+ "bold",
777
+ "playful"
778
+ ],
779
+ "needs": [],
780
+ "idea": "A page with the directness of a street poster: flat saturated colour, the heaviest type you can find, short blunt statements, and photographs cut out and stuck on. It is for subjects with a voice. Write the page as things a person would actually say out loud, and let the design say them at full volume. The craft is in the control beneath the noise: a strict grid, two or three colours, and exact alignment keep it from becoming a mess.",
781
+ "composition": "Hero: a statement of three to six words in ultra-heavy type at 11–15vw, filling the width, lines stacked tight (leading 0.85), flush left with 20–28px margins, on a flat saturated ground. One cut-out or hard-cropped photograph overlaps the type from the right or bottom, tilted 3–6 degrees. A single chunky button in the contrasting flat colour. Sections are solid panels in alternating palette colours: one is a row of short statements each on its own panel of unequal width; one is a single photograph bleeding off two edges with a caption block set over a solid colour bar; one is a large plain list. Panels meet edge to edge. Corners are square or use one large radius (28–40px) consistently.",
782
+ "typography": "The heaviest weight available, set tight, mostly lowercase or mostly uppercase (choose one). Body text is a plain grotesk at 18–20px.",
783
+ "typeClasses": [
784
+ "heavy-black",
785
+ "condensed-heavy",
786
+ "extended-heavy",
787
+ "rounded-friendly"
788
+ ],
789
+ "colour": "Three or four flat colours at full strength including black or white. Each panel is one colour; text on it is one other.",
790
+ "paletteTags": [
791
+ "flat-loud"
792
+ ],
793
+ "imagery": "Photographs with attitude, cropped hard or cut to a simple shape with `clip-path` (circle, arch, blunt polygon), slightly rotated, overlapping the type. Two or three on the page.",
794
+ "sectionTags": [
795
+ "poster",
796
+ "colour-field",
797
+ "type-led"
798
+ ],
799
+ "motion": "edge-marquee",
800
+ "richness": "Colour mass, type mass, and overlap.",
801
+ "pitfalls": "Headlines still obey the two-line rule: at 13vw that means very few words, which is correct for this voice. No outlines, no offset shadows, no sticker confetti. Rotation is for two or three images only, never for text blocks.",
802
+ "seenIn": [
803
+ "aww-warm-fuzzy",
804
+ "aww-aardvark-book-club",
805
+ "opl-uglycash",
806
+ "opl-depo-budget-app",
807
+ "aww-trevor-noah"
808
+ ],
809
+ "allow": []
810
+ },
811
+ {
812
+ "id": "split-stage",
813
+ "name": "The split stage",
814
+ "sectors": [
815
+ "restaurant",
816
+ "hospitality",
817
+ "personal-portfolio",
818
+ "physical-product",
819
+ "fashion",
820
+ "real-estate",
821
+ "health",
822
+ "culture",
823
+ "ecommerce",
824
+ "saas",
825
+ "consumer-app"
826
+ ],
827
+ "tones": [
828
+ "warm",
829
+ "quiet",
830
+ "editorial"
831
+ ],
832
+ "needs": [],
833
+ "idea": "Half the screen never moves. One side is a fixed photograph (or object, or product view) that stays in place for the whole visit; the other side is a calm scrolling column with everything you need to read. The fixed half keeps the feeling present while the reader gets on with the facts, like sitting in the room while reading the menu. As sections pass, the fixed image may quietly change to the one that matches.",
834
+ "composition": "Desktop: a two-column page, 50/50 or 45/55. One column is `position: sticky; top: 0; height: 100svh` and holds a single photograph filling it edge to edge, or the object centred on a flat field. The other column scrolls and holds all content in a single narrow measure (max 46ch) with comfortable padding (48–72px): name and one-line description first, then sections separated by generous space, then contact and footer. Headings in the scrolling column are modest (32–44px). The column grounds differ: photograph on one side, flat paper colour on the other, meeting at a clean vertical edge. On a phone the fixed half becomes a 60svh image at the top that stays sticky behind the first section, then releases.",
835
+ "typography": "A text-first setting: a readable serif or a calm sans at 17–19px, with one display size for the name. Left-aligned throughout.",
836
+ "typeClasses": [
837
+ "serif-text",
838
+ "serif-display",
839
+ "grotesk-light",
840
+ "slab"
841
+ ],
842
+ "colour": "The paper colour of the reading column is chosen against the photograph: a tone taken from its shadows or its lightest area. One ink, optionally one accent ink for links and the action.",
843
+ "paletteTags": [
844
+ "two-tone",
845
+ "earth",
846
+ "light-neutral",
847
+ "photographic-neutral"
848
+ ],
849
+ "imagery": "One excellent portrait-orientation photograph for the fixed half, plus three or four more that crossfade in as their sections arrive. Small inline photographs in the reading column are optional and should be few.",
850
+ "sectionTags": [
851
+ "quiet",
852
+ "photo-led",
853
+ "type-led"
854
+ ],
855
+ "motion": "slow-crossfade",
856
+ "richness": "A full-height photograph always in view, against a quiet, well-set column of text.",
857
+ "pitfalls": "The reading column must be genuinely well typeset, since it is half the page. Do not put cards or grids in it. Check that the fixed image crops well at short viewport heights. In blind tests the commonest complaint was monotony: several screens of the same split with only the text changing. Change what the reading half holds from section to section (a list, a large figure, a table, a full-colour panel, a drawing) and let at least one section break the split and run full width.",
858
+ "seenIn": [
859
+ "opl-le-petit-bleu",
860
+ "opl-rafael-derolez-2026",
861
+ "opl-flowjam-2",
862
+ "opl-devonshire"
863
+ ],
864
+ "allow": []
865
+ },
866
+ {
867
+ "id": "dense-tiles",
868
+ "name": "The well-kept board",
869
+ "sectors": [
870
+ "agency",
871
+ "studio-portfolio",
872
+ "saas",
873
+ "dev-tool",
874
+ "ai-product",
875
+ "culture",
876
+ "music",
877
+ "other"
878
+ ],
879
+ "tones": [
880
+ "technical",
881
+ "bold"
882
+ ],
883
+ "needs": [],
884
+ "idea": "The whole page is a board of tiles fitted edge to edge with narrow gaps, like a tidy desk seen from above. Each tile is one thing: the name, a statement, a photograph, a number, a link, a short list. There is no hero and no sequence of bands; the page is one continuous composition that the eye roams. It suits subjects with many small true things to show (a studio with work, writing, clients and news; a product with several distinct capabilities) and it replaces the generic bento by having real content in every tile and a strict system for sizes.",
885
+ "composition": "A 12-column grid with 8px gaps and 8–12px outer margins, filled completely, no empty cells. Tiles use only four sizes (for example 6×4, 6×2, 3×2, 3×4 in column × row units of about 90px). Every tile is a flat filled rectangle: ground colour one step from the page, or a palette colour, or a photograph covering it. One radius everywhere (0, or 6–10px). The first screen contains: a name tile (the name at display size, the largest type on the page) with the wordmark set large, a statement tile with the description at 28–40px, two or three image tiles and one action tile in the accent colour. Text inside tiles is top-left aligned with 20–24px padding and never centred. Below the first screen the board continues with the same sizes; the last row is the footer made of tiles.",
886
+ "typography": "One grotesk in two weights. Inside tiles: a large size for single statements, a small size for lists. No uppercase labels in tile corners.",
887
+ "typeClasses": [
888
+ "grotesk-tight",
889
+ "geometric"
890
+ ],
891
+ "colour": "Page ground, tile ground one step lighter or darker, and one or two palette colours on selected tiles. Photographs supply the rest.",
892
+ "paletteTags": [
893
+ "dark-neutral",
894
+ "light-neutral",
895
+ "mono-accent"
896
+ ],
897
+ "imagery": "Photographs fill whole tiles with `object-fit: cover`; choose images that crop well to both wide and tall tiles.",
898
+ "sectionTags": [
899
+ "dense",
900
+ "colour-field",
901
+ "photo-led"
902
+ ],
903
+ "motion": "stillness",
904
+ "richness": "The fit. A full board with consistent gaps and varied tile contents is satisfying in the way a packed suitcase is.",
905
+ "pitfalls": "Tiles are filled, never outlined, and never carry shadows. Do not put an icon and a two-line feature blurb in every tile; vary what tiles hold. Decide the phone layout as its own board: two columns, tiles re-ordered so the name and statement lead.",
906
+ "seenIn": [
907
+ "aww-oimachi",
908
+ "aww-aspen-search",
909
+ "aww-realevate",
910
+ "opl-justin-lerner"
911
+ ],
912
+ "allow": []
913
+ },
914
+ {
915
+ "id": "uneven-photographs",
916
+ "name": "Photographs at uneven sizes",
917
+ "sectors": [
918
+ "hospitality",
919
+ "real-estate",
920
+ "architecture",
921
+ "fashion",
922
+ "restaurant",
923
+ "culture",
924
+ "health",
925
+ "nonprofit",
926
+ "studio-portfolio",
927
+ "physical-product"
928
+ ],
929
+ "tones": [
930
+ "quiet",
931
+ "luxury",
932
+ "warm",
933
+ "editorial"
934
+ ],
935
+ "needs": [],
936
+ "idea": "A calm page where the pictures are placed like prints on a gallery wall: each at its own size and position, with text set small and light between them. Nothing lines up in the obvious way, yet everything sits on a grid you can feel. The unevenness is what makes it read as art-directed by a person: a small portrait far left, a wide landscape running off the right edge, a square that overlaps the next section. It lets photographs lead without ever becoming a slideshow.",
937
+ "composition": "A 12-column grid with wide margins (5–7vw). The hero is a single line of large light type (6–9vw) across the top third, and below it one photograph placed off-centre (columns 6–12, 16:10), its top edge overlapping the baseline zone of the headline by a few pixels of deliberate tension. Each following section places two or three photographs with different spans and vertical offsets: for example a 3:4 portrait in columns 2–5 starting 120px lower than a 16:10 landscape in columns 7–12; then a single small 1:1 in columns 9–11 beside a paragraph in columns 2–6. Paragraphs are short (max 40ch) and sit in the gaps. No two consecutive sections use the same arrangement. Vertical spacing is large and irregular on purpose (120–260px).",
938
+ "typography": "A light or regular weight at large size for the few headings; small, quiet text. Serif or a slender sans. Everything left-aligned to grid lines.",
939
+ "typeClasses": [
940
+ "serif-light-large",
941
+ "serif-text",
942
+ "grotesk-light"
943
+ ],
944
+ "colour": "A pale neutral ground with one deep ink taken from the photographs. No accent beyond a quiet link colour.",
945
+ "paletteTags": [
946
+ "light-neutral",
947
+ "earth",
948
+ "photographic-neutral"
949
+ ],
950
+ "imagery": "Six to nine photographs from one set, in a deliberate mix of ratios (3:4, 4:5, 1:1, 16:10, 21:9). Square corners. Captions, if any, are one short line under an image in the soft ink.",
951
+ "sectionTags": [
952
+ "photo-led",
953
+ "quiet"
954
+ ],
955
+ "motion": "shutter-image",
956
+ "richness": "Placement. The differing sizes and offsets create movement on a still page.",
957
+ "pitfalls": "Uneven is not random: every image edge lands on a column line, and offsets come from a small set of values. On a phone, keep the unevenness with alternating widths (100%, 72% left, 60% right) rather than stacking everything full width.",
958
+ "seenIn": [
959
+ "aww-tengile-malamala-collection",
960
+ "aww-sobha-privy-collection",
961
+ "aww-kononenko-architectural-bureau",
962
+ "opl-zara-webb"
963
+ ],
964
+ "allow": [],
965
+ "needsPictures": true
966
+ },
967
+ {
968
+ "id": "dark-room",
969
+ "name": "The dark room",
970
+ "sectors": [
971
+ "hospitality",
972
+ "restaurant",
973
+ "music",
974
+ "fashion",
975
+ "physical-product",
976
+ "finance",
977
+ "architecture",
978
+ "studio-portfolio",
979
+ "ai-product",
980
+ "personal-portfolio"
981
+ ],
982
+ "tones": [
983
+ "quiet",
984
+ "luxury"
985
+ ],
986
+ "needs": [],
987
+ "idea": "One dark field from top to bottom, and in it, lit things. Photographs and objects appear like exhibits in a dim gallery: each with space around it, each the brightest thing on its screen. Type is light, small and sparse. The darkness is not a theme switch; it is a room, and the page is a slow walk through it. It suits subjects sold on atmosphere and material: an evening restaurant, a metal card, a record, a house at dusk.",
988
+ "composition": "A single near-black or deep-toned ground runs the full page with no section bands. First screen: either the name at full width in a light weight along the bottom edge with one dim photograph above it, or one object or photograph centred at 40–50% of the viewport with a line of text beneath at 16–18px. Each later screen holds one or two lit items at a generous size (the main one 40–60% of the screen width) with its text set beside it at full reading size; the darkness frames the items, it does not replace content. Images vary in size but all share the same darkness at their edges so they sit in the ground without frames. Practical details come last in a simple two-column text block. The only solid light element on the page is the single primary action.",
989
+ "typography": "Light or regular weights; they glow on dark. Avoid heavy bold, which looks cheap on black. Headings 4–7vw at most; text 16–18px with leading 1.6 and a slightly lifted ink (not pure white).",
990
+ "typeClasses": [
991
+ "grotesk-light",
992
+ "serif-light-large",
993
+ "serif-display",
994
+ "extended-heavy"
995
+ ],
996
+ "colour": "A dark ground with a tint (blue-black, green-black, brown-black), a soft light ink, a dimmer ink for secondary text, and one warm or bright accent used once per screen at most.",
997
+ "paletteTags": [
998
+ "dark-neutral"
999
+ ],
1000
+ "imagery": "Low-key photographs: dark backgrounds, one light source, subjects emerging from shadow. Their dark edges should blend into the page ground.",
1001
+ "photoTreatment": "If a photograph's background is lighter than the page, darken the image slightly (`filter: brightness(0.85) contrast(1.05)`) rather than adding a frame.",
1002
+ "sectionTags": [
1003
+ "photo-led",
1004
+ "quiet",
1005
+ "object-led"
1006
+ ],
1007
+ "motion": "slow-crossfade",
1008
+ "richness": "Light against dark, and the slow pacing.",
1009
+ "pitfalls": "Grey text on black fails contrast quickly: check it. No glow effects, no neon accent, no coloured light blobs. A dark page with a bright busy photograph is not this direction; choose low-key images. Dark does not mean empty: every screen still carries its content at a readable size, and running text is a light ink at 7:1 or more, not a dim grey.",
1010
+ "seenIn": [
1011
+ "opl-kereliott",
1012
+ "aww-moto-finance",
1013
+ "aww-izanami",
1014
+ "aww-cipher",
1015
+ "opl-deeo-studio-2"
1016
+ ],
1017
+ "allow": [],
1018
+ "photoTone": "dark"
1019
+ },
1020
+ {
1021
+ "id": "type-only-statement",
1022
+ "name": "Type and nothing else",
1023
+ "sectors": [
1024
+ "saas",
1025
+ "dev-tool",
1026
+ "ai-product",
1027
+ "finance",
1028
+ "agency",
1029
+ "nonprofit",
1030
+ "education",
1031
+ "personal-portfolio",
1032
+ "event",
1033
+ "other"
1034
+ ],
1035
+ "tones": [
1036
+ "bold",
1037
+ "quiet",
1038
+ "editorial",
1039
+ "technical"
1040
+ ],
1041
+ "needs": [],
1042
+ "idea": "The first screen is made only of words, colour and space, good enough that nobody misses a picture there. Pictures arrive later, large and few, as relief from the type. This is the honest answer when a subject has nothing worth photographing: instead of inventing illustrations, set what you have to say as well as it can be set. The typography carries a point of view through scale (one enormous statement, everything else small), through measure (a narrow, bookish column or a full-width line), and through one committed colour.",
1043
+ "composition": "First screen: the statement, two lines at most, set at 9–14vw and occupying the full width with tight leading, positioned in the upper two-thirds. One supporting sentence at 20–24px sits bottom-left on the same margin and the single action sits bottom-right on the same baseline. No navigation bar; two or three links in a top corner. Sections that follow are typographic set pieces, each different: a list of five to eight capabilities set at 4–6vw one per line; a paragraph at 28–36px in a 28ch column pushed to the right half; a pair of large numerals with a sentence each; a single quotation filling a colour field. Each section uses a different horizontal position (left, right, full) so the page has movement without imagery.",
1044
+ "typography": "This direction lives or dies on the face and its settings. Display at tight tracking and leading; text sizes few and far apart (for example 15, 22, 34 and the display size). Use real typographic detail: proper quotes, balanced line breaks, hung punctuation where it helps.",
1045
+ "typeClasses": [
1046
+ "grotesk-tight",
1047
+ "serif-display",
1048
+ "heavy-black",
1049
+ "condensed-heavy",
1050
+ "serif-light-large"
1051
+ ],
1052
+ "colour": "Either one saturated ground for the whole page with a single ink, or paper and ink with one section inverted and one in the accent as a full field. Colour does the job images would have done.",
1053
+ "paletteTags": [
1054
+ "single-field",
1055
+ "two-tone",
1056
+ "flat-loud",
1057
+ "light-neutral",
1058
+ "dark-neutral"
1059
+ ],
1060
+ "imagery": "The first screen has no picture. Further down, real pictures of the subject's world (found with scripts/assets.mjs) arrive large and few: a full-bleed photograph between two type sections, a looping clip in one band, an archival image beside a list. Do not add icons, shapes, patterns or abstract graphics to compensate for anything.",
1061
+ "sectionTags": [
1062
+ "type-led",
1063
+ "poster",
1064
+ "colour-field"
1065
+ ],
1066
+ "motion": "masked-headline",
1067
+ "richness": "Scale contrast and colour mass. A capability list set at 5vw is an image in its own right.",
1068
+ "pitfalls": "Without pictures, weak copy has nowhere to hide: write real sentences. Vary the set pieces; four sections of big-heading-plus-paragraph is a text document, not a design. Keep all headings within two lines.",
1069
+ "seenIn": [
1070
+ "aww-bleibtgleich26",
1071
+ "opl-spatial",
1072
+ "aww-coffeetech-r",
1073
+ "opl-statements",
1074
+ "aww-nothin"
1075
+ ],
1076
+ "allow": []
1077
+ }
1078
+ ]