@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,529 @@
1
+ ---
2
+ name: design-taste-frontend
3
+ description: >-
4
+ tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of
5
+ 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions
6
+ (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict
7
+ no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use
8
+ this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site,
9
+ portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS, React,
10
+ Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated,
11
+ "AI-made", sloppy, or asks to make it look designed, premium, award-level or less like every other
12
+ site. Also for app screens: dashboards, admin and analytics views, settings, inboxes and other screens
13
+ people work in, with their own run and rules.
14
+ ---
15
+
16
+ # tasteskill v2
17
+
18
+ A page built by a model usually looks like the average of every page the model has seen: a centred
19
+ headline over three lines, a little label above it, a row of icon cards, a soft gradient, a few thin
20
+ rules and a monospace caption. Nothing in it is wrong and nothing in it was decided.
21
+
22
+ This skill replaces those defaults with decisions, in four ways:
23
+
24
+ 1. **A script deals the directions, you choose among them.** Asked to invent a look, a model picks
25
+ the category default every time. `scripts/draw.mjs` deals three of twenty researched directions;
26
+ you choose the one that carries the subject's idea, and the script then deals its type system,
27
+ palette, hero and section compositions from a library distilled from 247 real sites.
28
+ 2. **The idea comes from the subject.** In the study, what separated the best sites from the forgettable
29
+ ones was a concept taken from the thing itself, not the styling.
30
+ 3. **A house style with no ornaments,** measured in a real browser by `scripts/inspect.mjs`, so the
31
+ rules are checked rather than hoped for.
32
+ 4. **You look at what you made.** Screenshots at three widths, a juror's rubric, fix, look again.
33
+
34
+ One warning learned in testing. Taking the ornaments away is only half the job; a page that has lost its
35
+ labels, rules and cards and gained nothing in their place reads as thin, and blind jurors rightly prefer
36
+ a richer page with tells over an empty page without them. The other half is substance: type set
37
+ larger, whole fields of colour, real pictures of this subject's world (found or drawn), and every
38
+ section carrying its full content. The skill is built to give you that; do not trade it for restraint.
39
+
40
+ In the commands below `<skill>` is this skill's folder. Run them from the project's root, so the
41
+ working files land in `.taste-skill/` there. The scripts need Node 22+ and an installed Chrome, Edge
42
+ or Chromium, and install nothing. `assets.mjs` also needs network access; it uses no API keys.
43
+
44
+ ## Page or app screen
45
+
46
+ Decide first which of two kinds of work this is.
47
+
48
+ - **A page** is read and scrolled: a landing page, a marketing or product site, a portfolio, an
49
+ event, a restaurant, a one-pager. It follows **the run** below.
50
+ - **An app screen** is worked in: a dashboard, an admin or analytics view, settings, billing, an inbox
51
+ or queue to work through, a wallet, a list with filters, an editor or builder. It follows
52
+ **`references/app-screens.md`**: its own run, its own draw (`draw.mjs --app`), its own house rules
53
+ (quiet borders, small labels and repeated panels are normal there; gradients, glows, icons in tinted
54
+ squares, rainbow charts and invented vanity numbers are not) and `inspect.mjs --app`. Read that file
55
+ whole before you start; the page run below does not apply.
56
+
57
+ A product site that shows its app is a page; the interface fragments on it follow the app-screen
58
+ rules for their insides. Deal the product's app style once, in its own folder, with the page's colours
59
+ and type kept:
60
+
61
+ ```bash
62
+ node <skill>/scripts/draw.mjs --app --kind <kind> --brief "<the product>" --keep palette,type --out .taste-skill/app
63
+ ```
64
+
65
+ and build every fragment the page shows (the hero's live screen, a feature's crop, a chart) as a real
66
+ piece of that app: `assets/app.css` for its panels, tables and controls, `assets/charts.js` for its
67
+ charts, real data that adds up, one finding stated, cropped and scaled the way the page's blueprint
68
+ treats a picture. A fragment that looks like a working product is the strongest picture a software page
69
+ has; grey bars and lorem numbers are the weakest. When a request mixes both (a landing page and the
70
+ dashboard behind it), build each with its own run and one shared palette and typeface.
71
+
72
+ ## The run
73
+
74
+ Do these in order. Steps 1–5 take a few minutes and decide whether the page is any good.
75
+
76
+ ### 1. Read the brief and the project
77
+
78
+ Find out what is real: the subject, the audience, the one thing the page must get someone to do, the
79
+ stack, any existing brand (colours, fonts, logo), and above all **what imagery truly exists**: the
80
+ project's own photographs or product shots, a real interface that can be shown, an image generation
81
+ tool you can call, or nothing. Do not plan around pictures you do not have. Nothing of its own is
82
+ rarely nothing at all: the subject's city, street, materials and history are in open archives and
83
+ museums, free to use with a credit (step 6, `scripts/assets.mjs`).
84
+
85
+ If the request is vague, decide and state your reading in one line instead of asking. Ask only when a
86
+ missing fact blocks the work (for example, no product name).
87
+
88
+ Then **inventory the subject** in your notes: eight to twelve things that belong to this client and to
89
+ no competitor. Look for its name and what the name means; its address, door number, street and
90
+ neighbourhood, and what that place looks like (its tiles, signs, paint colours, typefaces on its shop
91
+ fronts, its light, its weather); the numbers in the brief (seats, rooms, minutes to the sea, the
92
+ price, the year); the constraint it lives with (only one batch a month, closed in winter, by
93
+ appointment); its materials and colours; its rituals and hours (the oven lit at five, the ferry at
94
+ seven); the printed things of its world (a timetable, a label, a ticket, a sign). This list is where
95
+ the idea comes from in step 4. In blind tests, the page that won each brief was built from an item on
96
+ such a list (the client's name and what it means, the street it stands in, the one constraint that
97
+ makes it what it is), and the pages that lost had a good composition with a category idea. The list
98
+ is also your picture search: each place, material and printed thing on it is a query for step 6.
99
+
100
+ ### 2. Write the argument
101
+
102
+ Before any design, list the page as claims with their proof, one line per section, the way
103
+ `references/copy.md` §1 shows. The claims decide which sections exist and in what order. Delete any
104
+ section that has no claim. This is how you avoid the stock sequence of hero, logos, three features,
105
+ testimonial, pricing, call to action.
106
+
107
+ ### 3. Draw the direction
108
+
109
+ ```bash
110
+ node <skill>/scripts/draw.mjs --sector <sector> --brief "<one line about the subject>" \
111
+ --sections <roles in the order of your argument> [--tone <tone>] [--have <assets>] [--keep palette,type] \
112
+ --options 3
113
+ ```
114
+
115
+ This deals three directions and prints a short summary of each. Hold each one against your inventory:
116
+ which way of composing can carry something only this client has? Choose that one, not the most
117
+ familiar, and write one line in your notes on why. In testing, a single random direction that did not
118
+ suit the subject was the commonest cause of a weak page. Then deal the full sheet:
119
+
120
+ ```bash
121
+ node <skill>/scripts/draw.mjs <the same arguments, without --options> --direction <chosen id>
122
+ ```
123
+
124
+ - `--sector`: `node <skill>/scripts/draw.mjs --list sectors`. Pick the closest.
125
+ - `--sections`: roles from `--list roles` (features, showcase, how-it-works, testimonial, proof, stats,
126
+ pricing, faq, cta, footer, intro, about, work, gallery, list, contact). The hero is implied.
127
+ - `--tone` (optional): quiet, bold, warm, technical, playful, luxury, editorial. Only pass it when the
128
+ brief clearly asks for one.
129
+ - `--have`: assets that really exist, comma-separated: `photography` (the project's own photographs of
130
+ the place, people or work), `product-photo` (photographs of the specific product, or an image tool
131
+ that can make them), `product-ui` (real screenshots), `illustration`, `video`. Leave it out if you
132
+ have none: the draw then avoids compositions that depend on them and the sheet says how to fill
133
+ picture slots honestly (software shows its own interface built in HTML; a product with no photographs
134
+ is drawn and set among real pictures of its world, never a fake product shot). Pictures you will
135
+ find in the open collections are not the project's own; leave them out of `--have`.
136
+ - `--keep palette,type`: when the brand already fixes colours or typefaces. The draw then deals only
137
+ the composition, and you map the brand's values onto the roles.
138
+
139
+ The command prints a **direction sheet**. It is the art direction for this build:
140
+
141
+ - **Adopt it.** Do not blend it with the layout you would have made anyway. If it feels unfamiliar,
142
+ good: the familiar layout is the one this skill exists to prevent.
143
+ - Redraw one slot (`--redraw hero | type | palette | photos | scenes | section:<role> | direction`) only for a
144
+ reason you can state: it contradicts a stated brand constraint, or needs an asset that does not
145
+ exist. Never redraw to get something more comfortable. Record every redraw in your report.
146
+ - When a dealt section cannot hold the real content (it compares three plans and there is one price;
147
+ it wants five quotations and there are none), do not bend the content to fit. List the others with
148
+ `--alternatives <role>`, pick the one whose assumptions match the content, and take it with
149
+ `--redraw section:<role>=<id>`.
150
+ - **Check the palette against the subject.** A dealt palette is a set of proportions (one ground, one
151
+ ink, one accent, fields) as much as a set of colours. If its colours fight the subject's own material
152
+ (candy pastels for a peat whisky, neon for a mountain hut), redraw the palette once; if the subject
153
+ has unmistakable colours of its own (its material, the paint of its street, the landscape outside
154
+ its windows), keep the dealt proportions and take the colours from the subject instead, and say so
155
+ in the report.
156
+ - Reprint it any time with `node <skill>/scripts/draw.mjs --show`. In a long session, re-read it before each
157
+ section you build.
158
+
159
+ ### 4. Find the idea
160
+
161
+ The direction is a way of composing. The idea is what makes the page belong to this subject and no
162
+ other. Write this sentence in your notes and do not start building until both blanks are filled from
163
+ the subject itself:
164
+
165
+ > On this page, **[something that belongs to the subject]** becomes **[the device the direction calls for]**.
166
+
167
+ Places to look for the first blank:
168
+
169
+ - **Its output.** What does the thing produce? Put the real output on the page as material. (A camera
170
+ that prints poems delivered its copy as paper slips.)
171
+ - **Its object or shape.** What does it physically look like, in cross-section, in silhouette?
172
+ Enlarge it, crop it, make it the frame or the one motif.
173
+ - **Its name.** Can the letters hold a photograph, stack into a wall, split to two corners?
174
+ - **Its place.** Is there one view that makes someone want to be there?
175
+ - **Its ritual.** Is there a sequence the page can perform as it scrolls?
176
+ - **Its artefact.** What printed thing already exists in its world: ticket, menu, label, receipt,
177
+ invitation, folder, manual?
178
+ - **Its opposite.** Which other category owns the feeling this one lacks?
179
+
180
+ Fill the first blank from your inventory (step 1), not from the category. **The competitor test:** put
181
+ the nearest real competitor in the sentence (the bakery two streets away, another oak furniture maker,
182
+ another hut on the same mountain). If the sentence still works, the idea belongs to the category: a
183
+ loaf of bread is every bakery; the seven doors of the street this one is named after are only this one.
184
+ "Clean and modern" is not an idea. The sites the study's panel scored lowest were the ones whose idea
185
+ was recorded as "none beyond the standard formula".
186
+
187
+ **One live thing.** Give the page one thing the visitor can do, or that is different for each visit,
188
+ made from the idea: pick a wood and see the chair in it; type your name and see it cut in the
189
+ foundry's letters; set the loan and read the real monthly figure; see whether the hut's stove is lit
190
+ right now and how long until the last ferry; choose a size and see it against the room. In blind tests every winning page had one and the jurors named it first. Rules: it uses the subject's real content, it works on a phone with a thumb, it has a plain
191
+ fallback without script, it never blocks reading, and it is one thing, not a playground. It is
192
+ built in step 6 as part of the page, not added as motion in step 9.
193
+
194
+ **The scenes carry the idea too.** The scroll scenes on the sheet are devices waiting for a subject.
195
+ Decide what each one shows from your inventory before building: the fly-through passes through this
196
+ studio's own title cards, the route is the road this shipment really takes, the picture that opens to
197
+ the whole screen is the room the guest will wake up in. A scene filled with pictures that could belong
198
+ to anyone is a screensaver.
199
+
200
+ ### 5. Write the words
201
+
202
+ Write the whole page as a copy deck (plain text) before markup, following `references/copy.md`:
203
+
204
+ - **Every headline fits in two lines or fewer at every width.** Do the arithmetic in copy.md §2 before
205
+ committing to a sentence: about 32 characters is safe everywhere at a confident size. The studied
206
+ gallery heroes have a median of 5 words and 32 characters.
207
+ - One supporting sentence, directly under the headline (32–48px below it) and shown with it, never
208
+ docked at the foot of the first screen or held back by an animation. When the headline is a name or
209
+ a figure of speech, this sentence says plainly what the thing is. One primary action, named for what
210
+ it does, as a real button on the first screen.
211
+ - **The first screen answers the visitor's first question in large type.** For an event: what it is,
212
+ when and where (the dates belong in the headline or at the second size, never only in small text).
213
+ For a product: what it is and what it costs or does. For a person: who and what they do. Every
214
+ section the visitor came for (the line-up, the menu, the rooms, the price) has its own heading and
215
+ its own place in the navigation.
216
+ - **Write the full content.** Every section the brief asks for delivers its information completely:
217
+ the whole menu with prices, each room with its own details, every speaker and talk, the price with
218
+ what it includes, an answer for each real question. Thin sections are the commonest reason a clean
219
+ page loses to a busier one.
220
+ - Sample details are expected where the brief leaves gaps (dish names, room names and rates, project
221
+ titles) so the design is seen at full density; list them in the report for the client to confirm.
222
+ Proof is never invented: no customers, quotes, reviews, press, logos or business statistics.
223
+
224
+ ### 6. Build it, still
225
+
226
+ Build the page with motion switched off in your head; a page that needs animation to look finished is
227
+ not finished. Order of work:
228
+
229
+ 1. **Tokens.** Colour and type roles from the sheet as CSS custom properties. Everything downstream
230
+ references tokens only. `<skill>/assets/base.css` is a neutral foundation you may start from (reset, token
231
+ names, fluid type steps, grid, focus and selection styles, the motion helpers); it has no look of
232
+ its own.
233
+ 2. **The hero, exactly as the blueprint describes it,** at desktop and at phone width. Get the big
234
+ thing big and the small things small before anything else exists.
235
+ 3. **Each section from its blueprint,** with this project's content. Keep the geometry, change the
236
+ subject. Neighbouring sections must not share a layout. **Carry the idea into every section,**
237
+ pricing, FAQ and footer included: the commonest failure in the study, even among good sites, is a
238
+ distinctive first screen followed by stock blocks.
239
+ 4. **Imagery,** in this order of preference:
240
+ 1. the project's own;
241
+ 2. generated, if you have an image tool;
242
+ 3. **real pictures of the subject's world from the open collections,** whenever an honest one
243
+ exists. Search them with `node <skill>/scripts/assets.mjs "<query>"` (Openverse, Wikimedia
244
+ Commons, the Art Institute of Chicago and the Met; only licences that allow commercial use, by
245
+ default). Search the inventory, not the category: its street in old postcards, an old map of the
246
+ neighbourhood, its material up close, its trade in engravings, a museum object of its kind, a
247
+ botanical plate, a star chart. Use them large and with intent: one archival photograph as the
248
+ hero, an engraving enlarged into the page's motif, the real map of the street as the contact
249
+ section. Look at each before choosing; `--get <ref>` downloads it into `assets/` and records
250
+ its source and licence, and `--credits` prints the credit line for the footer. A found picture
251
+ shows the world around the client and is never presented as the client's own product, room,
252
+ dish, person or team;
253
+ 4. **drawn in code from the subject itself,** for what no honest picture exists of (its objects,
254
+ its tiles, its windows, its product's interface, made as one consistent flat graphic language in
255
+ the palette's real colours);
256
+ 5. the photographs dealt on the sheet, only where an honestly generic picture fits (the sea for a
257
+ sea house), never as a stand-in for the subject;
258
+ 6. type and colour alone.
259
+
260
+ When the project has footage or a real picture of its own process or product, the first screen
261
+ shows it, large (about 40% of the screen or more). Never write a sentence on the page about where
262
+ the pictures come from or what they are not ("none of these shows our bar"): a caption says what
263
+ the picture is, and the credit line sits small in the footer. A portfolio whose work is invented
264
+ for the brief draws each piece as a finished still of that work (its title card with its own type,
265
+ an end frame, a poster), with real detail, never as a pictogram of the client's product.
266
+
267
+ **The floor, which the inspector checks:** at least four real pictures on the page, usually six to
268
+ twelve (photographs, archival images, maps, engravings, footage, raster artwork; for software, its
269
+ cropped interface fragments count too). SVG drawings do not count toward the floor: draw what no
270
+ picture exists of, and still carry real pictures. Add one moving picture wherever an honest clip
271
+ exists: search it with `assets.mjs --video "<query>"` and use it as a muted loop with a poster
272
+ frame. Models skip pictures and footage because finding them is work; the page fails without them.
273
+
274
+ `references/imagery.md` covers searching, licences and credits, video, drawing, crops and treatments.
275
+ 5. **The live thing** from step 4, built into the section where it proves the claim (often the hero
276
+ or the booking), with real content, a thumb-sized phone version and a plain fallback.
277
+ 6. **The scroll scenes,** when the sheet deals them (section 9), each with the section it carries: the page's big
278
+ moments, the camera that flies through the work, the picture that opens to the whole screen, the
279
+ word that buckles under the scroll. Copy the shared stage and the scene's files from
280
+ `<skill>/assets/scenes/`, fill the scene with this project's own pictures and words, and set the
281
+ page's tokens so it takes the page's look. A scene is composition: it decides how long the page is
282
+ and what each screen shows, so it is built now and seen in every look round, not added at the end.
283
+ `references/scenes.md` says how to put one on a page, fill it, fit it and check it;
284
+ `assets/scenes/demo/<id>.html` is a working example of each.
285
+ 7. **Fullness.** Look at each desktop screen as a poster: one dominant thing and the content it
286
+ carries. A screen that is mostly empty ground is an underbuilt section, not a rest; one deliberate
287
+ rest per page is the limit, and the inspector fails a page with two or more near-empty screens.
288
+ Running text is in the full ink at 16px or more; grey is for secondary notes.
289
+ 8. **The frame.** The page has one pair of equal outer margins at every width, and every section uses
290
+ the width the page has set up: when its text sits in the left half, the right half holds its
291
+ picture, its second column, its list or its figure, never nothing. Asymmetry lives inside the grid,
292
+ never in the frame: a void is placed only when something closes it on the far side. No stretch of
293
+ the page taller than about half a screen holds nothing at all; sections are 120–240px apart on
294
+ desktop. Every section the visitor came for opens with a heading that names it, and the first
295
+ screen carries the page's title in an `h1`. These are what readers name first when a page looks
296
+ wrong ("no clear title", "random empty space", "everything is pushed to one side"), and the
297
+ inspector measures each of them.
298
+ 9. **States and semantics.** Real links and buttons, visible focus, alt text, a phone layout that is
299
+ its own composition.
300
+
301
+ Read `references/type.md`, `references/colour.md` and `references/layout.md` when you need the detail
302
+ behind a decision; the laws below are the short form.
303
+
304
+ ### 7. Gate
305
+
306
+ ```bash
307
+ node <skill>/scripts/lint.mjs <source files or folder>
308
+ node <skill>/scripts/inspect.mjs <url or path/to/index.html>
309
+ node <skill>/scripts/scenes.mjs <url or path/to/index.html> # when the page has scroll scenes
310
+ ```
311
+
312
+ `scenes.mjs` photographs every scroll scene at 0, 10 … 100% of its hold, on desktop and on a phone,
313
+ and the reduced-motion page; with scenes on the sheet, `inspect.mjs` also films the whole scroll
314
+ (`desktop-film-NN.jpg`). A scene that never started or rests on desktop is a `FAIL`.
315
+
316
+ `lint.mjs` scans source for banned patterns and stock phrases. `inspect.mjs` opens the page in a real
317
+ browser at 1440, 768 and 390 pixels, measures it (headline line counts, type sizes, fonts actually
318
+ loaded, colours, rules, shadows, gradients, contrast, overflow, and the frame: equal margins, sections
319
+ huddled on one side, blank stretches, the title, untitled sections, text against the screen edge) and
320
+ saves screenshots to `.taste-skill/inspect/`. Fix every `FAIL`. Treat each `WARN` as wrong unless you can defend it to a
321
+ designer in one sentence. Re-run until there are no `FAIL`s. Do not argue with the meter and do not
322
+ hide things from it. The inspector serves local files over a throwaway local server; if the page must
323
+ also open straight from the file system, open `index.html` that way once before you finish.
324
+
325
+ ### 8. Look
326
+
327
+ Passing the gate means nothing banned was measured. It does not mean the page is good. Open the
328
+ screenshots the inspector lists (every viewport, with your image viewer or Read tool) and critique them
329
+ with `references/critique.md`: the fourteen passes, the Awwwards-weighted score, the caps. Write the critique
330
+ down in its format, fix the top three problems, run the inspector again, look again. Three rounds at
331
+ most.
332
+
333
+ Judge only the pictures. If a problem is visible in a screenshot, it is real, whatever the code says.
334
+
335
+ ### 9. Move
336
+
337
+ Now build the motion layer. It is required, and it is more than one fade: the inspector counts the
338
+ elements that really move while the page loads and is scrolled, and fails a page under eight (it warns
339
+ under sixteen). Any scroll scenes are already built (step 6); around them the layer has four parts:
340
+
341
+ 1. **The signature move** named on the sheet: one, done well (a dealt scene can be it).
342
+ 2. **An entrance for the parts of every section:** the heading, then the text, then the picture,
343
+ staggered by 60–90ms, rising 16–32px with opacity, triggered once as the section enters. Not one
344
+ fade for the whole block, and never content that stays hidden if the script fails.
345
+ 3. **Feedback on every control:** press, hover and focus on buttons, links, cards and the live thing.
346
+ 4. **One moving picture:** a found clip as a muted loop, a slow scale or drift on a photograph, or a
347
+ scroll-linked move on the hero picture.
348
+
349
+ Transform and opacity only; every move has a `prefers-reduced-motion` fallback that keeps the content
350
+ and drops the travel. A move that changes the colour or the layout of whole screens (colour by
351
+ chapter, a pinned story) is part of the composition, so build it in step 6 and let every look round see
352
+ it. `references/motion.md` has the tokens and tested recipes. Then run the inspector once more and check
353
+ every screenshot for content that failed to appear.
354
+
355
+ ### 10. Report
356
+
357
+ Do not report until all of these are true; each one was skipped in a test run that came out badly:
358
+
359
+ - `inspect.mjs` shows **0 FAIL** at 1440, 768 and 390, on the final version of the page.
360
+ - You opened every screenshot it listed after the last change, not only the first screen.
361
+ - With scroll scenes: `scenes.mjs` ran on the final page with no problems, and you read every sheet
362
+ (desktop, phone, reduced motion).
363
+ - A stranger reading the first screen for five seconds can say what this is and what to do.
364
+ - Every section has a heading; the margins match on both sides; no stretch of the page is empty.
365
+ - The critique of your last round is written down in the shape of `references/critique.md` §4.
366
+
367
+ Tell the user, briefly: the direction dealt (name and seed) and any redraws with reasons; the idea
368
+ sentence and the live thing; the final scores from your last critique round and what still falls short;
369
+ every found picture and clip with its title, creator, licence and source page (`assets.mjs --credits` prints
370
+ the list) and where its credit sits on the page; which bundled photographs and which drawings stand in
371
+ for photography (so they can be replaced); and any sample content that must be swapped before launch.
372
+ Do not claim a check you did not run.
373
+
374
+ ## House rules
375
+
376
+ These hold on every build, whatever the direction. `inspect.mjs` measures them.
377
+
378
+ | Rule | Instead |
379
+ | --- | --- |
380
+ | **Headlines: two lines or fewer, at every width.** Every `h1`–`h6`, and the main line of the first screen whatever its tag. | Cut words. Then widen the measure. Size last. |
381
+ | **A clear title on the first screen**, in the page's one `h1`, and a heading on every section. | Say what this is: the name with what it does, the product with what it is for, the event with its date and place. |
382
+ | **Equal outer margins; no section huddled on one side** with the other half of the screen empty. | Close every void with something on its far side: the section's picture, a second column, a list, a figure. |
383
+ | **No blank stretches** taller than about half a screen. | The normal section gap. A deliberate rest is a placed picture or a field of colour, once per page. |
384
+ | **Statements are paragraphs.** An intro sentence or a quotation set large is marked up as `<p>` or `<blockquote>`, stays at statement size (36px or less on desktop, 24px on a phone) and runs to about 25 words, three lines. | Larger than that it is a headline and the two-line rule applies. In blind tests jurors read a 42px sentence over four lines as a four-line headline. |
385
+ | **No eyebrows.** No small label above a heading, no pill badge above the headline, no "New ·" chip. | Put the information in the heading or the first sentence, or drop it. |
386
+ | **No monospace** outside real code blocks. | The text face. Tabular figures where numbers align. |
387
+ | **No index numbering.** No 01 / 02 / 03, no (001), no "Step 2". | Order shown by position, size, or the words. A real `<ol>` if order matters. |
388
+ | **No thin rules.** No hairline dividers, no 1px outlined boxes, no grid lines, crosshairs or crop marks. | Space. A step in background tone. A change of scale. A filled shape. |
389
+ | **No gradients.** Not as backgrounds, not on buttons, not in text. | Flat colour, or a real photograph. A neutral scrim under text on a photo is the one exception. |
390
+ | **No shadows on things at rest.** No glows. | A tone step between surfaces. Shadows only on what truly floats: a menu, a dialog. |
391
+ | **No assistant palette.** No yellow-cream ground with terracotta or rust; no violet or indigo. | The dealt palette. |
392
+ | **No tiny uppercase letter-spaced labels.** | Sentence case at a readable size. |
393
+ | **No icon-topped feature cards, no rows of identical cards.** | The dealt section blueprint. |
394
+ | **No glass.** No backdrop blur panels, no floating pill navigation. | A plain bar: wordmark, a few links, one action. |
395
+ | **No emoji, no gradient blobs, no decorative shapes, no fake dashboards of grey bars.** | A real picture, a real interface fragment, or nothing. |
396
+ | **No styled accent word** in a headline (italic, serif, coloured, underlined). | One face, one colour. The words carry the emphasis. |
397
+ | **Two typefaces at most,** usually one. | The dealt type system. |
398
+
399
+ Three places keep their own conventions and are left alone by the inspector: real code in
400
+ `<pre>`/`<code>` (monospace is correct there), real tables and form fields (they may have lines), and
401
+ a real interface fragment whose root carries the attribute `data-ui` (the product's own borders and
402
+ menus; see `references/imagery.md` §7).
403
+
404
+ Why these, honestly. Some are what the study measured: among the 247 sites, those the panel scored
405
+ 7.5 or higher used icon feature cards 1% of the time against 28% for sites under 6.5, pill badges 14%
406
+ against 34%, gradients 22% against 52%, shadows 24% against 48%, tiny tracked caps 16% against 57%.
407
+ Others are the owner's taste and go against current gallery fashion: monospace labels, index numbers
408
+ and hairline grids are actually *more* common on award sites than on weak ones, which is exactly why
409
+ generators imitate them and why they now read as costume. They are banned here without exception.
410
+ `references/tells.md` keeps the dated registry.
411
+
412
+ Removing ornament leaves space. Never fill it with another ornament. Fill it with scale (make the main
413
+ thing larger), with the full content, with a picture made for this subject, or with a field of flat
414
+ colour. Leave it empty on purpose once per page at most.
415
+
416
+ ## Laws of the craft
417
+
418
+ Short form. Numbers are from the study unless marked as house style.
419
+
420
+ **Type**
421
+ - Two or three sizes do the visible work: one very large, one small, nothing in between. Median
422
+ headline-to-body ratio on the studied sites is 4.3; the best go far beyond (largest type: median
423
+ 8.4vw on the top sites against 5.0vw on the weak ones).
424
+ - Display type: tracking -0.02 to -0.05em, leading 0.85–1.05. Text: 16–20px, leading 1.45–1.6,
425
+ 45–75 characters per line.
426
+ - Five sizes on a page is the ceiling. One family is normal (a third of the studied sites); two is the
427
+ limit.
428
+ - Left-aligned by default. Centre at most one moment.
429
+
430
+ **Space**
431
+ - One grid, one pair of tight margins (16–32px), used everywhere; large things run to the edges. Text
432
+ blocks share two or three left edges on the whole page.
433
+ - Asymmetry inside the grid, never in the frame: the two outer margins are equal, and an off-centre
434
+ heading is answered by something at the far side of the grid.
435
+ - The gap between sections is clearly larger than any gap inside one: 120–240px on desktop (the study's median is about 240).
436
+ - Each section has a different composition from its neighbours; none is a card grid.
437
+
438
+ **Colour**
439
+ - One ground, one ink, one accent. The accent appears on the action and perhaps one other thing.
440
+ - Running text in the full ink. A page set in soft grey reads unfinished.
441
+ - Surfaces are separated by a small step in tone, never by a line or a shadow.
442
+ - A section may change the whole field colour. Nothing fades into anything.
443
+
444
+ **Imagery**
445
+ - One dominant image beats six small ones. On the top-scored sites the hero media covers at least half
446
+ the first screen 68% of the time.
447
+ - Same crop ratios, same treatment, square corners unless the direction says otherwise (73% of the
448
+ studied sites leave media square).
449
+ - No image is better than a placeholder, an icon, or an abstract shape. A picture drawn for this
450
+ subject, in its colours and with care, is better than either. A real picture of its world, found
451
+ and credited, is better still.
452
+ - Every found picture is downloaded into the project, credited on the page and listed in the report.
453
+ None is presented as the client's own.
454
+ - Nothing ever lies on top of a headline or a statement (the inspector fails it).
455
+
456
+ **Components**
457
+ - Buttons: flat, one fill colour, either square-cornered or fully round, decided once (top sites: 52%
458
+ square, 23% pill; the 9–16px "soft" radius is the weak-site default). Most strong heroes have no
459
+ button at all, or one.
460
+ - Navigation: wordmark, three to five plain links, one action. No bar chrome.
461
+ - The footer is a designed close, not a sitemap: on most strong sites the name returns at full width.
462
+
463
+ ## Special cases
464
+
465
+ **An existing brand or design system.** Pass `--keep palette,type`, map the brand's colours and faces
466
+ onto the roles, and take only composition from the draw. The house rules still apply; if the brand
467
+ itself requires a banned device (its logo sits in a gradient, its accent is violet), keep the brand
468
+ asset, say so in the report, and pass `--allow <rule>` to the inspector for that rule only.
469
+
470
+ **Redesign, restyle or review of an existing page or app screen.**
471
+
472
+ 1. **Record the before.** Run the project as it is and inspect it into its own folder
473
+ (`inspect.mjs <url> --out .taste-skill/before`, with `--app` for an app screen) and lint its
474
+ source. Read the code: the framework, the styling method (Tailwind v3 or v4, CSS modules,
475
+ styled-components, plain CSS), the components, and what must survive: routes, forms, data,
476
+ behaviour, the brand's own assets.
477
+ 2. **A review stops here.** Critique the before screenshots with `references/critique.md`, list the
478
+ findings with the inspector's measurements, and name the three changes that would move the page
479
+ most.
480
+ 3. **Keep the stack, the content and what works.** No framework or styling-library migration; check the
481
+ dependency file before adding anything. A restyle keeps the layout and takes type, colour and
482
+ components from a dealt direction (`--keep` whatever the brand fixes); a redesign deals a full
483
+ direction and rebuilds the sections from its blueprints inside the existing components. Either way
484
+ proceed from step 2 of the run with the page's real content.
485
+ 4. **Order of work, biggest effect for least risk:** type (faces and scale), colour (one ground, one
486
+ ink, one accent), the frame (margins, section rhythm, a title on the first screen and a heading on
487
+ every section), states (hover, focus, loading, empty, error), then the stock components (icon
488
+ cards, pill badges, gradient blobs, card grids) replaced by the dealt blueprints.
489
+ 5. **Prove it.** Inspect again into `.taste-skill/after`, compare before and after at every width,
490
+ click through every link, form and menu that worked before, and report the before and after
491
+ measurements side by side.
492
+
493
+ **A component or a single section, not a page.** Skip the draw unless there is no direction to follow.
494
+ Match the surrounding design, apply the house rules and the laws, and still inspect the result.
495
+
496
+ **No checkout, no form backend.** The primary button goes to the real destination when the brief names
497
+ one. Otherwise it opens an email with a written subject and body (`mailto:` with the visitor's choices
498
+ filled in), or, for a shop, it points at `#checkout` and the report says it must be wired before
499
+ launch. Never fake a payment form.
500
+
501
+ **No Chrome or Node 22.** Run `lint.mjs` (Node 18+), take screenshots with whatever browser tool you
502
+ have, and critique those. Say in the report that the inspector could not run.
503
+
504
+ **No network.** If `assets.mjs` reaches no source, draw the pictures and say in the report that the
505
+ open collections could not be searched.
506
+
507
+ ## Files
508
+
509
+ | File | Read it when |
510
+ | --- | --- |
511
+ | `references/app-screens.md` | Any dashboard, admin, settings or other app screen: its own run, rules, tokens and checks. |
512
+ | `references/copy.md` | Writing the argument and the copy deck (steps 2 and 5). The two-line arithmetic. |
513
+ | `references/type.md` | Setting type: scales, tracking, measure, loading fonts, pairing. |
514
+ | `references/colour.md` | Applying the palette: roles, proportions, tone steps, dark pages, contrast. |
515
+ | `references/layout.md` | Grid, margins, rhythm, section variety, navigation, footer, the phone composition. |
516
+ | `references/imagery.md` | Choosing, finding, crediting, cropping and treating pictures; what to do with none. |
517
+ | `references/motion.md` | Step 9. Budget, tokens, recipes, reduced motion. |
518
+ | `references/scenes.md` | Step 6, when the sheet deals scroll scenes: putting one on a page, filling, fitting, the phone, checking, the catalogue. |
519
+ | `references/critique.md` | Step 8. How to look, how to score, what to fix first. |
520
+ | `references/tells.md` | The dated registry of generated-page tells and what each is replaced by. |
521
+ | `references/research.md` | The study: method, numbers, what the best and worst sites do. Cite it, do not guess. |
522
+ | `scripts/draw.mjs` | Deals and reprints the direction; `--photos`, `--site <id>` for more references; `--app` deals an app style instead. |
523
+ | `scripts/assets.mjs` | Step 6: searches open collections for real pictures of the subject's world; `--get` downloads with the credit, `--credits` prints them. |
524
+ | `scripts/lint.mjs` · `scripts/inspect.mjs` | The gate. |
525
+ | `scripts/scenes.mjs` | The gate for scroll scenes: each scene at 0-100% of its hold, desktop, phone, reduced motion. |
526
+ | `assets/base.css` · `assets/base.js` | An optional neutral foundation to build on. |
527
+ | `assets/scenes/` | The scroll scenes: the shared stage (`stage.js`, `stage.css`) and, for each scene in the library, its `.js`, `.css` and a working demo page in `demo/`. |
528
+ | `assets/app.css` · `assets/charts.js` | For app screens: a neutral shell, panels, tables and controls, and small SVG charts drawn to the app rules. |
529
+ | `library/` | The data the draw reads: directions, heroes, sections, type systems, palettes, photographs, studied sites, motions, scroll scenes (`scenes.json`), and the app styles, shells and screen patterns (`app.json`). Do not read it whole; use the script. |
@@ -0,0 +1,7 @@
1
+ {
2
+ "upstream": "https://github.com/Leonxlnx/taste-skill",
3
+ "sha": "6010f91a9935f1c167dfc500fb1a475681892e6b",
4
+ "retrieved": "2026-10-24",
5
+ "license": "MIT",
6
+ "path": "skills/taste-skill"
7
+ }