dreative 0.4.1 → 0.5.1
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 +35 -35
- package/dist/cli/index.js +38 -1
- package/dist/server/ai.js +177 -0
- package/dist/server/preview.js +73 -73
- package/dist/ui/index.html +11 -11
- package/package.json +1 -1
- package/skill/dreative/DESIGN.md +206 -15
- package/skill/dreative/PLAN.md +455 -157
- package/skill/dreative/SKILL.md +149 -128
- package/skill/dreative/skills/3d.md +113 -3
- package/skill/dreative/skills/cinematic.md +232 -232
- package/skill/dreative/skills/experimental.md +98 -0
- package/skill/dreative/skills/immersive.md +223 -223
- package/skill/dreative/skills/media.md +564 -216
- package/skill/dreative/skills/mobile.md +117 -117
- package/skill/dreative/skills/motion.md +31 -4
- package/skill/dreative/skills/refined.md +102 -102
- package/skill/dreative/skills/ux.md +144 -144
|
@@ -1,232 +1,232 @@
|
|
|
1
|
-
# Dreative Specialist Skill — Cinematic WebGL & Experiential Interfaces
|
|
2
|
-
|
|
3
|
-
Load this file when `plan.skills` includes `cinematic`, or the brief/prompt asks
|
|
4
|
-
for a dark cinematic shader-driven look, "sites like unseen.co", drag-to-explore
|
|
5
|
-
navigation, click-and-hold interactions, fluid/particle distortion effects,
|
|
6
|
-
sound design, or "experimental / experiential" interfaces. This is the genre's
|
|
7
|
-
high-fashion end: fewer elements, extreme polish, the interface itself behaves
|
|
8
|
-
like a graded film.
|
|
9
|
-
|
|
10
|
-
It STACKS with `immersive.md` (world architecture — read it when routes/scenes
|
|
11
|
-
are involved) and `3d.md` (shader craft). DESIGN.md still governs type and
|
|
12
|
-
accessibility floors. It is universal — apply directly to any codebase; the
|
|
13
|
-
Dreative editor is optional. This is an OPT-IN aesthetic: propose it only when
|
|
14
|
-
the brief supports it; it is never the default answer to "make it nicer".
|
|
15
|
-
|
|
16
|
-
## 0. The register: cinematic restraint
|
|
17
|
-
|
|
18
|
-
Where immersive.md builds a place, this genre builds a MOOD. Its rules:
|
|
19
|
-
|
|
20
|
-
- **Atmosphere is the canvas.** Commit to ONE graded atmosphere and grade
|
|
21
|
-
everything into it. Dark cinematic (near-black #0a0a0c-ish base, tinted, never
|
|
22
|
-
pure #000, stage-light falloff on one subject) is the common form — but pale
|
|
23
|
-
worlds are equally genre-valid: UNSEEN's actual site is a blush-pink flooded
|
|
24
|
-
dream-room with prismatic dispersion on its arches and soft daylight. What
|
|
25
|
-
makes it cinematic is not darkness but unity of light: one light temperature,
|
|
26
|
-
one falloff logic, one grain, everything (DOM included) living inside it.
|
|
27
|
-
- **Radical reduction.** Each view holds ONE visual subject + a few lines of
|
|
28
|
-
type + numbered chrome. If a section needs three columns of content, it does
|
|
29
|
-
not belong in this register — move it to a conventional subpage.
|
|
30
|
-
- **Everything is graded.** One post-processing/color pass unifies DOM and
|
|
31
|
-
canvas: film grain (3-6%), subtle vignette, bloom only on emissive accents,
|
|
32
|
-
optional chromatic aberration at transition peaks ONLY (constant CA = broken
|
|
33
|
-
monitor). The grade is one system — define it once, apply globally.
|
|
34
|
-
- **Typography as credits.** Restrained scale (this genre whispers where
|
|
35
|
-
immersive shouts): refined grotesk or editorial serif, generous tracking on
|
|
36
|
-
small mono/small-caps labels, and the signature **numbered index** chrome —
|
|
37
|
-
`01 Index`, `02 Projects`, coordinates, timestamps — laid out like a film
|
|
38
|
-
slate. Big type appears sparingly and is often distorted by the shader layer
|
|
39
|
-
as it passes (see §2).
|
|
40
|
-
|
|
41
|
-
## 1. The living surface (the genre's engine)
|
|
42
|
-
|
|
43
|
-
The background is not decoration — it's a continuously-running simulation the
|
|
44
|
-
whole interface sits on. One fullscreen canvas, one of these families:
|
|
45
|
-
|
|
46
|
-
- **Fluid distortion** (the UNSEEN signature): GPGPU fluid sim or cheap
|
|
47
|
-
velocity-buffer approximation; pointer movement injects velocity; the field
|
|
48
|
-
distorts whatever sits under it — images, WebGL text copies of the headlines,
|
|
49
|
-
the scene itself. Intensity tuned so idle = near-still, movement = silky wake.
|
|
50
|
-
- **Particle field**: 10k-100k GPU particles (FBO/GPGPU, see 3d.md §5) forming
|
|
51
|
-
a subject — a logo, a face, a landscape — that disperses and reforms on
|
|
52
|
-
interaction or route change. Curl noise for drift; mouse as attractor/repulsor.
|
|
53
|
-
- **Volumetric/raymarched fog + light**: a raymarched or layered-noise volume
|
|
54
|
-
with one light source tracking the pointer or the active section.
|
|
55
|
-
|
|
56
|
-
Rules: ONE simulation per site, palette fed from the page tokens, `uTime` slow
|
|
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
|
+
Load this file when `plan.skills` includes `cinematic`, or the brief/prompt asks
|
|
4
|
+
for a dark cinematic shader-driven look, "sites like unseen.co", drag-to-explore
|
|
5
|
+
navigation, click-and-hold interactions, fluid/particle distortion effects,
|
|
6
|
+
sound design, or "experimental / experiential" interfaces. This is the genre's
|
|
7
|
+
high-fashion end: fewer elements, extreme polish, the interface itself behaves
|
|
8
|
+
like a graded film.
|
|
9
|
+
|
|
10
|
+
It STACKS with `immersive.md` (world architecture — read it when routes/scenes
|
|
11
|
+
are involved) and `3d.md` (shader craft). DESIGN.md still governs type and
|
|
12
|
+
accessibility floors. It is universal — apply directly to any codebase; the
|
|
13
|
+
Dreative editor is optional. This is an OPT-IN aesthetic: propose it only when
|
|
14
|
+
the brief supports it; it is never the default answer to "make it nicer".
|
|
15
|
+
|
|
16
|
+
## 0. The register: cinematic restraint
|
|
17
|
+
|
|
18
|
+
Where immersive.md builds a place, this genre builds a MOOD. Its rules:
|
|
19
|
+
|
|
20
|
+
- **Atmosphere is the canvas.** Commit to ONE graded atmosphere and grade
|
|
21
|
+
everything into it. Dark cinematic (near-black #0a0a0c-ish base, tinted, never
|
|
22
|
+
pure #000, stage-light falloff on one subject) is the common form — but pale
|
|
23
|
+
worlds are equally genre-valid: UNSEEN's actual site is a blush-pink flooded
|
|
24
|
+
dream-room with prismatic dispersion on its arches and soft daylight. What
|
|
25
|
+
makes it cinematic is not darkness but unity of light: one light temperature,
|
|
26
|
+
one falloff logic, one grain, everything (DOM included) living inside it.
|
|
27
|
+
- **Radical reduction.** Each view holds ONE visual subject + a few lines of
|
|
28
|
+
type + numbered chrome. If a section needs three columns of content, it does
|
|
29
|
+
not belong in this register — move it to a conventional subpage.
|
|
30
|
+
- **Everything is graded.** One post-processing/color pass unifies DOM and
|
|
31
|
+
canvas: film grain (3-6%), subtle vignette, bloom only on emissive accents,
|
|
32
|
+
optional chromatic aberration at transition peaks ONLY (constant CA = broken
|
|
33
|
+
monitor). The grade is one system — define it once, apply globally.
|
|
34
|
+
- **Typography as credits.** Restrained scale (this genre whispers where
|
|
35
|
+
immersive shouts): refined grotesk or editorial serif, generous tracking on
|
|
36
|
+
small mono/small-caps labels, and the signature **numbered index** chrome —
|
|
37
|
+
`01 Index`, `02 Projects`, coordinates, timestamps — laid out like a film
|
|
38
|
+
slate. Big type appears sparingly and is often distorted by the shader layer
|
|
39
|
+
as it passes (see §2).
|
|
40
|
+
|
|
41
|
+
## 1. The living surface (the genre's engine)
|
|
42
|
+
|
|
43
|
+
The background is not decoration — it's a continuously-running simulation the
|
|
44
|
+
whole interface sits on. One fullscreen canvas, one of these families:
|
|
45
|
+
|
|
46
|
+
- **Fluid distortion** (the UNSEEN signature): GPGPU fluid sim or cheap
|
|
47
|
+
velocity-buffer approximation; pointer movement injects velocity; the field
|
|
48
|
+
distorts whatever sits under it — images, WebGL text copies of the headlines,
|
|
49
|
+
the scene itself. Intensity tuned so idle = near-still, movement = silky wake.
|
|
50
|
+
- **Particle field**: 10k-100k GPU particles (FBO/GPGPU, see 3d.md §5) forming
|
|
51
|
+
a subject — a logo, a face, a landscape — that disperses and reforms on
|
|
52
|
+
interaction or route change. Curl noise for drift; mouse as attractor/repulsor.
|
|
53
|
+
- **Volumetric/raymarched fog + light**: a raymarched or layered-noise volume
|
|
54
|
+
with one light source tracking the pointer or the active section.
|
|
55
|
+
|
|
56
|
+
Rules: ONE simulation per site, palette fed from the page tokens, `uTime` slow
|
|
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.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Dreative Specialist Skill — Experimental / Creative-Mindset Dial
|
|
2
|
+
|
|
3
|
+
Load this file when `plan.skills` includes `experimental`, or the brief asks for
|
|
4
|
+
"crazy", "bizarre", "never seen before", "way more creative", "wow factor", or
|
|
5
|
+
stacks award-site ambition with 3d/immersive/cinematic and clearly wants the
|
|
6
|
+
result to go further than a competent, safe execution of those genres.
|
|
7
|
+
|
|
8
|
+
This file is not a genre on its own — it STACKS with `motion.md`, `3d.md`,
|
|
9
|
+
`immersive.md`, `cinematic.md`, `media.md`. It is a mindset correction for a
|
|
10
|
+
specific, recurring failure: builds that hit every named treatment competently
|
|
11
|
+
but still read as *effects placed on a static page* rather than a page that
|
|
12
|
+
*behaves* differently as you move through it. The gap between those two is
|
|
13
|
+
where the top-tier reference sites (PLAN.md's calibration list) actually live.
|
|
14
|
+
|
|
15
|
+
## 0. See the whole scroll, not one frame at a time
|
|
16
|
+
|
|
17
|
+
The most common miss: designing each section as a still composition and then
|
|
18
|
+
bolting particles/parallax onto it, instead of asking what the SAME asset does
|
|
19
|
+
across its entire scroll range.
|
|
20
|
+
|
|
21
|
+
- Before writing a section, sketch its motion as a **timeline, not a pose**:
|
|
22
|
+
what does this look like at scroll 0%, 40%, 100%? An image that is static at
|
|
23
|
+
every one of those points and only has particles drifting in front of it has
|
|
24
|
+
not been treated — the particles are decoration, not behavior.
|
|
25
|
+
- Prefer techniques where the ASSET ITSELF changes: a photo that dissolves into
|
|
26
|
+
its constituent color field and reassembles as a different crop; a product
|
|
27
|
+
render that the camera physically orbits as you scroll, revealing a side you
|
|
28
|
+
hadn't seen; a shader that reads scroll velocity and warps/refracts the media
|
|
29
|
+
plane harder the faster you scroll, settling to true crispness only at rest.
|
|
30
|
+
- Treat interaction inputs (scroll, cursor, drag, time-idle) as free stagehands,
|
|
31
|
+
not one-off triggers: the same input should be able to drive multiple things
|
|
32
|
+
at once (camera position AND grain intensity AND type kerning) so the page
|
|
33
|
+
feels like one system reacting, not independent effects that happen to share
|
|
34
|
+
a page.
|
|
35
|
+
|
|
36
|
+
## 1. Texture and material, not smooth plain geometry
|
|
37
|
+
|
|
38
|
+
A 3D object with default lighting and a flat color material reads as a stock
|
|
39
|
+
asset even when it renders and animates cleanly. Before shipping any custom 3D
|
|
40
|
+
element:
|
|
41
|
+
|
|
42
|
+
- Give it a **material identity**: roughness/metalness maps, a normal map or
|
|
43
|
+
procedural bump (even a cheap noise-driven `onBeforeCompile`/shader tweak),
|
|
44
|
+
fresnel/rim light, or a physically-motivated finish (brushed metal, wet
|
|
45
|
+
ceramic, frosted glass, matte paper) — pick ONE that fits the brand and
|
|
46
|
+
commit, rather than leaving `MeshStandardMaterial` defaults.
|
|
47
|
+
- Light it like a product shot, not a demo scene: a key light + rim light +
|
|
48
|
+
soft fill, an environment map (even a cheap generated HDRI/gradient cubemap)
|
|
49
|
+
for reflections — flat ambient-only lighting is what makes geometry look
|
|
50
|
+
"plain" even when the model is good.
|
|
51
|
+
- If the model IS meant to look clean/minimal (a deliberate register choice),
|
|
52
|
+
say so explicitly in the plan — plainness should be a decision, not the
|
|
53
|
+
default outcome of skipping material work.
|
|
54
|
+
|
|
55
|
+
## 2. Dimension shifts as a real technique, not just camera dolly
|
|
56
|
+
|
|
57
|
+
"Zoom when I scroll" and "go different 3D dimensions and views" point at scroll
|
|
58
|
+
or interaction driving genuine viewpoint change, beyond the immersive.md scroll-
|
|
59
|
+
as-travel camera path:
|
|
60
|
+
|
|
61
|
+
- **Depth dive**: scroll or click zooms PAST the current plane into a nested
|
|
62
|
+
scene (a product card's texture becomes the next section's background at
|
|
63
|
+
full zoom — one continuous zoom, not a cut).
|
|
64
|
+
- **Orbit reveal**: dragging or scroll-linked rotation swings the camera around
|
|
65
|
+
a subject to a genuinely different vantage (front → 3/4 → side), timed to
|
|
66
|
+
reveal new content at each stop rather than just spinning for spectacle.
|
|
67
|
+
- **World swap**: a full scene transition where the "rules" change (palette
|
|
68
|
+
inverts, gravity/particle behavior flips, camera projection shifts from
|
|
69
|
+
perspective to a flattened orthographic beat) — used sparingly, at most once
|
|
70
|
+
or twice per page, as a structural beat (e.g. between "problem" and
|
|
71
|
+
"solution" sections), not as constant novelty.
|
|
72
|
+
- Every dimension shift still obeys immersive.md §3's rule: something must
|
|
73
|
+
persist across the cut (the subject, the camera, a color) or it reads as a
|
|
74
|
+
jarring reload, not a journey.
|
|
75
|
+
|
|
76
|
+
## 3. Budget for one deliberately unusual idea per major section
|
|
77
|
+
|
|
78
|
+
Competent execution of the named treatments is the floor, not the ceiling.
|
|
79
|
+
When the user has opted into `experimental`:
|
|
80
|
+
|
|
81
|
+
- For each blueprint row, after picking its treatment(s), ask "what is the
|
|
82
|
+
ONE non-obvious version of this?" and write it down even if it's risky — a
|
|
83
|
+
gallery that disperses into a particle field and reforms as the next item
|
|
84
|
+
instead of a slide/fade; a form where each correct field entry visibly
|
|
85
|
+
feeds a growing 3D structure; a footer that only fully renders once you've
|
|
86
|
+
scrolled back UP to summon it. Not every idea survives the fallback
|
|
87
|
+
requirement (PLAN.md §2), but the blueprint should contain at least one per
|
|
88
|
+
major section, not zero.
|
|
89
|
+
- Reference sites should be read as **systems to extract principles from**,
|
|
90
|
+
not screenshots to imitate: note what makes their asset behave (a shader
|
|
91
|
+
uniform driven by scroll velocity, a shared depth-of-field across the whole
|
|
92
|
+
scene, type that occludes/is-occluded by 3D subjects) and reapply the
|
|
93
|
+
PRINCIPLE to Northwind/the actual brand — copying their literal palette or
|
|
94
|
+
layout without the underlying system produces exactly the "images still
|
|
95
|
+
static, objects still plain" outcome this file exists to prevent.
|
|
96
|
+
- Every ambitious idea still needs 3d.md §7 / motion.md §6 performance
|
|
97
|
+
budgets and a concrete fallback (PLAN.md §2) — experimental means bolder
|
|
98
|
+
ideas, not exemption from the runtime verification gate.
|