dreative 0.5.0 → 0.5.2

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 (48) hide show
  1. package/README.md +49 -27
  2. package/dist/cli/audit.js +206 -0
  3. package/dist/cli/audit.test.js +79 -0
  4. package/dist/cli/docsCheck.js +163 -0
  5. package/dist/cli/docsCheck.test.js +8 -0
  6. package/dist/cli/index.js +81 -8
  7. package/dist/server/preview.js +73 -73
  8. package/dist/server/store.js +11 -0
  9. package/dist/shared/artifacts.js +162 -0
  10. package/dist/shared/design.js +42 -22
  11. package/dist/shared/ruleSystem.js +130 -0
  12. package/dist/shared/ruleSystem.test.js +187 -0
  13. package/dist/shared/skillSystem.js +173 -0
  14. package/dist/shared/skillSystem.test.js +110 -0
  15. package/dist/ui/assets/{index--vztc_MR.js → index-CKwmbx2j.js} +13 -13
  16. package/dist/ui/index.html +12 -12
  17. package/package.json +5 -3
  18. package/skill/dreative/DESIGN.md +290 -95
  19. package/skill/dreative/PLAN.md +462 -71
  20. package/skill/dreative/SKILL.md +230 -126
  21. package/skill/dreative/frameworks/nextjs.md +13 -0
  22. package/skill/dreative/frameworks/react-vite.md +12 -0
  23. package/skill/dreative/frameworks/styling.md +14 -0
  24. package/skill/dreative/frameworks/sveltekit.md +10 -0
  25. package/skill/dreative/frameworks/vue-nuxt.md +12 -0
  26. package/skill/dreative/recipes/3d-recipes.md +44 -0
  27. package/skill/dreative/recipes/cinematic-recipes.md +19 -0
  28. package/skill/dreative/recipes/immersive-recipes.md +18 -0
  29. package/skill/dreative/recipes/media-recipes.md +60 -0
  30. package/skill/dreative/recipes/motion-recipes.md +44 -0
  31. package/skill/dreative/references/ARTIFACTS.md +180 -0
  32. package/skill/dreative/references/REFLEX_FONTS.json +44 -0
  33. package/skill/dreative/references/RULES.json +186 -0
  34. package/skill/dreative/references/SKILL_CONTRACT.md +30 -0
  35. package/skill/dreative/references/TIERS.md +42 -0
  36. package/skill/dreative/schemas/plan.schema.json +241 -0
  37. package/skill/dreative/schemas/verify.schema.json +61 -0
  38. package/skill/dreative/skills/3d.md +94 -157
  39. package/skill/dreative/skills/cinematic.md +56 -232
  40. package/skill/dreative/skills/experimental.md +111 -0
  41. package/skill/dreative/skills/immersive.md +61 -223
  42. package/skill/dreative/skills/interaction.md +9 -1
  43. package/skill/dreative/skills/media.md +135 -216
  44. package/skill/dreative/skills/mobile.md +128 -117
  45. package/skill/dreative/skills/motion.md +89 -229
  46. package/skill/dreative/skills/refined.md +116 -102
  47. package/skill/dreative/skills/ux.md +155 -144
  48. package/dist/server/ai.js +0 -177
@@ -4,23 +4,20 @@ This skill is for **drastic change** — a section, a page, or the whole site be
4
4
  meaningfully redesigned or built. It is not for button tweaks or single-token
5
5
  nudges unless the user explicitly invokes it for one.
6
6
 
7
- **The plan gate (ask EVERY time).** At the start of ANY Mode A request in scope,
8
- your FIRST action is one structured question: **"Plan it first, or build
9
- directly?"** with "Plan first (Recommended)" as the leading option. Say plainly
10
- why plan wins: you'll probe capabilities, agree on treatments/media/mockups up
11
- front, and the result lands far closer to what they wanted on the first build.
12
- "Build directly" skips to DESIGN.md + doctrine defaults. Never silently skip the
13
- gate — even a request that looks simple gets asked; only skip when the user
14
- already said "no plan / just do it" this session. When plan is accepted, run the
15
- protocol below.
7
+ **Plan Mode is MANDATORY.** Every Mode A request in scope runs this protocol —
8
+ do not ask "plan or build directly?", do not offer a skip, do not silently jump
9
+ to code. The ONLY exception is the user explicitly saying "no plan / just do
10
+ it" this session; then note you're skipping and go straight to DESIGN.md +
11
+ doctrine defaults.
16
12
 
17
13
  The failure this file prevents: jumping into code with half a brief, discovering
18
14
  mid-build that media/tools/structure are missing, and shipping a page that is
19
15
  60% of what the user actually wanted.
20
16
 
21
- Plan Mode is ONE planning pass → ONE structured question round → a written plan
22
- → (optional) mockups for approval → execution in the plan's order. Never turn it
23
- into a long interview; the user answers once and you build.
17
+ Plan Mode is ONE planning pass → a short sequence of single questions (§3) → a
18
+ written plan → (optional) mockups for approval → execution in the plan's order.
19
+ Questions come one at a time so each is easy to answer, but the interview stays
20
+ short: only what the prompt genuinely leaves open, then build.
24
21
 
25
22
  ## 1. Capability probe (before proposing anything)
26
23
 
@@ -38,21 +35,31 @@ Rules:
38
35
  - Probe by LOOKING (list your tools, `which ffmpeg`, check MCP config), never by
39
36
  assuming. A capability you didn't verify doesn't exist.
