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.
- package/README.md +49 -27
- package/dist/cli/audit.js +206 -0
- package/dist/cli/audit.test.js +79 -0
- package/dist/cli/docsCheck.js +163 -0
- package/dist/cli/docsCheck.test.js +8 -0
- package/dist/cli/index.js +81 -8
- package/dist/server/preview.js +73 -73
- package/dist/server/store.js +11 -0
- package/dist/shared/artifacts.js +162 -0
- package/dist/shared/design.js +42 -22
- package/dist/shared/ruleSystem.js +130 -0
- package/dist/shared/ruleSystem.test.js +187 -0
- package/dist/shared/skillSystem.js +173 -0
- package/dist/shared/skillSystem.test.js +110 -0
- package/dist/ui/assets/{index--vztc_MR.js → index-CKwmbx2j.js} +13 -13
- package/dist/ui/index.html +12 -12
- package/package.json +5 -3
- package/skill/dreative/DESIGN.md +290 -95
- package/skill/dreative/PLAN.md +462 -71
- package/skill/dreative/SKILL.md +230 -126
- package/skill/dreative/frameworks/nextjs.md +13 -0
- package/skill/dreative/frameworks/react-vite.md +12 -0
- package/skill/dreative/frameworks/styling.md +14 -0
- package/skill/dreative/frameworks/sveltekit.md +10 -0
- package/skill/dreative/frameworks/vue-nuxt.md +12 -0
- package/skill/dreative/recipes/3d-recipes.md +44 -0
- package/skill/dreative/recipes/cinematic-recipes.md +19 -0
- package/skill/dreative/recipes/immersive-recipes.md +18 -0
- package/skill/dreative/recipes/media-recipes.md +60 -0
- package/skill/dreative/recipes/motion-recipes.md +44 -0
- package/skill/dreative/references/ARTIFACTS.md +180 -0
- package/skill/dreative/references/REFLEX_FONTS.json +44 -0
- package/skill/dreative/references/RULES.json +186 -0
- package/skill/dreative/references/SKILL_CONTRACT.md +30 -0
- package/skill/dreative/references/TIERS.md +42 -0
- package/skill/dreative/schemas/plan.schema.json +241 -0
- package/skill/dreative/schemas/verify.schema.json +61 -0
- package/skill/dreative/skills/3d.md +94 -157
- package/skill/dreative/skills/cinematic.md +56 -232
- package/skill/dreative/skills/experimental.md +111 -0
- package/skill/dreative/skills/immersive.md +61 -223
- package/skill/dreative/skills/interaction.md +9 -1
- package/skill/dreative/skills/media.md +135 -216
- package/skill/dreative/skills/mobile.md +128 -117
- package/skill/dreative/skills/motion.md +89 -229
- package/skill/dreative/skills/refined.md +116 -102
- package/skill/dreative/skills/ux.md +155 -144
- package/dist/server/ai.js +0 -177
|
@@ -1,232 +1,56 @@
|
|
|
1
|
-
# Dreative Specialist Skill — Cinematic WebGL & Experiential Interfaces
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(3d.md §4), sim pauses off-screen and on `document.hidden`, and pointer force is
|
|
58
|
-
damped — the surface reacts like water, not like a cursor-following gimmick.
|
|
59
|
-
Images/media on the page render INTO the canvas layer (texture planes synced to
|
|
60
|
-
DOM rects — measure, don't guess) so the distortion can touch them; keep real
|
|
61
|
-
DOM (invisible or fallback-visible) underneath for a11y/SEO/selection — the
|
|
62
|
-
full media-plane pattern, video textures, and the wired fallback rule live in
|
|
63
|
-
`media.md` §3. When a video-generation tool exists, the pre-rendered-loop
|
|
64
|
-
budget path (§6) becomes first-class: generate the sim-like loop instead of
|
|
65
|
-
building the GPGPU sim (media.md §1).
|
|
66
|
-
|
|
67
|
-
## 2. Interaction vocabulary
|
|
68
|
-
|
|
69
|
-
The genre replaces "click around a document" with deliberate, weighty gestures.
|
|
70
|
-
Pick 2-3, execute perfectly:
|
|
71
|
-
|
|
72
|
-
- **Drag to explore**: the primary surface pans on drag (inertia + rubber-band
|
|
73
|
-
edges, damped) across a spatial arrangement of works. Cursor label says
|
|
74
|
-
"Drag"; a minimap/index shows position. Wheel/trackpad maps to the same pan.
|
|
75
|
-
ALWAYS pair with a conventional index list (the numbered menu) — drag is the
|
|
76
|
-
scenic route, never the only route.
|
|
77
|
-
- **Click & hold**: press-and-hold to enter a project / reveal a layer — a ring
|
|
78
|
-
or bar fills during the hold (400-700ms), releasing early cancels with a
|
|
79
|
-
spring-back. Label it ("Hold"). Keyboard equivalent: Enter activates
|
|
80
|
-
immediately — the hold is texture for pointer users, not a gate.
|
|
81
|
-
- **Velocity-reactive media**: scroll/drag velocity feeds shader intensity —
|
|
82
|
-
images stretch, RGB channels split for a beat, grain agitates — settling with
|
|
83
|
-
damped decay. Read velocity from Lenis/`useScroll`; clamp hard: peak effect at
|
|
84
|
-
a fast flick should still be legible.
|
|
85
|
-
- **Cursor as instrument**: single dot that morphs into contextual labels
|
|
86
|
-
("Drag", "Hold", "Play", index numbers). In this genre the cursor may also
|
|
87
|
-
cast light — the surface (§1) brightens around it. One cursor identity,
|
|
88
|
-
fine-pointer devices only.
|
|
89
|
-
- **Idle cinematography**: after ~10s idle the scene performs — slow camera
|
|
90
|
-
drift, sim breathing, a highlight reel. Any input snaps back (damped, 300ms).
|
|
91
|
-
|
|
92
|
-
## 3. Sound design (optional layer, genre-native)
|
|
93
|
-
|
|
94
|
-
The only web genre where audio is expected — still strictly opt-in:
|
|
95
|
-
|
|
96
|
-
- Entry gate offers the choice up front ("Enter with sound / without") or an
|
|
97
|
-
always-visible mute toggle in the HUD (animated equalizer bars = the
|
|
98
|
-
convention). NEVER autoplay audio; browsers block it and users hate it.
|
|
99
|
-
- One ambient loop (-30dB-ish, long crossfaded loop) + micro-SFX on primary
|
|
100
|
-
interactions only (hover tick, hold-complete, transition whoosh). Web Audio
|
|
101
|
-
API with a master gain; fade in/out over 400ms on toggle, duck during video.
|
|
102
|
-
- Persist the choice (localStorage), default OFF on return visits unless
|
|
103
|
-
enabled; respect `prefers-reduced-motion` as a proxy for "calm mode" — start
|
|
104
|
-
muted there.
|
|
105
|
-
|
|
106
|
-
## 4. Composition & transitions in this register
|
|
107
|
-
|
|
108
|
-
- Views compose like film frames: subject off-center (rule-of-thirds), type in
|
|
109
|
-
the negative space, numbered label anchoring a corner. Symmetric centered
|
|
110
|
-
compositions only for title-card moments.
|
|
111
|
-
- Route transitions are CUTS and DISSOLVES driven by the surface: the sim
|
|
112
|
-
swallows the view (fluid floods, particles disperse) → beat at full abstraction
|
|
113
|
-
(~200ms, the surface alone) → next view condenses out of it. The simulation is
|
|
114
|
-
the transition medium — no white flashes, no generic slide-wipes on top of it.
|
|
115
|
-
- Section changes within a view: crossfade + parallax nudge, ≤ 500ms; let the
|
|
116
|
-
surface do the drama, keep DOM motion quiet (this genre's DOM moves LESS than
|
|
117
|
-
a normal site's — contrast is what reads as expensive).
|
|
118
|
-
- The loader (immersive.md §2 rules apply) is minimal here: percentage numeral +
|
|
119
|
-
the sim warming up behind it. The sim visibly "becoming ready" IS the loader.
|
|
120
|
-
|
|
121
|
-
## 5. Performance & accessibility (non-negotiable, hardest here)
|
|
122
|
-
|
|
123
|
-
All of 3d.md §7 and immersive.md §6, plus:
|
|
124
|
-
|
|
125
|
-
- GPGPU sims are the most expensive thing on the web: cap sim resolution
|
|
126
|
-
(fluid ≤ 256², particles per device tier), halve on mobile or replace the sim
|
|
127
|
-
with a pre-rendered video loop of it — visually near-identical, free to play.
|
|
128
|
-
- Measure, don't assume: if frame time > 20ms for a sustained burst, degrade
|
|
129
|
-
live (drop sim resolution → drop post-FX → static grade). Build the ladder in.
|
|
130
|
-
- `prefers-reduced-motion`: sim frozen to one still frame (it's the grade's
|
|
131
|
-
texture now), velocity effects off, hold-to-enter becomes click, idle
|
|
132
|
-
cinematography off. The site must remain fully usable and still look graded.
|
|
133
|
-
- Contrast discipline: dark register makes AA failures easy — body text ≥ 4.5:1
|
|
134
|
-
against the DARKEST point of the animated surface behind it (test the worst
|
|
135
|
-
frame, not the average); put text over a stabilized scrim when the sim is busy.
|
|
136
|
-
- Every drag/hold/spatial interaction has a boring equivalent: real links in the
|
|
137
|
-
numbered index, tab order through works, Enter to open. Screen readers get the
|
|
138
|
-
DOM document; the canvas is `role="img"` with a scene description.
|
|
139
|
-
- Battery/data respect: pause everything on `visibilitychange`, honor
|
|
140
|
-
`prefers-reduced-data` by skipping the sim entirely (grade + posters only).
|
|
141
|
-
|
|
142
|
-
## 6. Recipes
|
|
143
|
-
|
|
144
|
-
- **UNSEEN-style studio home** (verified on the live site): letter-cycling
|
|
145
|
-
loader (the wordmark's letters flip one at a time over the studio's one-line
|
|
146
|
-
bio) → entry gate ("Enter" pill + quieter "ENTER WITHOUT AUDIO" underneath) →
|
|
147
|
-
a pastel 3D room half-flooded with reflective water; drag pans the view and
|
|
148
|
-
reveals chrome/reflective 3D display type STANDING IN the scene (italic serif
|
|
149
|
-
+ grotesk mixed in one headline), mirrored in the water. Scrolling dollies the
|
|
150
|
-
camera forward through the room into a bright gallery hall — hero and works
|
|
151
|
-
index are one continuous camera journey, with the route updating mid-flight.
|
|
152
|
-
Work cards render as sheets of paper floating in the space, subtly warped,
|
|
153
|
-
with chromatic fringing at their edges; filter pills carry counts (All 20 /
|
|
154
|
-
Branding 5…); butterfly/petal particles drift through; HUD = wordmark
|
|
155
|
-
top-left, Index/Projects/Contact top-right, globe "world" button bottom-center,
|
|
156
|
-
© year bottom-right. Heavy uniform film grain glues all of it together.
|
|
157
|
-
- **Single-flower lab page (verified on unseen.co/labs/blossom)**: the minimal
|
|
158
|
-
form of the genre — one WebGL subject (a blooming particle flower) on one
|
|
159
|
-
canvas, Lenis smooth scroll, headlines split into `overflow-hidden` line
|
|
160
|
-
masks (`splittext--line`) sliding up on arrival, and a two-family type system
|
|
161
|
-
(light serif with true italics — SangBleu-style — mixed into a neutral
|
|
162
|
-
grotesk). No drag, no sound, no HUD maximalism: one subject + line-mask type
|
|
163
|
-
+ smooth scroll already reads as the genre. Start here; add §2 gestures only
|
|
164
|
-
if the brief earns them. (unseen.co's own home additionally runs a
|
|
165
|
-
`webgl-rain` particle layer over the scene — weather as grade texture.)
|
|
166
|
-
- **Particle identity page**: brand mark as 50k particles that disperse on
|
|
167
|
-
pointer force and reform; sections change the formation target; scroll
|
|
168
|
-
velocity agitates; reduced-motion = the formed mark as a still.
|
|
169
|
-
- **Cinematic case study**: dark editorial page, media rendered through the
|
|
170
|
-
distortion layer, velocity-reactive stretch on scroll, chapter numerals,
|
|
171
|
-
one raymarched-light hero; DOM otherwise quiet and typographic.
|
|
172
|
-
- **Budget version (no GPGPU)**: pre-rendered fluid/particle video loops as
|
|
173
|
-
background + `mix-blend-mode` type, CSS grain, velocity-reactive transforms
|
|
174
|
-
on real DOM, click-and-hold in JS only. 70% of the mood, runs on anything —
|
|
175
|
-
the right call below motion dial 8 or on content-heavy sites.
|
|
176
|
-
|
|
177
|
-
## 6.5 The unseen.co replication blueprint (build order)
|
|
178
|
-
|
|
179
|
-
When the brief is "make it like unseen.co" (or this genre at dial 9–10), build
|
|
180
|
-
in THIS order — each layer works before the next starts. Do not attempt it as
|
|
181
|
-
one monolithic rewrite; do not stop after step 2 and call it done.
|
|
182
|
-
|
|
183
|
-
**Manifest:** `npm i gsap lenis three @react-three/fiber @react-three/drei
|
|
184
|
-
@react-three/postprocessing` (React) or `gsap lenis three` (vanilla/OGL).
|
|
185
|
-
Wire Lenis + ScrollTrigger per motion.md §8 first.
|
|
186
|
-
|
|
187
|
-
**Layer stack (bottom → top):** persistent WebGL canvas (fixed, full-viewport)
|
|
188
|
-
→ real DOM content (the accessible document) → HUD chrome (fixed corners) →
|
|
189
|
-
grain overlay → custom cursor. Each is its own component/layer mounted in the
|
|
190
|
-
root layout, outside the router swap point (immersive.md §1).
|
|
191
|
-
|
|
192
|
-
1. **Smooth scroll + type system.** Lenis running, line-mask reveals on every
|
|
193
|
-
heading (motion.md §8), the two-family type mix (grotesk + true-italic
|
|
194
|
-
serif accents in one headline), numbered HUD chrome (`01 Index`…). The page
|
|
195
|
-
should already feel 60% of the genre with zero WebGL.
|
|
196
|
-
2. **The living surface.** One canvas, one simulation family (§1). Start with
|
|
197
|
-
the highest effort/impact ratio: a shader plane with fbm + domain-warp fed
|
|
198
|
-
by palette uniforms and damped `uMouse` velocity (3d.md §4), or the
|
|
199
|
-
pre-rendered-video budget path (§6). Grain overlay goes in now — it glues
|
|
200
|
-
DOM and canvas into one graded image.
|
|
201
|
-
3. **Scroll = camera.** Tall scroll container drives a camera dolly / scene
|
|
202
|
-
progress via damped scrub (immersive.md §4). Section copy floats in at
|
|
203
|
-
progress stops. This is the "one continuous shot" that separates the genre
|
|
204
|
-
from a parallax page.
|
|
205
|
-
4. **Media through the surface.** Sync DOM image/work-card rects to texture
|
|
206
|
-
planes in the canvas (measure with `getBoundingClientRect` on resize +
|
|
207
|
-
scroll, don't guess) so hover/velocity distortion touches them; keep the
|
|
208
|
-
real DOM images underneath for a11y/fallback (§1). Velocity-reactive
|
|
209
|
-
stretch/RGB-split on scroll flicks, hard-clamped (§2).
|
|
210
|
-
5. **Gestures + cursor.** Pick 2–3 from §2 (drag-to-explore, click & hold,
|
|
211
|
-
cursor-as-instrument), each labeled, each with a keyboard/boring
|
|
212
|
-
equivalent. Custom cursor: one dot, damped follow, contextual labels.
|
|
213
|
-
6. **Doors and passages.** Preloader (real progress, choreographed reveal into
|
|
214
|
-
the idling scene — immersive.md §2), entry gate if sound ships (§3), route
|
|
215
|
-
transitions driven by the simulation (§4).
|
|
216
|
-
7. **The floor.** Reduced-motion still frame, degrade ladder, contrast scrim,
|
|
217
|
-
mobile strategy (poster or halved sim), pause on hidden (§5).
|
|
218
|
-
|
|
219
|
-
Ship checkpoint after every layer: run it, screenshot it, READ THE CONSOLE,
|
|
220
|
-
click through it (ux.md §7's audit on the touched surface), keep it working.
|
|
221
|
-
A failed step 4 must not take down steps 1–3 — each layer's fallback is the
|
|
222
|
-
previous layer, and the runtime gate (DESIGN.md §12.18) runs on the final
|
|
223
|
-
stack, not just the last layer added.
|
|
224
|
-
|
|
225
|
-
## 7. Changing an existing site into this
|
|
226
|
-
|
|
227
|
-
Same rule as immersive.md §8: this register cannot be CSS'd onto a conventional
|
|
228
|
-
page — it needs the canvas surface, the reduced composition, and usually a
|
|
229
|
-
content edit (views hold less). Use DESIGN.md §11's transformation-depth ladder;
|
|
230
|
-
this genre is almost always rung 3 (Restructure) or 4 (Reimagine). Offer the
|
|
231
|
-
ladder, get the user's pick, then rebuild for real — and offer the budget recipe
|
|
232
|
-
(§6) as the rung-2 alternative for users who want the mood without the rebuild.
|
|
1
|
+
# Dreative Specialist Skill — Cinematic WebGL & Experiential Interfaces
|
|
2
|
+
|
|
3
|
+
## Contract
|
|
4
|
+
|
|
5
|
+
Follow `../references/SKILL_CONTRACT.md`. Dependencies: `motion`, `interaction`,
|
|
6
|
+
`media`, `ux`, `mobile`; add `3d` only for real spatial rendering. Deliver a
|
|
7
|
+
coherent living-surface system, gesture/keyboard parity, consent-aware audio,
|
|
8
|
+
budgets, calm fallback, and runtime evidence.
|
|
9
|
+
|
|
10
|
+
Load for a film-like experiential register—not merely a dark palette.
|
|
11
|
+
|
|
12
|
+
## 0. Explore before recipes
|
|
13
|
+
|
|
14
|
+
Record three original concepts based on brand material, subject, assets, and
|
|
15
|
+
visitor role before opening `../recipes/cinematic-recipes.md`. Decide what the
|
|
16
|
+
surface represents and how it develops; never begin with “add particles.”
|
|
17
|
+
|
|
18
|
+
## 1. Hard gates
|
|
19
|
+
|
|
20
|
+
- The experience communicates and works without WebGL, sound, fine pointer, or
|
|
21
|
+
full motion.
|
|
22
|
+
- Audio is user-initiated, visible, controllable, and never required.
|
|
23
|
+
- Gesture interactions have keyboard/touch/conventional equivalents.
|
|
24
|
+
- Content stays readable; effect layers never intercept or occlude controls.
|
|
25
|
+
- Runtime fallbacks, reduced motion, mobile, loading, frame time, and asset
|
|
26
|
+
budgets are tested with structured proof.
|
|
27
|
+
|
|
28
|
+
## 2. Cinematic composition
|
|
29
|
+
|
|
30
|
+
Use a limited visual cast: one living surface/material system, a disciplined type
|
|
31
|
+
system, one graded palette/light direction, and a small gesture vocabulary.
|
|
32
|
+
Transitions belong to that same material logic. Film grain, refraction, velocity,
|
|
33
|
+
or particles are means—not the concept.
|
|
34
|
+
|
|
35
|
+
At expressive/award use diversity or development. Cinematic coherence often
|
|
36
|
+
chooses development: the living surface becomes atmosphere, media boundary, and
|
|
37
|
+
navigation instrument across different chapters, supported by quieter type and
|
|
38
|
+
input feedback.
|
|
39
|
+
|
|
40
|
+
## 3. Interaction and sound
|
|
41
|
+
|
|
42
|
+
Choose only gestures that expose meaning: drag to explore, click/hold to focus,
|
|
43
|
+
cursor as an instrument, velocity response, or chapter scrub. Label unfamiliar
|
|
44
|
+
gestures and provide boring equivalents. Sound supports interaction/state with
|
|
45
|
+
restrained gain and respects mute/visibility/route lifecycle.
|
|
46
|
+
|
|
47
|
+
## 4. Planning and verification
|
|
48
|
+
|
|
49
|
+
Plan surface meaning, states, drivers, media identity, transition logic, gestures,
|
|
50
|
+
audio consent, mobile/reduced-motion form, loading/failure fallback, and budgets.
|
|
51
|
+
|
|
52
|
+
Verify live surface change, media identity/alignment, gesture alternatives,
|
|
53
|
+
sound consent/mute, full journey and reverse, mobile, reduced motion, console,
|
|
54
|
+
frame-time/FPS, asset weight, hidden-tab pause, and context-loss fallback.
|
|
55
|
+
|
|
56
|
+
Recipe reference: `../recipes/cinematic-recipes.md`, after exploration only.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Dreative Specialist Skill — Experimental / Creative-Mindset Dial
|
|
2
|
+
|
|
3
|
+
## Contract
|
|
4
|
+
|
|
5
|
+
Follow `../references/SKILL_CONTRACT.md`. Dependencies: `motion`, `interaction`,
|
|
6
|
+
`media`, `ux`, `mobile`. Explore one named provocation per major section, then
|
|
7
|
+
select only the strongest two or three to ship. Do not load as a synonym for
|
|
8
|
+
visual quality. Done means the selected peaks are visibly implemented while the
|
|
9
|
+
remaining sections prepare, support, contrast, transform, or rest; navigation,
|
|
10
|
+
reading, touch, and reduced motion remain clear.
|
|
11
|
+
|
|
12
|
+
Load this file when `plan.skills` includes `experimental`, or the brief asks for
|
|
13
|
+
"crazy", "bizarre", "never seen before", "way more creative", "wow factor", or
|
|
14
|
+
stacks award-site ambition with 3d/immersive/cinematic and clearly wants the
|
|
15
|
+
result to go further than a competent, safe execution of those genres.
|
|
16
|
+
|
|
17
|
+
This file is not a genre on its own — it STACKS with `motion.md`, `3d.md`,
|
|
18
|
+
`immersive.md`, `cinematic.md`, `media.md`. It is a mindset correction for a
|
|
19
|
+
specific, recurring failure: builds that hit every named treatment competently
|
|
20
|
+
but still read as *effects placed on a static page* rather than a page that
|
|
21
|
+
*behaves* differently as you move through it. The gap between those two is
|
|
22
|
+
where the top-tier reference sites (PLAN.md's calibration list) actually live.
|
|
23
|
+
|
|
24
|
+
## 0. See the whole scroll, not one frame at a time
|
|
25
|
+
|
|
26
|
+
The most common miss: designing each section as a still composition and then
|
|
27
|
+
bolting particles/parallax onto it, instead of asking what the SAME asset does
|
|
28
|
+
across its entire scroll range.
|
|
29
|
+
|
|
30
|
+
- Before writing a section, sketch its motion as a **timeline, not a pose**:
|
|
31
|
+
what does this look like at scroll 0%, 40%, 100%? An image that is static at
|
|
32
|
+
every one of those points and only has particles drifting in front of it has
|
|
33
|
+
not been treated — the particles are decoration, not behavior.
|
|
34
|
+
- Prefer techniques where the ASSET ITSELF changes: a photo that dissolves into
|
|
35
|
+
its constituent color field and reassembles as a different crop; a product
|
|
36
|
+
render that the camera physically orbits as you scroll, revealing a side you
|
|
37
|
+
hadn't seen; a shader that reads scroll velocity and warps/refracts the media
|
|
38
|
+
plane harder the faster you scroll, settling to true crispness only at rest.
|
|
39
|
+
- Treat interaction inputs (scroll, cursor, drag, time-idle) as free stagehands,
|
|
40
|
+
not one-off triggers: the same input should be able to drive multiple things
|
|
41
|
+
at once (camera position AND grain intensity AND type kerning) so the page
|
|
42
|
+
feels like one system reacting, not independent effects that happen to share
|
|
43
|
+
a page.
|
|
44
|
+
|
|
45
|
+
## 1. Texture and material, not smooth plain geometry
|
|
46
|
+
|
|
47
|
+
A 3D object with default lighting and a flat color material reads as a stock
|
|
48
|
+
asset even when it renders and animates cleanly. Before shipping any custom 3D
|
|
49
|
+
element:
|
|
50
|
+
|
|
51
|
+
- Give it a **material identity**: roughness/metalness maps, a normal map or
|
|
52
|
+
procedural bump (even a cheap noise-driven `onBeforeCompile`/shader tweak),
|
|
53
|
+
fresnel/rim light, or a physically-motivated finish (brushed metal, wet
|
|
54
|
+
ceramic, frosted glass, matte paper) — pick ONE that fits the brand and
|
|
55
|
+
commit, rather than leaving `MeshStandardMaterial` defaults.
|
|
56
|
+
- Light it like a product shot, not a demo scene: a key light + rim light +
|
|
57
|
+
soft fill, an environment map (even a cheap generated HDRI/gradient cubemap)
|
|
58
|
+
for reflections — flat ambient-only lighting is what makes geometry look
|
|
59
|
+
"plain" even when the model is good.
|
|
60
|
+
- If the model IS meant to look clean/minimal (a deliberate register choice),
|
|
61
|
+
say so explicitly in the plan — plainness should be a decision, not the
|
|
62
|
+
default outcome of skipping material work.
|
|
63
|
+
|
|
64
|
+
## 2. Dimension shifts as a real technique, not just camera dolly
|
|
65
|
+
|
|
66
|
+
"Zoom when I scroll" and "go different 3D dimensions and views" point at scroll
|
|
67
|
+
or interaction driving genuine viewpoint change, beyond the immersive.md scroll-
|
|
68
|
+
as-travel camera path:
|
|
69
|
+
|
|
70
|
+
- **Depth dive**: scroll or click zooms PAST the current plane into a nested
|
|
71
|
+
scene (a product card's texture becomes the next section's background at
|
|
72
|
+
full zoom — one continuous zoom, not a cut).
|
|
73
|
+
- **Orbit reveal**: dragging or scroll-linked rotation swings the camera around
|
|
74
|
+
a subject to a genuinely different vantage (front → 3/4 → side), timed to
|
|
75
|
+
reveal new content at each stop rather than just spinning for spectacle.
|
|
76
|
+
- **World swap**: a full scene transition where the "rules" change (palette
|
|
77
|
+
inverts, gravity/particle behavior flips, camera projection shifts from
|
|
78
|
+
perspective to a flattened orthographic beat) — used sparingly, at most once
|
|
79
|
+
or twice per page, as a structural beat (e.g. between "problem" and
|
|
80
|
+
"solution" sections), not as constant novelty.
|
|
81
|
+
- Every dimension shift still obeys immersive.md §2's rule: something must
|
|
82
|
+
persist across the cut (the subject, the camera, a color) or it reads as a
|
|
83
|
+
jarring reload, not a journey.
|
|
84
|
+
|
|
85
|
+
## 3. Explore broadly, ship a hierarchy
|
|
86
|
+
|
|
87
|
+
Competent execution of the named treatments is the floor, not the ceiling.
|
|
88
|
+
When the user has opted into `experimental`:
|
|
89
|
+
|
|
90
|
+
- For each blueprint row, after picking its treatment(s), ask "what is the
|
|
91
|
+
ONE non-obvious version of this?" and write it down even if it's risky — a
|
|
92
|
+
gallery that disperses into a particle field and reforms as the next item
|
|
93
|
+
instead of a slide/fade; a form where each correct field entry visibly
|
|
94
|
+
feeds a growing 3D structure; a footer that only fully renders once you've
|
|
95
|
+
scrolled back UP to summon it. Not every idea survives the fallback
|
|
96
|
+
requirement (PLAN.md §2), but `experimentalPlan.candidates` should contain at
|
|
97
|
+
least one per major section, not zero.
|
|
98
|
+
- Select only the strongest two or three candidates to ship. Every unselected
|
|
99
|
+
section receives an explicit supporting role: prepare a peak, rest after it,
|
|
100
|
+
contrast it, carry connective tissue, or transform its residue. Experimental
|
|
101
|
+
means hierarchy and surprise, not every section competing as a technical demo.
|
|
102
|
+
- Reference sites should be read as **systems to extract principles from**,
|
|
103
|
+
not screenshots to imitate: note what makes their asset behave (a shader
|
|
104
|
+
uniform driven by scroll velocity, a shared depth-of-field across the whole
|
|
105
|
+
scene, type that occludes/is-occluded by 3D subjects) and reapply the
|
|
106
|
+
PRINCIPLE to Northwind/the actual brand — copying their literal palette or
|
|
107
|
+
layout without the underlying system produces exactly the "images still
|
|
108
|
+
static, objects still plain" outcome this file exists to prevent.
|
|
109
|
+
- Every ambitious idea still needs 3d.md §5 / motion.md §5 performance
|
|
110
|
+
budgets and a concrete fallback (PLAN.md §2) — experimental means bolder
|
|
111
|
+
ideas, not exemption from the runtime verification gate.
|