40
37
  - If a capability is missing but the design clearly wants it (e.g. a cinematic
41
- brief with no video-gen), include an **offer to install** in the question round
42
- (§3): name the concrete option (an MCP server the user can add, or
43
- falling back to generated stills / pre-rendered loops from image sequences)
44
- and let the user decide. Never install tools silently; never silently degrade
45
- either the user must know the fancy version was available.
38
+ brief with no video-gen), you MUST ask a real question with a real choice —
39
+ **stating the gap and moving on is not an offer, it's a disclosure.** The
40
+ bug this catches: saying "video generation isn't available, so I'll use
41
+ stills" and continuing is a FAILURE even though it's honest. The fix is a
42
+ question with at least two live options: "install <concrete MCP/tool name>
43
+ now and use it" vs "skip it, use <the specific fallback>". Ask it in the
44
+ decision phase (§3), phrased as a genuine fork, not a heads-up. Never
45
+ install tools silently; never silently degrade either.
46
46
  - The probe result changes the blueprint: no video-gen → hero loops become
47
- generated stills + ken-burns or a shader surface; no browser tools the
47
+ generated stills + ken-burns or a shader surface; **no image-genmedia
48
+ cells become `source-image` (DESIGN.md §7's priority: verified stock/CDN
49
+ photography), every planned cutout prop becomes a sourced-and-matted photo
50
+ or is cut, and any 3D of an organic real-world subject is re-planned as a
51
+ photo billboard, a brand-native abstract instrument, or cut (3d.md §1–2 — coded
52
+ organic geometry never becomes the fallback)**; no browser tools → the
48
53
  verification protocol's manual fallback (SKILL.md) must be declared up front.
54
+ Missing tools change WHERE assets come from, never whether media/3D rules
55
+ apply — sourced media carries the same treatment obligations (media.md §1–3).
49
56
 
50
57
  ## 2. The blueprint (section-by-section, media-first)
51
58
 
52
- Draft the page as a compact table BEFORE asking anything — the question round
59
+ Draft the page as a compact table BEFORE asking anything — the decision phase
53
60
  presents choices about a concrete plan, not abstractions. Per section:
54
61
 
55
- | section | layout family | media plan | motion treatment | interaction | fallback |
62
+ | section | layout family | media plan | motion treatment | interaction | intensity | fallback |
56
63
 
57
64
  - **media plan** — one of: `generate-image` (subject + exact aspect + palette/
58
65
  light-temperature prompt notes), `generate-video` (loop subject, 5-10s,
@@ -60,105 +67,464 @@ presents choices about a concrete plan, not abstractions. Per section:
60
67
  (exists in repo / user must supply — name it), `none`. Media enters through
61
68
  the motion system per `skills/media.md` — name the treatment (curtain reveal,
62
69
  mask-shaped, hover-woken, media-plane distortion…), never "add an image".
70
+ At dial ≥ 7 the proven default is one meaningful media set-piece and the
71
+ blueprint names which section carries it. The outcome is a memorable moment
72
+ where media itself becomes the visitor-controlled spectacle, not a specific
73
+ catalog effect. A different solution uses a registered planning-time
74
+ substitution with observable success criteria and evidence IDs.
75
+ When the set-piece uses a depth dive (the default for image-led `award`
76
+ concepts with depth-capable assets), its
77
+ `generate-image` cell must plan a DEPTH-CAPABLE composition (a corridor,
78
+ room, landscape, machinery receding — something a camera can enter) and
79
+ the companion assets in the same cell: the depth map and/or the separated
80
+ foreground/background plates, generated in the same prompt world.
81
+ The set-piece is chosen via
82
+ media.md's exploration protocol: invent three brand-native candidates not
83
+ sourced from recipes, record them + the pick in `conceptExploration`, then
84
+ load recipe references only for feasibility/implementation/fallback and log
85
+ them in `recipeAccess`. A media plan assembled from listed effects before
86
+ original exploration is invalid. **Every media-plane / pixel-class cell
87
+ names WHICH image asset the effect consumes as its texture/source** — a
88
+ "shader plane" cell with no named image, or a plane carrying its own
89
+ separate texture (steel/noise/gradient) layered over the section's
90
+ photography, is an invalid cell (media.md §2's treatment-identity rule: the
91
+ treatment must transform the image's own pixels, aligned to its rect —
92
+ never a decorated rectangle floating over a static `<img>`).
93
+ **Custom 3D in a media cell must name
94
+ its asset source in the blueprint** — a GLB path, a generated/sourced
95
+ texture (the actual prompt or file), or the billboard cutout it will ride
96
+ on. "Custom 3D bean/bottle/plant geometry" with no named source is an
97
+ invalid cell: primitives can't produce an organic subject (3d.md §1), so
98
+ re-plan it as rung 2 (photo billboard) or an abstract SUPPORTING form
99
+ (3d.md §2 — never a generic promoted signature object) at plan time —
100
+ don't let the build stage discover this. The user picking "custom 3D" in
101
+ the media question grants the *medium*, not an exemption from the ladder.
102
+ Every 3D prop cell also names its BERTH (3d.md §3): which lane/stage of
103
+ the section it occupies and what the layout does to make room — a prop
104
+ planned "over the hero image" or with no berth is an invalid cell.
105
+ At the `award` tier the outcome gate is one unmistakable dimensional or
106
+ spatial signature. The proven default is a recognizable real GLB or photoreal
107
+ cutout prop with a berth and asset source. A typography, photographic, data,
108
+ scene-instrument, or other alternative must use `award.spatialSignature` and
109
+ prove equivalent depth, recurrence, interaction, and dominance on desktop
110
+ and mobile. Generic orbs/blobs/toruses remain invalid.
111
+ At dial ≥ 8 the media column marks each hero/key image quiet-class or
112
+ PIXEL-class. The proven default is at least half pixel-class (minimum three,
113
+ set-piece included), each a different mechanism. A coherent alternative may
114
+ substitute `media.award.pixelCoverage` only when it visibly develops through
115
+ at least three materially different roles or states and carries runtime proof.
116
+ - **Travel map (mandatory when any element persists across sections).** If
117
+ the blueprint contains a fixed canvas object, a recurring signature, or any
118
+ scroll-morphing prop that lives through more than one section, add a travel
119
+ map under the table: one line per section giving the object's position /
120
+ scale / opacity there, each berth chosen against that section's layout so
121
+ it never sits over text or controls (DESIGN.md §15). No berth fits ⇒ the
122
+ object is scripted HIDDEN for that section. A persistent object without a
123
+ travel map is an unplanned collision that verify will find later — plan it
124
+ now. The set-piece at dial ≥ 8 must also be pixel-transforming per
125
+ media.md §3 (placement choreography like orbit/collapse doesn't qualify).
126
+ - **Diversity or development (dial ≥ 7 / expressive+).** Choose and record one
127
+ path in `creativeStrategy`. Diversity uses at least four distinct mechanisms
128
+ across three distinct drivers. Development uses one coherent signature
129
+ mechanism that changes through at least three materially different roles or
130
+ states, supported by two quieter secondary mechanisms and two drivers. The
131
+ same reveal repeated with different values is neither path. This keeps the
132
+ proven anti-repetition safeguard without forcing unrelated effects into a
133
+ coherent concept.
63
134
  - **motion treatment** — from motion.md/immersive.md/cinematic.md vocabulary,
64
- with the dial-appropriate ambition (motion.md §9 inventory is the target).
135
+ with the dial-appropriate ambition. **motion.md §5's verification inventory is a hard
136
+ plan gate, not a target:** at `expressive`/`award` ambition the blueprint
137
+ must enumerate every §9 item for its dial — which element carries it, what
138
+ triggers it — or explicitly name the item as cut with a reason. A plan that
139
+ neither covers nor justifies a §9 item is incomplete; rework it before
140
+ presenting, don't ship the gap to the build.
141
+ - **intensity (the pacing map)** — 1–10 per section: how loud this section is
142
+ (motion + media + visual weight combined). The page must read as a CURVE, not
143
+ a flat line: uniform intensity fails in both directions (all loud = exhausting,
144
+ all quiet = the set-piece feels bolted on). Place deliberate rests (≤ 3)
145
+ immediately before and after the set-piece so it lands; the hero and the
146
+ set-piece section are the peaks, nothing else matches them. A blueprint whose
147
+ intensity column is all the same number is incomplete — rework the pacing
148
+ before presenting.
65
149
  - **fallback** — for every ambitious cell (WebGL, sim, scrubbed sequence,
66
150
  generated video), the concrete boring version that ships if the fancy one
67
151
  fails runtime verification. A plan cell without a fallback is not ambitious,
68
152
  it's fragile.
69
153
 
70
154
  Plus four page-level lines: register + design read (DESIGN.md §2), signature
71
- element, animation stack (ONE system: GSAP+Lenis or motion/react — motion.md §0),
155
+ element, animation stack (ONE system: GSAP+Lenis or motion/react — motion.md §2),
72
156
  and the mobile strategy per ambitious effect (DESIGN.md §13).
73
157
 
74
- ## 3. The question round (one AskUserQuestion call, ≤4 questions)
158
+ **Signature-element plan gate.** The signature line is checked HERE, not
159
+ discovered at build time: if the signature is a visual OBJECT, it must be a
160
+ subject a stranger names correctly (3d.md §1–2's subject test). An abstract
161
+ crude coded organic form is a hard-gate failure. Generic spheres/orbs/rings/
162
+ blobs/toruses with no brand-native function remain invalid signatures. The
163
+ proven `award` default is a real GLB or rung-2 transparent photoreal cutout;
164
+ an alternative spatial typography, layered photography, data structure, or
165
+ interactive instrument uses a registered substitution and must outperform the
166
+ default on depth, recurrence, input response, and visual dominance. **Coded custom 3D is
167
+ capability-gated at the probe (§1):** offer/plan it only when the probe
168
+ verified an actual quality path — a real GLB in reach, image-gen for
169
+ albedo/label textures, an HDRI/environment source. No verified texture path
170
+ ⇒ the `custom 3D` option is presented as "3D-look props (photoreal cutouts
171
+ sold with depth)" and every 3D cell is planned as a rung-2 billboard; coded
172
+ geometry without a texture path is never planned "to be figured out at
173
+ build".
75
174
 
76
- Bundle EVERYTHING the user must decide into one structured round (multi-select
77
- where choices stack). The pool below holds more than 4 questions — pick the
78
- ones the request leaves genuinely open, most-decision-changing first; skip any
79
- the request already answers. Structured tools always offer an "Other" free-text
80
- option, so every question doubles as a remarks channel — and the round's last
81
- question should explicitly invite extra direction.
175
+ **Previous-run divergence (reruns over the same project).** If
176
+ `.dreative/plan.md` (or verify.md) from an earlier run already exists in this
177
+ project and the user asked for a NEW take (rather than iterating the shipped
178
+ one), read the old plan first and diverge on at least: signature family,
179
+ set-piece family, hero layout family, and palette strategy. Reusing the old
180
+ run's choices because they're in context is the same reflex the entropy draw
181
+ exists to break — a rerun that a user would describe as "the same site again"
182
+ is a failed rerun. Record in the new plan file which axes diverged from the
183
+ previous run.
184
+
185
+ ## 3. The decision phase
186
+
187
+ Run one short decision phase containing several sequential single-question
188
+ calls. Use the environment's structured question tool when available; otherwise
189
+ ask in chat. Never dump the whole pool in one message: each answer can change
190
+ what comes next (for example, a cinematic treatment makes the media question
191
+ matter more, while restyle depth can remove the mockup question).
192
+
193
+ **Skip what the prompt already answers.** Before asking anything, walk the pool
194
+ below against the user's prompt + attachments: a question whose answer is
195
+ already CLEAR in the prompt is never asked (asking it anyway is a bug). But
196
+ clear means clear — if the prompt touches a topic ambiguously ("make it
197
+ animated" — which treatments? how far?), ask that question anyway, narrowed to
198
+ the ambiguity ("you said animated — full scroll choreography, or calm
199
+ micro-interactions?"). Restate what you inferred from the prompt in the plan
200
+ file so silently-skipped questions are still auditable.
201
+
202
+ **Answers come only from the user, through the tool.** Never infer, assume,
203
+ or self-supply an answer to a question you posed — an unanswered question
204
+ blocks; a fabricated answer is a corrupted plan. If the user's reply to ANY
205
+ question is itself a question, a request to re-see options, or free text that
206
+ doesn't answer what was asked ("wait, what were the vibe options?"), that
207
+ question is NOT answered: respond to what they asked first (re-present the
208
+ options, clarify), then re-ask the original question as its own call. A
209
+ question consumed by a side-exchange and never re-asked is a lost decision —
210
+ track which pool items actually have answers, not which were merely posed.
211
+ Free text volunteered mid-round (a new feature, a constraint) is captured in
212
+ the plan file AND acknowledged in the next message, but doesn't substitute
213
+ for pending questions.
214
+
215
+ **Skip-honesty (the under-asking bug).** "Skip what the prompt already
216
+ answers" has a strict test: a question may be skipped ONLY when the prompt
217
+ LITERALLY contains its answer — and the plan file must QUOTE the prompt words
218
+ that answer it next to the skip. "I can infer a reasonable choice" is not a
219
+ skip license; silence in the prompt means ASK. In particular, **treatments
220
+ (item 2), media/asset types (item 3), and references (item 5) are never
221
+ skipped on inference at expressive/award ambition** — these are the three
222
+ questions that most change the build, and a round that jumps from vibe →
223
+ ambition → mockups → remarks without them delivered a design the user never
224
+ chose. Questions that are genuinely N/A (depth on a from-scratch build, scope
225
+ on a single page) are the only inference-skips allowed. If the asked count
226
+ lands under 4 on a non-trivial build, re-check the pool — you almost
227
+ certainly over-skipped.
228
+
229
+ Order most-decision-changing first, keep the total short (typically 3–5 asked,
230
+ hard cap 7). Structured tools always offer an "Other" free-text option, so
231
+ every question doubles as a remarks channel — and the last question asked
232
+ should explicitly invite extra direction.
82
233
 
83
234
  1. **Depth** (redesigns of existing code only) — the §11 transformation-depth
84
235
  ladder: restyle / re-layout / restructure / reimagine.
85
- 2. **Treatments** (multi-select)the specialist skills with one-line plain
86
- descriptions, obvious ones marked "(Recommended)":
87
- motion · interaction · 3d · immersive · cinematic · refined · media
88
- (generated images/video woven into the motion system) · ux (make every
89
- control, form, and state actually work recommended by default) · mobile
90
- (first-class phone experience, calmer but equally crafted) · none.
236
+ 2. **Treatments** (multi-select — THE canonical skill-picker list). List every
237
+ option **individually**, never pre-bundled into a combo choice (a
238
+ "refined+motion+interaction+ux+mobile" single option is a bug the user
239
+ can't select a subset of a bundle). Mark the ones the request obviously
240
+ implies "(Recommended)" on their own line, and always offer a literal
241
+ **"select all"** option separately from any individual recommendation
242
+ for structured-question tools that support multiSelect, this is the
243
+ multiSelect list itself; for text-mode fallback, spell out "say 'all' to
244
+ pick every treatment below".
245
+ **Word the options for a non-designer**: each label/description names what
246
+ the VISITOR sees or feels, in plain words, with one concrete example —
247
+ never bare technique jargon ("kinetic type", "editorial restraint",
248
+ "scroll choreography" mean nothing to most users). The canonical list,
249
+ with user-facing phrasing to adapt:
250
+ - **motion** — "things move as you scroll: sections glide in, headlines animate, layers drift at different speeds"
251
+ - **interaction** — "everything feels touchable: buttons react, cards respond to hover, small satisfying feedback everywhere"
252
+ - **3d** — "real 3D on the page: an object or scene you can see depth in, lit and rendered live (like a product you scroll around)"
253
+ - **immersive** — "the page feels like a place you travel through — scrolling is a journey with chapters, not a document"
254
+ - **cinematic** — "dark, moody, movie-like atmosphere: glow, particles, fluid surfaces (think film title sequence)"
255
+ - **refined** — "quiet luxury: lots of space, beautiful photography, very little movement — Apple/fashion-brand calm"
256
+ - **media** — "AI-generated images/video made for this page and woven into the motion (hero film loop, images that come alive)"
257
+ - **ux** — "everything actually works: menus, forms, cart, keyboard — pretty AND functional". This is always included; show it as locked/included rather than optional.
258
+ - **mobile** — first-class phone experience: thumb-ergonomic layout and
259
+ effects re-authored for touch, not merely scaled down. This is always
260
+ included at baseline; mark it as an emphasized treatment only when mobile
261
+ is the primary surface or the user explicitly asks for a mobile-first take.
262
+ - **experimental** — user-facing phrasing: "go weird: images that tear/
263
+ dissolve/reassemble as you scroll, the camera diving into scenes, one
264
+ never-seen-before idea per section". Internally this is the
265
+ creative-mindset dial (`skills/experimental.md`): full
266
+ scroll-reactive assets (images that disperse/reform/refract as you
267
+ scroll, not just sit still with particles in front), textured/materialed
268
+ 3D instead of smooth plain geometry, camera/dimension shifts on
269
+ scroll/interaction (zoom into a scene, rotate to a new view, transition
270
+ between spatial "worlds"), willingness to try a genuinely unusual idea
271
+ per section rather than the safe default of that treatment. Recommend
272
+ this whenever the user's language points at "crazy", "bizarre", "wow",
273
+ "never seen before", or award-tier + immersive/cinematic/3d stacked
274
+ together — it's the difference between effects *placed on* the page and
275
+ the page *behaving* like the reference sites when you interact with it.
276
+ Plus "none — no optional treatments" (`ux` and `mobile` still apply). Skip only when the user already
277
+ named the treatments or the request is trivially a restyle; read each
278
+ chosen `skills/<name>.md` before designing.
279
+
280
+ **For multi-page work, follow selection with one page-assignment matrix.**
281
+ Rows are pages and columns are the user-selected optional treatments. Let the
282
+ user pin any treatment to specific pages. For unpinned selections, propose a
283
+ distribution based on page purpose and intensity, then ask for one approval
284
+ of the complete matrix. User pins are authoritative; routing cannot move
285
+ them or activate unselected optional skills. `ux` and baseline `mobile` apply
286
+ to every page. Selecting all means every skill is used somewhere in the
287
+ overall plan—not that every page receives every effect.
288
+
289
+ **Propose extra, request-specific skills beyond this fixed list** when the
290
+ brief hints at something the 10 named treatments don't cover well (sound
291
+ design, generative/procedural patterns, data-driven visuals, AR-ish
292
+ camera tricks, a custom cursor system, easter eggs). Name each candidate
293
+ in the same question as an extra option with a one-line description —
294
+ don't invent a `skills/<name>.md` file for a one-off idea; fold ad hoc
295
+ candidates into the blueprint under the closest existing skill (usually
296
+ `experimental` or `interaction`) and note the specific technique inline.
91
297
  3. **Media & asset types** (multi-select) — offer every asset class the probe
92
298
  found tools for, and let choices stack: `generated images` · `generated
93
299
  video loops` · `custom 3D` (real models/geometry, textures, and shaders
94
300
  built in code — top-tier 3D sites are made of custom 3D assets, not
95
- wallpaper images behind a canvas) · `real assets` (in repo / user supplies)
96
- · `placeholders only`. Mark the probe-backed recommendation "(Recommended)".
301
+ wallpaper images behind a canvas) · `custom props` (small isolated
302
+ compositional elements transparent-bg cutout images or lightweight
303
+ textured 3D objects, per `skills/media.md` §1.5 — scattered/floating
304
+ decoration distinct from hero/gallery media) · `real assets` (in repo /
305
+ user supplies) · `placeholders only`. Mark the probe-backed recommendation
306
+ "(Recommended)".
97
307
  **State the cost honestly: image/video generation is token-intensive** — say
98
308
  roughly how many assets the blueprint wants and that each costs real
99
309
  tokens/time, so "images only" or "placeholders" is a legitimate budget
100
310
  choice, not a downgrade. If a needed tool is missing, this is where the
101
311
  install offer goes ("I can add <X> MCP for video generation — ok?").
102
- 4. **Ambition tier** safe (clean + light motion) / expressive (full motion.md
103
- dial 7-8 inventory) / award-site (dial 9-10, immersive/cinematic
104
- architecture). State the cost honestly: higher tiers mean heavier builds and
105
- a mandatory runtime verification pass.
106
- 5. **References** "Do you have a reference — a website you love, a
107
- screenshot, a brand whose feel to chase?" Options like: paste a URL /
108
- attach screenshots / "surprise me invent it from the brand" / match the
109
- existing brand. When a URL or image arrives, actually study it before
312
+ **Set the iteration expectation honestly:** when the user picks `custom
313
+ 3D`, `custom props`, or (later) the `award` tier, say plainly — in the
314
+ question's description or the plan recap that complex 3D motion and prop
315
+ choreography rarely land perfectly in one pass: the first build ships a
316
+ working version (planned fallbacks where an effect fails verification),
317
+ and 1–2 follow-up prompts to tune specific moments are normal and
318
+ expected. This is a disclosure, not a discouragement; it prevents
319
+ "the plan promised more than the page shows" disappointment, and it never
320
+ licenses shipping less than the plan — the verify gates still apply in
321
+ full on pass one.
322
+ 4. **Ambition tier** — present each tier with a plain description, a
323
+ best-fit use case, AND its honest tradeoff (a user choosing blind between
324
+ "cool-sounding" labels is the failure this wording prevents):
325
+ - **Solid (`solid`)** — polished, complete, responsive, and light on custom
326
+ effects. *Best for:* dashboards, apps,
327
+ content-heavy sites, corporate audiences, tight deadlines. *Tradeoff:*
328
+ looks professional, won't turn heads.
329
+ - **Premium (`premium`)** — a strong design read, deliberate media, and one
330
+ signature detail with restrained motion. *Best for:* business, commerce,
331
+ and marketing work that should feel distinctive without becoming an
332
+ experience site. *Tradeoff:* more craft and media work than solid.
333
+ - **Expressive (`expressive`)** — rich scroll motion, 3D accents, everything still
334
+ instantly usable. *Best for:* most product, e-commerce, and marketing
335
+ sites — the show/usability sweet spot and the default recommendation.
336
+ *Tradeoff:* heavier than premium, but visitors never fight the page.
337
+ - **Award (`award`)** — the page becomes an experience: immersive 3D, cinematic
338
+ pacing, experimental transitions (dial 9-10). *Best for:* portfolios,
339
+ launches, brand showcases, agency work — anywhere wow IS the goal.
340
+ *Tradeoff:* heaviest build, longest load, and deliberately unconventional —
341
+ visitors explore rather than skim, so it can frustrate someone who just
342
+ wants the price list. Say this plainly when offering it.
343
+ Higher tiers also mean a longer build and a mandatory runtime verification
344
+ pass — state that cost too.
345
+ **Which option gets "(Recommended)" is computed, and the default bias is
346
+ UP:** when the brief carries no strong signal either way, recommend
347
+ **expressive** — unnamed ambition becomes beige (DESIGN.md §2), and this
348
+ skill exists for drastic change. Recommend **solid** only on concrete
349
+ counter-signals: explicit "minimal / corporate / clean / subtle" language,
350
+ a product/app/dashboard surface rather than a marketing page, or a hard
351
+ deadline constraint (item 7). Recommending solid to a signal-free brief is
352
+ a bug, same class as the item-8 mockup inversion.
353
+ 5. **References (ask unless the prompt already supplied them)** — "Do you have
354
+ any reference — an image/screenshot, a website you love, or a video of a
355
+ feel/motion to chase?" Options like: attach image(s) / paste a website URL /
356
+ share a video (URL or file) / "surprise me — invent it from the brand" /
357
+ match the existing brand. When a reference arrives, actually study it before
110
358
  designing (SKILL.md's references rule: fetch the site / read the image,
111
359
  distill what specifically to borrow — palette, type feel, layout family,
112
- motion cues — never guess a named site from memory).
360
+ motion cues — never guess a named site from memory). **Video references:**
361
+ if the environment has no tool that can actually watch video, say so and
362
+ recommend (optional, never required) installing a video-analysis MCP so you
363
+ can study the clip's motion/pacing for real; if the user declines, fall back
364
+ to their own description of the video plus any frames/screenshots they can
365
+ paste — never pretend to have watched it.
113
366
  6. **Vibe & audience** (when the brief is thin) — 3-4 contrasting directions
114
367
  as options, each a one-line register + palette + energy sketch ("quiet
115
368
  luxury: bone, near-black serif, almost no motion" vs "electric launch:
116
369
  drenched color, kinetic type"), plus who the page must convince (buyers /
117
370
  investors / recruiters / fans). This seeds DESIGN.md §2's design read.
118
- 7. **Scope & priorities** (multi-page or vague requests) which pages/flows
119
- matter most, what's in this pass vs later, and any hard constraints
371
+ **Always include an explicit "describe your own theme" option** (own
372
+ words: palette, mood, a brand they admire) alongside the presets the
373
+ presets are a starting menu, not the only path, and a user with a theme
374
+ already in mind shouldn't have to force-fit one of 3-4 canned directions.
375
+ If the user has already given any theme/description language in the
376
+ prompt, skip the presets and just confirm what was inferred instead of
377
+ re-asking.
378
+ 7. **Scope & priorities** (multi-page or vague requests) — when the codebase
379
+ has more than one page/route, always ask explicitly which are in scope:
380
+ list the discovered pages by name and offer **"all pages"** as one option
381
+ alongside individually-named pages (multi-select, so the user can pick a
382
+ subset like "home + product page" without getting everything). Never
383
+ assume "all" just because the brief said "redesign the site" — confirm it.
384
+ Also capture what's in this pass vs later, and any hard constraints
120
385
  (existing brand tokens to keep, CMS/content that must survive, deadline
121
- implying the safe tier).
386
+ implying the solid tier).
122
387
  8. **Mockups first?** — offer to build 1:1 mockups BEFORE the full build:
123
- "Mockup the key pages first (Recommended for big changes)" / "Straight to
124
- build". If yes, execute §4b before touching real code.
388
+ "Mockup the key pages first" / "Straight to build". **Which one is marked
389
+ "(Recommended)" is NOT static compute it from the depth + ambition
390
+ answers already given:** reimagine or restructure depth, OR `award`
391
+ ambition, mean this is among the biggest changes the tool can make, so
392
+ **"Mockup first" is the recommended option.** Recommend "Straight to
393
+ build" only when depth is restyle/re-layout AND ambition is solid/premium/
394
+ expressive. Getting this backwards (recommending straight-to-build on a
395
+ reimagine + award combo) is a bug, not a stylistic choice. When depth
396
+ is restructure/reimagine OR ambition is `award`, also offer a third
397
+ option: **"two divergent mockups"** — the two strongest concepts from the
398
+ explore pass (DESIGN.md §2) each built as a mockup, user picks. State the
399
+ honest cost (a second mockup is real tokens/time); it's an offer, never
400
+ the default. If yes to any mockup option, execute §4b before touching
401
+ real code.
125
402
  9. **Final remarks** — close the round with an open catch-all: "Anything else
126
403
  I should know or you'd love to see — specific effects, colors you hate,
127
404
  sections to add or kill?" Options: "no, go build" / "yes (write it in
128
405
  Other)". Everything written here lands verbatim in the plan file and is
129
- honored like the brief.
406
+ honored like the brief. **This question is asked on every single round,
407
+ with no exception** — it is the fixed closer, never trimmed, never
408
+ replaced by ending the round on whatever question happened to be last
409
+ (e.g. references or mockups). If references was the last substantive
410
+ question asked, final remarks still follows it as its own separate call.
130
411
 
131
- Cap at 4 per round: depth/treatments/media/mockups usually win; fold
132
- ambition into treatments' recommendations when crowded, and vibe/scope into
133
- the blueprint you present for approval. Never re-ask in later rounds;
412
+ When trimming to stay under the cap: depth / treatments / references / media
413
+ usually win; fold ambition into treatments' recommendations when crowded, and
414
+ vibe/scope into the blueprint you present for approval. **Mockups (§8) and
415
+ final remarks (§9) are never trimmed** — they are the last two questions of
416
+ every round, in that order, regardless of how many others got cut. Never
417
+ re-ask a question already answered (in the prompt or in an earlier answer);
134
418
  ambiguity discovered mid-build resolves by the plan's spirit + doctrine
135
419
  defaults.
136
420
 
137
421
  ### Calibration references (what the top tiers actually look like)
138
422
 
139
- When the user picks award-site ambition or 3d/immersive/cinematic treatments,
423
+ When the user picks the `award` tier or 3d/immersive/cinematic treatments,
140
424
  these are the bar (fetch and study whichever is closest before designing):
141
425
 
142
426
  - https://www.experiencethebestyou.com/en-GB/ — coordinated scroll choreography
143
427
  + heavy custom 3D/motion throughout.
144
428
  - https://unseen.co/projects/contra/ and https://unseen.co/projects/letter/ —
145
- WebGL media planes, shader transitions, kinetic type.
429
+ WebGL media planes, shader transitions, kinetic type (browse
430
+ https://unseen.co/projects for more in the same family).
146
431
  - https://25residences.com/ — luxury real-estate register, cinematic pacing.
432
+ - https://www.ciaoenergy.com/ — THE reference for a real 3D product on the
433
+ page (stack verified from source): ONE `can.glb` + a small `base.glb`, an
434
+ `.hdr` environment map for lighting, `MeshPhysicalMaterial`, and six
435
+ per-flavor **label textures** (AVIF) swapped onto the same geometry via
436
+ `TextureLoader` — one model, N palettes. Scroll drives it with plain
437
+ `ScrollTrigger.create`; backgrounds are pre-rendered per-flavor video
438
+ loops, not live sims. Lesson: photoreal product 3D = real GLB + real label
439
+ texture + HDRI environment — never crude organic coded geometry (3d.md §1) — and the
440
+ cheap parts (backgrounds) are pre-rendered video.
441
+ - https://www.cinetica.studio/ — the "composed chaos" register (stack
442
+ verified): Webflow + the FULL GSAP plugin suite (ScrollTrigger, SplitText,
443
+ ScrambleText, Flip, Draggable, InertiaPlugin, Observer, CustomEase) +
444
+ Lenis + embedded WebGL shader scenes (Unicorn Studio) + Spline + video.
445
+ Lesson: the crazy feel is mostly ELABORATE TEXT/LAYOUT CHOREOGRAPHY
446
+ (scramble, split-line, flip transitions, drag/inertia) layered over a few
447
+ shader surfaces — not one giant 3D scene.
448
+ - https://www.penguin-capital.co.jp/en and https://designxhand.com/experience
449
+ — the clean-expressive pole: Next.js/custom builds with three.js + GSAP +
450
+ Lenis (+ Lottie), a single full-page background canvas
451
+ (`pointer-events: none`) behind calm editorial type. Lesson: one quiet
452
+ WebGL layer + disciplined type can read premium-crazy without cinematic
453
+ darkness.
454
+
455
+ These teardowns were verified July 2026 and will age — sites redesign and
456
+ registers move on. At the `award` tier, when browser tools exist, spend ONE
457
+ fetch on a current source (Awwwards SOTD or godly.website) to confirm the
458
+ register you're chasing is still the frontier, and note in plan.md what you
459
+ saw. The stack LESSONS above outlive the sites themselves; the aesthetics
460
+ don't.
147
461
 
148
462
  Common thread: their 3D is **custom models, textures, and shaders**, not
149
463
  generated wallpapers behind text. If the environment has 3D-capable tooling and
150
464
  the user opted in, build real 3D material (geometry, materials, lighting,
151
465
  shader surfaces per `skills/3d.md`); reserve generated images/video for what
152
466
  3D can't do. This tier only happens when the user explicitly chose it in the
153
- question round — never impose it.
467
+ decision phase — never impose it.
154
468
 
155
- ## 4. Write the plan, then execute it
469
+ ## 4. Write the plan, then execute it
470
+
471
+ Persist the approved plan first to `.dreative/plan.json` using
472
+ `references/ARTIFACTS.md` and `schemas/plan.schema.json`; this is the delivery
473
+ contract consumed by `dreative audit`. Render the same decisions as a readable
474
+ `.dreative/plan.md` for the user and session re-entry. Keep section and asset
475
+ statuses synchronized in JSON as the build progresses. Set `doctrineVersion: 2`,
476
+ record `implementationStartedAt` immediately before code changes, and ensure all
477
+ rule exceptions predate it. **The first time this run writes into
478
+ `.dreative/`, also write `.dreative/README.md`** with exactly this content
479
+ (it stops other agents/CLIs from mistaking run artifacts for the skill —
480
+ observed failure: an agent found `.dreative/`, said "not a proper SKILL.md",
481
+ then used these outputs as its instructions):
156
482
 
157
- Persist the approved plan to `.dreative/plan.md` (or the scratchpad if
158
- `.dreative/` doesn't exist): capability manifest, every answer verbatim
159
- (including references studied — with the distilled borrow-list — and all
160
- free-text remarks), blueprint table, stack, mobile strategy, fallbacks. Long sessions lose context; the plan file is
161
- the re-entry point re-read it instead of re-deciding.
483
+ ```markdown
484
+ # Dreative run artifacts NOT the skill
485
+
486
+ Everything in this folder (plan.md, system.md, verify.md, assets.json,
487
+ mockups/, screenshots/) is OUTPUT of a Dreative design run, not
488
+ instructions. The actual skill lives at `<agent-dir>/skills/dreative/SKILL.md`
489
+ (look in `.claude/`, `.codex/`, or `.agents/`). For any new design request:
490
+ read that SKILL.md and run its protocol from the start — these artifacts are
491
+ the previous run's history, never proof the new request is already done.
492
+ ```
493
+
494
+ Persist to the plan file: capability manifest, the **full Q&A transcript**
495
+ (each question asked + the answer, verbatim, including free-text remarks),
496
+ each SKIPPED question with the inference drawn from the prompt, references
497
+ studied with the distilled borrow-list, the concept exploration (DESIGN.md §2:
498
+ the three divergent concepts, the pick, and the rejects' one-line reasons —
499
+ same duty as media.md's set-piece exploration), blueprint table, stack, mobile
500
+ strategy, fallbacks. Long sessions lose context; the plan file is the re-entry
501
+ point — a resumed session re-reads it instead of re-deciding or re-asking.
502
+
503
+ **Re-entry is for resuming, never for skipping (the stale-artifact trap).**
504
+ The re-entry rule applies ONLY when this session is continuing that same run
505
+ mid-flight (the plan approved, the build interrupted). A NEW user request —
506
+ "redesign this", "audit and redesign", any fresh design ask — over a project
507
+ that already contains `.dreative/plan.md` / `system.md` / `verify.md` runs
508
+ the FULL protocol: those files are the previous run's history and inputs to
509
+ the previous-run divergence rule (§2), never evidence that the new request
510
+ is satisfied. Reading the old artifacts, declaring "the redesign is already
511
+ implemented", validating the old build, and stopping is a FAILED invocation —
512
+ the user invoked the skill because they want work done NOW. If it is
513
+ genuinely ambiguous whether the user wants to resume the old run or start a
514
+ new take, ask one structured question when available (resume vs new take), not an
515
+ assumption.
516
+
517
+ **Then show the plan to the user in chat, before touching code.** Writing
518
+ `plan.md` is not the same as the user having seen it — after the last
519
+ question (§3.9) is answered, post a readable recap in the same conversation:
520
+ the blueprint table (§2), the ambition/depth/treatments chosen, the asset
521
+ plan and its honest cost, references studied and what was borrowed, and any
522
+ install offers taken. This is a plan RECAP, not another approval gate — don't
523
+ block on it unless mockups (§4b) were opted into — but skipping straight from
524
+ the last answer to "building now" without ever surfacing the plan is a bug:
525
+ the user answered several questions and is owed a look at what they add up to
526
+ before code starts. Keep it scannable (the table + a few bullets), not a
527
+ restatement of this whole file.
162
528
 
163
529
  ## 4b. Mockups (when the user opted in)
164
530
 
@@ -174,6 +540,12 @@ user sees in the mockup is what they'd see in the shipped page; nothing in the
174
540
  mockup that the build wouldn't do, nothing in the build's look that the mockup
175
541
  hides.
176
542
 
543
+ If the user chose **two divergent mockups** (§3.8), build the highest-impact
544
+ page twice — once per surviving explore-pass concept (genuinely different
545
+ palette/type/signature, not two tints of one idea) — and present both;
546
+ the user's pick becomes the committed concept and its reject reason goes in
547
+ the plan file.
548
+
177
549
  Write mockups to `.dreative/mockups/<page>.tsx` (or the scratchpad), serve or
178
550
  screenshot them for the user, and ask one approval question: approve / tweak
179
551
  (what) / rethink. Approved mockups become the source of truth — the full build
@@ -183,19 +555,38 @@ tweak feedback into the plan file before building.
183
555
  **Execution order (always):**
184
556
 
185
557
  1. **Assets first.** Generate every planned image/video/sequence NOW, at the
186
- blueprint's aspect ratios, graded to the palette (media.md §1). Sections get
558
+ blueprint's aspect ratios, graded to the palette (media.md §4). Sections get
187
559
  designed around real assets, not around placeholders that "will be swapped".
188
- 2. **Foundation.** Install and WIRE the animation stack (motion.md §8), fonts,
560
+ 2. **Foundation.** Install and wire the animation stack (motion.md §2 and the
561
+ motion recipe reference), fonts,
189
562
  tokens, providers — before any section code.
190
563
  3. **Sections** in blueprint order, each honoring its row (skills tagged per
191
564
  section apply to that section).
192
565
  4. **Effects + choreography** across sections (page-level timelines, transitions,
193
566
  the signature element).
194
- 5. **Verification** — the full runtime protocol (SKILL.md self-critique +
195
- runtime gates). Any effect that fails gets its planned fallback, and the
196
- final report says so: "shipped the §2 fallback for X because Y".
567
+ 5. **Verification** — the full runtime protocol (SKILL.md §V: runtime gates +
568
+ self-critique, mobile first, evidence written to `.dreative/verify.json` and
569
+ summarized in `.dreative/verify.md`).
570
+ Any effect that fails gets its planned fallback, and the final report says
571
+ so: "shipped the §2 fallback for X because Y".
572
+
573
+ **Execution is mandatory, not advisory.** Once the plan is approved, it MUST be
574
+ carried out in full:
575
+
576
+ - Work through blueprint rows top to bottom; a row is only closed when its code
577
+ is written AND its verification gate passes (or its named fallback shipped).
578
+ - Never end the session, summarize, or declare done while unshipped rows
579
+ remain. If interrupted or the context is compacted, re-read
580
+ `.dreative/plan.json` (using `plan.md` for narrative context) and resume from
581
+ the first unshipped row — do NOT
582
+ re-plan, re-ask, or restart.
583
+ - Cutting a row requires an explicit user decision or a hard technical blocker
584
+ named in the report; "ran long" is not a reason.
585
+ - Before the final report, walk `plan.json` row by row, mark each one, and run
586
+ `dreative audit`.
197
587
 
198
588
  Report against the plan when done: each blueprint row → shipped / fallback /
199
- cut (with reason), plus the motion inventory (motion.md §9) and the preservation
589
+ cut (with reason), plus the motion inventory (motion.md §5) and the preservation
200
590
  ledger when §11 applies. A build that silently diverges from its approved plan
201
- is a bug even when it looks good.
591
+ is a bug even when it looks good — and a plan left half-executed is a failed
592
+ task, not a partial success.