luckiest-co 1.0.17 → 1.0.18
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/luckiest-ab-testing/SKILL.md +1 -1
- package/skills/luckiest-ad-creative/SKILL.md +1 -1
- package/skills/luckiest-ads/SKILL.md +1 -1
- package/skills/luckiest-advisors/SKILL.md +1 -1
- package/skills/luckiest-aeo-grader/SKILL.md +1 -1
- package/skills/luckiest-ai-seo/SKILL.md +1 -1
- package/skills/luckiest-analytics/SKILL.md +1 -1
- package/skills/luckiest-aso/SKILL.md +1 -1
- package/skills/luckiest-churn-prevention/SKILL.md +1 -1
- package/skills/luckiest-co-marketing/SKILL.md +1 -1
- package/skills/luckiest-coder/SKILL.md +1 -1
- package/skills/luckiest-coder-brainstorming/SKILL.md +1 -1
- package/skills/luckiest-coder-consistency/SKILL.md +1 -1
- package/skills/luckiest-coder-constitution/SKILL.md +1 -1
- package/skills/luckiest-coder-debugging/SKILL.md +1 -1
- package/skills/luckiest-coder-dispatching-parallel-agents/SKILL.md +1 -1
- package/skills/luckiest-coder-executing-plans/SKILL.md +1 -1
- package/skills/luckiest-coder-finishing-a-branch/SKILL.md +1 -1
- package/skills/luckiest-coder-git-worktrees/SKILL.md +1 -1
- package/skills/luckiest-coder-guard/SKILL.md +1 -1
- package/skills/luckiest-coder-qa/SKILL.md +1 -1
- package/skills/luckiest-coder-receiving-code-review/SKILL.md +1 -1
- package/skills/luckiest-coder-requesting-code-review/SKILL.md +1 -1
- package/skills/luckiest-coder-shipping/SKILL.md +1 -1
- package/skills/luckiest-coder-subagent-driven-development/SKILL.md +1 -1
- package/skills/luckiest-coder-tdd/SKILL.md +1 -1
- package/skills/luckiest-coder-verification/SKILL.md +1 -1
- package/skills/luckiest-coder-writing-plans/SKILL.md +1 -1
- package/skills/luckiest-coder-writing-skills/SKILL.md +1 -1
- package/skills/luckiest-cold-email/SKILL.md +1 -1
- package/skills/luckiest-community-marketing/SKILL.md +1 -1
- package/skills/luckiest-competitor-profiling/SKILL.md +1 -1
- package/skills/luckiest-competitors/SKILL.md +1 -1
- package/skills/luckiest-content-strategy/SKILL.md +1 -1
- package/skills/luckiest-copy-editing/SKILL.md +1 -1
- package/skills/luckiest-copywriting/SKILL.md +1 -1
- package/skills/luckiest-cro/SKILL.md +1 -1
- package/skills/luckiest-customer-research/SKILL.md +1 -1
- package/skills/luckiest-design-website/ATTRIBUTION.md +38 -0
- package/skills/luckiest-design-website/CHANGELOG.md +104 -0
- package/skills/luckiest-design-website/LICENSE +21 -0
- package/skills/luckiest-design-website/SKILL.md +372 -0
- package/skills/luckiest-design-website/UPSTREAM-CHANGELOG.md +526 -0
- package/skills/luckiest-design-website/engine/scrollcraft.css +432 -0
- package/skills/luckiest-design-website/engine/scrollcraft.js +1167 -0
- package/skills/luckiest-design-website/evals/evals.json +33 -0
- package/skills/luckiest-design-website/references/assets.md +286 -0
- package/skills/luckiest-design-website/references/device-diag.html +214 -0
- package/skills/luckiest-design-website/references/devices.md +466 -0
- package/skills/luckiest-design-website/references/feel.md +277 -0
- package/skills/luckiest-design-website/references/registry-examples.md +305 -0
- package/skills/luckiest-design-website/references/taste.md +304 -0
- package/skills/luckiest-design-website/references/template.html +138 -0
- package/skills/luckiest-design-website/references/uniqueness.md +480 -0
- package/skills/luckiest-design-website/references/verify.md +381 -0
- package/skills/luckiest-design-website/references/worldflight.md +349 -0
- package/skills/luckiest-design-website/references/worlds.md +178 -0
- package/skills/luckiest-design-website/scripts/doctor.mjs +177 -0
- package/skills/luckiest-design-website/scripts/encode.sh +80 -0
- package/skills/luckiest-design-website/scripts/kie.mjs +202 -0
- package/skills/luckiest-design-website/scripts/serve.mjs +52 -0
- package/skills/luckiest-design-website/scripts/shoot.mjs +644 -0
- package/skills/luckiest-design-website/scripts/workspace.mjs +106 -0
- package/skills/luckiest-design-website/scripts/worldflight-assert.mjs +273 -0
- package/skills/luckiest-design-website/templates/FINGERPRINTS.md +65 -0
- package/skills/luckiest-directory-submissions/SKILL.md +1 -1
- package/skills/luckiest-emails/SKILL.md +1 -1
- package/skills/luckiest-extract-design-system/SKILL.md +1 -1
- package/skills/luckiest-free-tools/SKILL.md +1 -1
- package/skills/luckiest-image/SKILL.md +1 -1
- package/skills/luckiest-launch/SKILL.md +1 -1
- package/skills/luckiest-lead-magnets/SKILL.md +1 -1
- package/skills/luckiest-marketing-ideas/SKILL.md +1 -1
- package/skills/luckiest-marketing-plan/SKILL.md +1 -1
- package/skills/luckiest-marketing-psychology/SKILL.md +1 -1
- package/skills/luckiest-model-router/SKILL.md +1 -1
- package/skills/luckiest-offers/SKILL.md +1 -1
- package/skills/luckiest-onboarding/SKILL.md +1 -1
- package/skills/luckiest-paywalls/SKILL.md +1 -1
- package/skills/luckiest-popups/SKILL.md +1 -1
- package/skills/luckiest-pricing/SKILL.md +1 -1
- package/skills/luckiest-product-marketing/SKILL.md +1 -1
- package/skills/luckiest-programmatic-seo/SKILL.md +1 -1
- package/skills/luckiest-prompt-rewrite/SKILL.md +1 -1
- package/skills/luckiest-prospecting/SKILL.md +1 -1
- package/skills/luckiest-public-relations/SKILL.md +1 -1
- package/skills/luckiest-referrals/SKILL.md +1 -1
- package/skills/luckiest-revops/SKILL.md +1 -1
- package/skills/luckiest-sales-enablement/SKILL.md +1 -1
- package/skills/luckiest-schema/SKILL.md +1 -1
- package/skills/luckiest-seo-audit/SKILL.md +1 -1
- package/skills/luckiest-session-handoff/SKILL.md +1 -1
- package/skills/luckiest-signup/SKILL.md +1 -1
- package/skills/luckiest-site-architecture/SKILL.md +1 -1
- package/skills/luckiest-sms/SKILL.md +1 -1
- package/skills/luckiest-social/SKILL.md +1 -1
- package/skills/luckiest-thinker/SKILL.md +1 -1
- package/skills/luckiest-trends/SKILL.md +1 -1
- package/skills/luckiest-video/SKILL.md +1 -1
- package/skills/luckiest-website-cloner/ATTRIBUTION.md +29 -0
- package/skills/luckiest-website-cloner/CHANGELOG.md +8 -0
- package/skills/luckiest-website-cloner/LICENSE +21 -0
- package/skills/luckiest-website-cloner/SKILL.md +289 -0
- package/skills/luckiest-website-cloner/references/builtin-browser-recipes.md +74 -0
- package/skills/luckiest-website-cloner/references/compositing.md +65 -0
- package/skills/luckiest-website-cloner/references/fidelity-fast-path.md +92 -0
- package/skills/luckiest-website-cloner/references/playwright-cli-recipes.md +68 -0
- package/skills/luckiest-website-cloner/references/teardown.md +142 -0
- package/skills/luckiest-website-cloner/references/visual-qa.md +102 -0
- package/skills/luckiest-website-cloner/scripts/build-bundle.cjs +12 -0
- package/skills/luckiest-website-cloner/scripts/motion-probe.js +423 -0
- package/skills/luckiest-website-cloner/scripts/surface-map.js +392 -0
- package/skills/luckiest-website-cloner/scripts/tokens-probe.js +178 -0
- package/skills/luckiest-website-cloner-dom/ATTRIBUTION.md +4 -0
- package/skills/luckiest-website-cloner-dom/CHANGELOG.md +8 -0
- package/skills/luckiest-website-cloner-dom/LICENSE +21 -0
- package/skills/luckiest-website-cloner-dom/SKILL.md +170 -0
- package/skills/luckiest-website-cloner-dom/references/asset-resolution.md +93 -0
- package/skills/luckiest-website-cloner-dom/references/interaction-fingerprints.md +85 -0
- package/skills/luckiest-website-cloner-remix/ATTRIBUTION.md +4 -0
- package/skills/luckiest-website-cloner-remix/CHANGELOG.md +8 -0
- package/skills/luckiest-website-cloner-remix/LICENSE +21 -0
- package/skills/luckiest-website-cloner-remix/SKILL.md +202 -0
- package/skills/luckiest-website-cloner-remix/references/directions.md +82 -0
- package/skills/luckiest-website-cloner-remix/references/reskin.md +84 -0
- package/skills/luckiest-website-cloner-remix/references/tweak-panel.md +72 -0
- package/skills/luckiest-website-cloner-remix/scripts/apply-overrides.cjs +105 -0
- package/skills/luckiest-website-cloner-remix/scripts/gallery.cjs +71 -0
- package/skills/luckiest-website-cloner-remix/scripts/tokenize-css.cjs +127 -0
- package/skills/luckiest-website-cloner-remix/scripts/tweak-panel.js +169 -0
- package/skills/luckiest-website-cloner-shaders/ATTRIBUTION.md +11 -0
- package/skills/luckiest-website-cloner-shaders/CHANGELOG.md +8 -0
- package/skills/luckiest-website-cloner-shaders/LICENSE +21 -0
- package/skills/luckiest-website-cloner-shaders/SKILL.md +129 -0
- package/skills/luckiest-website-cloner-shaders/references/capture-backends.md +89 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/SKILL.md +123 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/capture-backends.md +201 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/evidence-policy.md +93 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/operating-contract.md +82 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/qa-failure-policy.md +100 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/recon-kernel.md +206 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/replay-policy.md +145 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/shaders-com.md +212 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/source-analysis.md +112 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/surface-discovery.md +113 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/target-lock.md +205 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/three-shader-reconstruction.md +155 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/tool-capability-matrix.md +57 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/unicorn-studio.md +387 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/scripts/fetch-rendered-dom.mjs +178 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/scripts/scan-bundle.sh +80 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/extraction-report.md +41 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/known-gaps.md +14 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/qa-report.md +74 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/replay-manifest.json +147 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/run-state.json +75 -0
- package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/scout-card.json +106 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Nate Herk
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: luckiest-design-website
|
|
3
|
+
description: "Builds a premium, scroll-driven landing page for any business and holds it to a real design floor. Scroll is the timeline: video scrubs under the wheel, sections pin and advance, rails pan sideways, headlines assemble, the ground shifts colour. Interviews the human first, picks one of eight page grammars plus a bespoke signature move so no two builds share a skeleton, writes copy with luckiest-copywriting, builds from own footage or generated assets, ships real semantic HTML, then verifies by screenshotting its own scroll and grading contrast, dead scroll and INP. Use for 'scrollytelling', 'scroll animation site', 'a site where scrolling plays a video', 'Apple-style landing page', 'interactive landing page', 'make my brand a scroll experience', 'rebuild my landing page as an experience', 'this looks like a template', 'this looks AI-made', 'design my website', or any page that should feel like an experience rather than a document."
|
|
4
|
+
license: See ATTRIBUTION.md
|
|
5
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
6
|
+
metadata:
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
listing_id: luckiest-design-website
|
|
9
|
+
author: luckiest
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# luckiest-design-website
|
|
13
|
+
|
|
14
|
+
Scroll is the only input every visitor already knows. This skill treats it as a
|
|
15
|
+
timeline: the wheel is a scrubber, the page is a film with real text on top, and
|
|
16
|
+
each section behaves differently enough that the visitor keeps going.
|
|
17
|
+
|
|
18
|
+
**What it produces:** an interview brief, a page grammar, a journey, a feeling
|
|
19
|
+
curve with one engineered peak, a scroll score, one signature move, page copy,
|
|
20
|
+
assets, one real HTML page on a token-driven design floor, and a strip of
|
|
21
|
+
screenshots proving it holds at every scroll position.
|
|
22
|
+
|
|
23
|
+
## Staying current
|
|
24
|
+
|
|
25
|
+
On activation, call the Luckiest MCP `check_updates` tool with
|
|
26
|
+
`{ listingId: "c17e533c-42eb-48f2-a0ed-6ef717051512", installedSemver: "1.0.0" }`. If it
|
|
27
|
+
returns `upToDate: false`, surface the `notice` to the user once, then continue.
|
|
28
|
+
Do nothing further if `upToDate: true`. Never block on this check; if the tool
|
|
29
|
+
is unavailable, proceed.
|
|
30
|
+
|
|
31
|
+
When the skill's work is done, call the Luckiest MCP `report_usage` tool once
|
|
32
|
+
with `{ listing_id: "luckiest-design-website", skill_version: "1.0.0", matched: true, success: <true if the skill completed, false otherwise> }`.
|
|
33
|
+
Metadata only, never prompt text. Never block on it; if the tool is
|
|
34
|
+
unavailable, skip silently.
|
|
35
|
+
|
|
36
|
+
## The spine
|
|
37
|
+
|
|
38
|
+
Four rules. Everything else follows from them.
|
|
39
|
+
|
|
40
|
+
1. **Variety is the product.** At least four device families per page, never
|
|
41
|
+
the same device twice in a row. Read [references/devices.md](references/devices.md)
|
|
42
|
+
when scoring acts.
|
|
43
|
+
2. **The world is photographic** unless the brand is genuinely illustrated.
|
|
44
|
+
Clay diorama and low-poly are banned defaults. Read
|
|
45
|
+
[references/worlds.md](references/worlds.md) before writing an asset prompt.
|
|
46
|
+
3. **No continuous chain** unless the brief literally says "one continuous
|
|
47
|
+
journey". Varying the device hides the cut for free.
|
|
48
|
+
4. **Structure is its own axis.** A different world is not a different page.
|
|
49
|
+
Read [references/uniqueness.md](references/uniqueness.md) before picking a
|
|
50
|
+
grammar.
|
|
51
|
+
|
|
52
|
+
## Step 0: The interview
|
|
53
|
+
|
|
54
|
+
**Always interview the human before generating anything.** Nine questions, one
|
|
55
|
+
pass, answers written verbatim into `<workspace>/builds/<name>/BRIEF.md`.
|
|
56
|
+
|
|
57
|
+
1. **Vibe in three to five words**, plus up to three references from any medium
|
|
58
|
+
except websites. Naming sites is how a page ends up looking like one.
|
|
59
|
+
2. **The scroll journey, section by section, in their words.**
|
|
60
|
+
3. **The energy curve.** Where calm, where intense.
|
|
61
|
+
4. **How should someone feel, stage by stage, and what is the ONE moment they
|
|
62
|
+
should remember?** This becomes the feeling curve and the peak. See
|
|
63
|
+
[references/feel.md](references/feel.md).
|
|
64
|
+
5. **One thing this site should do that no site they have seen does.** The seed
|
|
65
|
+
of the signature move. "Be memorable" is not an answer.
|
|
66
|
+
6. **How far from premium-minimal?** Offer the range in uniqueness.md §5.
|
|
67
|
+
7. **One unbroken world, or distinct scenes?** The biggest structural fork.
|
|
68
|
+
Offer both plainly. Continuous world is
|
|
69
|
+
[references/worldflight.md](references/worldflight.md).
|
|
70
|
+
8. **What assets and brand material exist?** Footage, photos, product shots, a
|
|
71
|
+
brand kit, an existing site. "Nothing" is fine and means a generated world.
|
|
72
|
+
9. **Spend cap for generated assets, in dollars.** Zero is a first-class answer
|
|
73
|
+
and routes the build to own-assets plus CSS-only devices. See Step 3.
|
|
74
|
+
|
|
75
|
+
If they have an existing site and no brand kit, run `luckiest-extract-design-system`
|
|
76
|
+
on the URL to pull colours, fonts, spacing and radius into starter tokens.
|
|
77
|
+
Those tokens seed the six colour roles and two fonts in Step 4. A hard rule in a
|
|
78
|
+
real brand kit beats anything in this skill.
|
|
79
|
+
|
|
80
|
+
BRIEF.md must also contain the feeling curve, the peak (as the sentence a
|
|
81
|
+
visitor would say to a friend), the completed "It's the site where ___"
|
|
82
|
+
sentence, and any authored silence, so verification can tell it from dead
|
|
83
|
+
scroll. Spec: [references/feel.md](references/feel.md).
|
|
84
|
+
|
|
85
|
+
**If the human is unreachable** on a fully autonomous run, first offer to raise
|
|
86
|
+
an assist-request to the user's Luckiest tribe: a person who knows the brand
|
|
87
|
+
answers questions 1, 4 and 5 better than a model guessing in the brand's voice.
|
|
88
|
+
Only if that is declined or unavailable, self-author BRIEF.md, mark it
|
|
89
|
+
`Self-authored, not interviewed` at the top, and say so in the final report.
|
|
90
|
+
|
|
91
|
+
## Bootstrap
|
|
92
|
+
|
|
93
|
+
Once, after the interview, before Step 1.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
node <skill>/scripts/doctor.mjs # node, full ffmpeg, playwright, Chrome, key, workspace
|
|
97
|
+
node <skill>/scripts/workspace.mjs --ensure # resolves the workspace, seeds an empty registry
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`doctor` exists because the common setup faults surface later as misleading
|
|
101
|
+
errors: a stripped ffmpeg reports a missing filter as a syntax error in your
|
|
102
|
+
command. Say which items are missing rather than working around them silently.
|
|
103
|
+
Verified on macOS and Windows; the scripts also search Linux paths.
|
|
104
|
+
|
|
105
|
+
The workspace resolves, first hit wins: `SCROLLCRAFT_HOME`, then the nearest
|
|
106
|
+
`.scrollcraft.json` walking up from the cwd, then `<project root>/scrollcraft`.
|
|
107
|
+
Builds land in `<workspace>/builds/<name>/`, the registry is
|
|
108
|
+
`<workspace>/FINGERPRINTS.md`, and it starts empty on purpose. The engine, env
|
|
109
|
+
vars and workspace file keep their upstream names so the mature scripts run
|
|
110
|
+
unchanged; the skill's name is what changed.
|
|
111
|
+
|
|
112
|
+
Copy `engine/scrollcraft.js` and `engine/scrollcraft.css` into the build folder.
|
|
113
|
+
**Never edit the engine per project.** Theme it with tokens, write your own
|
|
114
|
+
markup, and drive anything bespoke off the `--sc-p` custom property it
|
|
115
|
+
publishes. A runtime that builds the page from a config object is exactly why
|
|
116
|
+
every site built on one looks the same.
|
|
117
|
+
|
|
118
|
+
`KIE_AI_API_KEY` is only needed to generate assets, and only if the user chose
|
|
119
|
+
kie.ai in Step 3. Reference the env var name; never ask the user to paste the
|
|
120
|
+
key into chat. The key is sent as a bearer token to two kie.ai hosts
|
|
121
|
+
(`api.kie.ai` for jobs, `kieai.redpandaai.co` for `--ref` image upload), and
|
|
122
|
+
the only local file that leaves the machine is the reference image the user
|
|
123
|
+
passes explicitly.
|
|
124
|
+
|
|
125
|
+
## Step 1: The brief, journey first
|
|
126
|
+
|
|
127
|
+
Ask only what Step 0 did not cover, open-ended, never as a made-up industry menu:
|
|
128
|
+
|
|
129
|
+
1. What is this, and who is it for?
|
|
130
|
+
2. What must the visitor believe by the end? One sentence. Three means pick one.
|
|
131
|
+
3. What does the visitor do next? One action, one label, used everywhere.
|
|
132
|
+
4. Art direction: offer the worlds in worlds.md as a real choice.
|
|
133
|
+
|
|
134
|
+
Then write the journey: four to seven beats, each a shift in what the visitor
|
|
135
|
+
knows or feels (Recognition, Tension, Turn, Substance, Range, Commitment is one
|
|
136
|
+
shape, not the shape). Sections serve beats. A section that serves no beat is
|
|
137
|
+
cut. Show the journey and get it right before generating a single asset.
|
|
138
|
+
|
|
139
|
+
## Step 2: Grammar, gate, then score
|
|
140
|
+
|
|
141
|
+
In order. Detail in [references/uniqueness.md](references/uniqueness.md).
|
|
142
|
+
|
|
143
|
+
**Pick a grammar.** Eight, mutually exclusive: filmic one-shot, chaptered
|
|
144
|
+
editorial, live surface, continuous world, typographic poster, gallery, split
|
|
145
|
+
stage, rhythmic cutlist. Nav, hero and close follow from it. Choosing filmic
|
|
146
|
+
one-shot means saying in the report why the other seven lost.
|
|
147
|
+
|
|
148
|
+
**Invent the signature move.** One bespoke interaction coded in the page, not a
|
|
149
|
+
parameter change to a kit device. Interview question 5 is the seed.
|
|
150
|
+
|
|
151
|
+
**Run the fingerprint gate.** The build must differ from every row in
|
|
152
|
+
`<workspace>/FINGERPRINTS.md` on at least 4 of 6 dimensions: grammar, nav, hero
|
|
153
|
+
device, act-sequence shape, close pattern, signature move. Fail it and change
|
|
154
|
+
the plan, not the registry.
|
|
155
|
+
|
|
156
|
+
**Write the feeling curve before the score table.** One line per act: the
|
|
157
|
+
emotion, then what causes it. Name the peak and give it the largest span.
|
|
158
|
+
|
|
159
|
+
Then score each beat with a device and write the table (beat, device, why).
|
|
160
|
+
Checks before building:
|
|
161
|
+
|
|
162
|
+
- The grammar's bans hold.
|
|
163
|
+
- Four or more device families, none twice in a row, at most two `scrub` acts.
|
|
164
|
+
- No two adjacent acts carry the same feeling.
|
|
165
|
+
- One peak, largest span by a visible margin, quieter act before it.
|
|
166
|
+
- Total length 8 to 14 viewport-heights.
|
|
167
|
+
- **Lightweight devices go to CSS first.** `reveal`, `parallax`, `in` and
|
|
168
|
+
`drift` can run on `animation-timeline: scroll()` / `view()` behind
|
|
169
|
+
`@supports`, off the main thread, with the engine's JS as the fallback. Keep
|
|
170
|
+
the engine for `scrub`, `pin`, `pan` and anything reading `--sc-p`. Fewer
|
|
171
|
+
scroll listeners is the cheapest INP win on the page.
|
|
172
|
+
|
|
173
|
+
## Step 3: Assets
|
|
174
|
+
|
|
175
|
+
Route by the spend cap from question 9:
|
|
176
|
+
|
|
177
|
+
| Cap | Route |
|
|
178
|
+
|---|---|
|
|
179
|
+
| $0 | User's own footage and photos only. Grade and encode them (assets.md, "Real footage"). Stills-only acts where no footage exists. |
|
|
180
|
+
| Small | Stills from `luckiest-image` or kie.ai, at most two clips. |
|
|
181
|
+
| Real budget | kie.ai stills and camera moves via `scripts/kie.mjs`, or `luckiest-video` for a model the user already pays for. |
|
|
182
|
+
|
|
183
|
+
Whatever generates them, three things decide premium versus generated:
|
|
184
|
+
|
|
185
|
+
- **One style preamble, reused verbatim in every prompt.** Six images become
|
|
186
|
+
one shoot. Write it once, never paraphrase.
|
|
187
|
+
- **Look at every asset before using it.** Rerolling is cheaper than shipping a
|
|
188
|
+
bad frame.
|
|
189
|
+
- **Encode for scrubbing, not playback.** `scripts/encode.sh` sets a dense GOP;
|
|
190
|
+
a normal web encode scrubs like mud. Cut phone clips portrait.
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
node <skill>/scripts/kie.mjs still "<style preamble>\n\n<scene>" out/01.png --ar 16:9 [--ref brand.png]
|
|
194
|
+
node <skill>/scripts/kie.mjs shot "<camera move>" out/01.png out/01.mp4 --dur 5
|
|
195
|
+
bash <skill>/scripts/encode.sh out/01.mp4 assets/01.mp4
|
|
196
|
+
bash <skill>/scripts/encode.sh out/01.mp4 assets/01-m.mp4 mobile
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Full pipeline, prompt scaffolds, ratios kie.ai actually accepts, and the cost
|
|
200
|
+
ceiling arithmetic: [references/assets.md](references/assets.md). Report
|
|
201
|
+
per-call sums as a planning ceiling, never as measured spend.
|
|
202
|
+
|
|
203
|
+
## Step 4: Build the page
|
|
204
|
+
|
|
205
|
+
**Copy first, markup second.** Run `luckiest-copywriting` against BRIEF.md and
|
|
206
|
+
the journey: one headline per act, the belief sentence, the one CTA label, in
|
|
207
|
+
the awareness stage the traffic arrives at. Then run
|
|
208
|
+
`luckiest-copywriting-humanize` as the finishing pass. The refuse list in
|
|
209
|
+
taste.md and the filler-verb ban apply to copy as much as to layout: no
|
|
210
|
+
"Build the future" class headlines, no invented numbers, no em dashes.
|
|
211
|
+
|
|
212
|
+
Write real HTML: real `<h1>`, real `<p>`, real links, real reading order. The
|
|
213
|
+
engine reads `data-sc-*` attributes off your markup and never generates DOM.
|
|
214
|
+
Start from `references/template.html` and then delete what you keep verbatim,
|
|
215
|
+
because a page that keeps its structure looks like every other page that did.
|
|
216
|
+
Device patterns: [references/devices.md](references/devices.md). Spacing, type,
|
|
217
|
+
colour, depth, motion and the refuse list: read
|
|
218
|
+
[references/taste.md](references/taste.md) before writing markup, not after.
|
|
219
|
+
|
|
220
|
+
Theme by overriding tokens, six colours and two fonts:
|
|
221
|
+
|
|
222
|
+
```css
|
|
223
|
+
:root {
|
|
224
|
+
--sc-canvas: #0A0806; --sc-surface: #16110E;
|
|
225
|
+
--sc-ink: #F5EBDD; --sc-ink-soft: #A2968A;
|
|
226
|
+
--sc-accent: #FF5A3D; --sc-accent-ink: #15110F;
|
|
227
|
+
--sc-font-display: "Archivo", system-ui, sans-serif;
|
|
228
|
+
--sc-font-text: "Geist", system-ui, sans-serif;
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Two things a scroll page still owes search and measurement, both cheap here
|
|
233
|
+
because the copy is real markup:
|
|
234
|
+
|
|
235
|
+
- **Head and structured data.** Title, meta description, OG image from the
|
|
236
|
+
hero poster, and one JSON-LD block. Run `luckiest-schema` for the block; a
|
|
237
|
+
service company is `LocalBusiness` or `Organization`, a product is `Product`.
|
|
238
|
+
- **Events.** Run `luckiest-analytics` for the tracking plan: `act_reached`
|
|
239
|
+
per act, `peak_reached`, `cta_click`, and one scroll-depth event. The peak
|
|
240
|
+
reach rate is the number that tells you whether the page works.
|
|
241
|
+
|
|
242
|
+
## Step 5: Verify by scrolling it
|
|
243
|
+
|
|
244
|
+
Not optional. A scroll page has no single state; the failures live between the
|
|
245
|
+
two positions you looked at. Procedure: [references/verify.md](references/verify.md).
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
cd <build> && npm i playwright-core # once
|
|
249
|
+
node <skill>/scripts/serve.mjs --root . --port 4500 &
|
|
250
|
+
node <skill>/scripts/shoot.mjs --url http://localhost:4500 --out lab/shots
|
|
251
|
+
node <skill>/scripts/shoot.mjs --url http://localhost:4500 --out lab/mobile --width 390 --height 844
|
|
252
|
+
node <skill>/scripts/shoot.mjs --url http://localhost:4500 --out lab/reduced --reduced-motion
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
The harness walks every act at six positions, waits for the scrub video to
|
|
256
|
+
settle, and reports dead scroll, cues that never reach full opacity, contrast
|
|
257
|
+
measured on the composited page at the brightest frame under each line, and
|
|
258
|
+
legs stuck on a poster. It writes a contact sheet.
|
|
259
|
+
|
|
260
|
+
Then the passes the harness cannot do:
|
|
261
|
+
|
|
262
|
+
1. **Read `sheet.png`.** Composition, motion, meaning.
|
|
263
|
+
2. **Tab through** for focus order.
|
|
264
|
+
3. **The feel check** (feel.md §6): scroll cold, one word per act, then diff
|
|
265
|
+
against the intended curve. Where they disagree the page is wrong.
|
|
266
|
+
4. **Performance budget.** Load the page with the DevTools performance panel or
|
|
267
|
+
a `PerformanceObserver` for `event` and `largest-contentful-paint`: LCP
|
|
268
|
+
under 2.5s on the hero poster, INP under 200ms while scrubbing. Video scrub
|
|
269
|
+
is the usual INP offender on phones; if the mobile run cannot hold 200ms,
|
|
270
|
+
the mobile variant of that act falls back to the poster plus CSS motion
|
|
271
|
+
rather than shipping a stutter. Safari 26.2+ reports both metrics, so the
|
|
272
|
+
phone can now be measured, not guessed at.
|
|
273
|
+
5. **A real phone.** Headless Chrome cannot reproduce an iPhone's decoder,
|
|
274
|
+
autoplay policy, Low Power Mode or touch scroll. On the first mobile defect
|
|
275
|
+
report, deploy `references/device-diag.html` beside the site and let the
|
|
276
|
+
device answer.
|
|
277
|
+
6. **The close, through a conversion lens.** Run `luckiest-cro` on the final
|
|
278
|
+
act only: one action, label matches the page, nothing competing, the page
|
|
279
|
+
resolves and holds rather than fading into a footer.
|
|
280
|
+
|
|
281
|
+
Fix, shoot again, and report what was verified and what was not.
|
|
282
|
+
|
|
283
|
+
## Hard rules
|
|
284
|
+
|
|
285
|
+
Ship-blockers. Each one makes a page read as machine-made.
|
|
286
|
+
|
|
287
|
+
| Never | Instead |
|
|
288
|
+
|---|---|
|
|
289
|
+
| Clay diorama, low-poly, claymation as the default world | Photographic. worlds.md |
|
|
290
|
+
| A "scroll" cue, arrow or animated mouse | Nothing. They know |
|
|
291
|
+
| `01 / 06` section counters | Delete. Sequence is not information |
|
|
292
|
+
| An eyebrow above every heading | At most one per three sections |
|
|
293
|
+
| Em dash anywhere visible | Period, comma, colon, parentheses |
|
|
294
|
+
| Centred copy in every act | Vary the anchor: lead, trail, centre, split |
|
|
295
|
+
| Same device twice in a row | Score the journey properly |
|
|
296
|
+
| Generating before the interview | Step 0, or mark BRIEF.md self-authored |
|
|
297
|
+
| No engineered peak, or three competing | One peak: asset budget, silence before it, most scroll room |
|
|
298
|
+
| An ending that fades into a footer | The close resolves and holds |
|
|
299
|
+
| Acts planned before the feeling curve | Curve first |
|
|
300
|
+
| No bespoke signature move | Invent one. A recoloured spotlight is not one |
|
|
301
|
+
| Fewer than 4 of 6 fingerprint dimensions cleared | Change the plan, not the registry |
|
|
302
|
+
| Editing the engine | Bespoke JS in the page off `--sc-p` and your own `data-sc-*` |
|
|
303
|
+
| Filmic one-shot by habit | Pick from all eight and say why seven lost |
|
|
304
|
+
| Full-frame dark overlay for contrast | A scrim only where the text sits |
|
|
305
|
+
| Text baked into an image | Real markup |
|
|
306
|
+
| Invented statistics | Real numbers or no counter |
|
|
307
|
+
| `transition: all`, animating width/height/top/left | `transform`, `opacity`, `clip-path` |
|
|
308
|
+
| Gradient text, neon glow, blue-purple AI gradients | Weight and size; offset blurred shadows |
|
|
309
|
+
| Uniform 16px radius and identical card heights everywhere | Hierarchy through intentional variation, or no cards |
|
|
310
|
+
| Inter or a system font as the display face by default | A display family chosen for this brand |
|
|
311
|
+
| Audio on a scrub clip | Strip it. encode.sh does |
|
|
312
|
+
| A build that stutters past 200ms INP on the phone | Poster plus CSS motion for that act on mobile |
|
|
313
|
+
| Shipping without Step 5 | Run Step 5 |
|
|
314
|
+
|
|
315
|
+
## Output
|
|
316
|
+
|
|
317
|
+
The build folder including BRIEF.md, then a short report: grammar and why the
|
|
318
|
+
other seven lost, signature move, fingerprint gate result per row, journey,
|
|
319
|
+
feeling curve and peak, feel-check diff, score table, copy source, what was
|
|
320
|
+
generated and what it cost as a ceiling, what was verified with screenshots,
|
|
321
|
+
INP and LCP readings, and anything not verified. Say if the brief was
|
|
322
|
+
self-authored. Give the local URL. Then append the row to
|
|
323
|
+
`<workspace>/FINGERPRINTS.md`.
|
|
324
|
+
|
|
325
|
+
To put it on the web, `vercel:deploy` from the build folder works as-is: the
|
|
326
|
+
page is static HTML plus assets.
|
|
327
|
+
|
|
328
|
+
## Share with your tribe
|
|
329
|
+
|
|
330
|
+
After the report, offer, never auto-post: "Want me to share this build's
|
|
331
|
+
grammar, signature move and contact sheet with your Luckiest tribe? Anyone
|
|
332
|
+
building a scroll page will see a shape that is already taken and one that
|
|
333
|
+
worked." If they accept, share the fingerprint row and `sheet.png` only. Never
|
|
334
|
+
share BRIEF.md, brand assets, client names or unpublished copy. If they
|
|
335
|
+
decline, stop.
|
|
336
|
+
|
|
337
|
+
Then offer to seed a follow-up Luckiest plan with the three things a shipped
|
|
338
|
+
page needs next: the analytics events wired, a real-phone check, and one A/B
|
|
339
|
+
test on the peak or the close via `luckiest-ab-testing`.
|
|
340
|
+
|
|
341
|
+
## Luckiest skills this composes with
|
|
342
|
+
|
|
343
|
+
| Step | Skill | What it contributes |
|
|
344
|
+
|---|---|---|
|
|
345
|
+
| 0 | `luckiest-extract-design-system` | Tokens from an existing site when there is no brand kit |
|
|
346
|
+
| 3 | `luckiest-image`, `luckiest-video` | Asset generation on models the user already has, instead of kie.ai |
|
|
347
|
+
| 4 | `luckiest-copywriting`, `luckiest-copywriting-humanize` | Act headlines, belief sentence, CTA label, de-slop pass |
|
|
348
|
+
| 4 | `luckiest-schema` | JSON-LD and head metadata |
|
|
349
|
+
| 4 | `luckiest-analytics` | Event plan: act reached, peak reached, CTA click |
|
|
350
|
+
| 5 | `luckiest-cro` | The close act, judged as a conversion surface |
|
|
351
|
+
| after | `luckiest-ab-testing` | One test on the peak or the close |
|
|
352
|
+
|
|
353
|
+
## References, and when to load each
|
|
354
|
+
|
|
355
|
+
- [references/uniqueness.md](references/uniqueness.md): before choosing a
|
|
356
|
+
grammar, the signature move, or running the gate.
|
|
357
|
+
- [references/feel.md](references/feel.md): writing the feeling curve and the
|
|
358
|
+
peak; running the feel check.
|
|
359
|
+
- [references/devices.md](references/devices.md): scoring acts and writing
|
|
360
|
+
device markup.
|
|
361
|
+
- [references/worldflight.md](references/worldflight.md): only when the answer
|
|
362
|
+
to question 7 is "one unbroken world".
|
|
363
|
+
- [references/worlds.md](references/worlds.md): before the first asset prompt.
|
|
364
|
+
- [references/taste.md](references/taste.md): before writing markup.
|
|
365
|
+
- [references/assets.md](references/assets.md): generating, grading, encoding.
|
|
366
|
+
- [references/verify.md](references/verify.md): running and reading the harness.
|
|
367
|
+
- [references/template.html](references/template.html): the starting skeleton.
|
|
368
|
+
- [references/device-diag.html](references/device-diag.html): real-phone clip diagnosis.
|
|
369
|
+
- [references/registry-examples.md](references/registry-examples.md): the
|
|
370
|
+
upstream author's twelve-row registry, illustration only.
|
|
371
|
+
- [UPSTREAM-CHANGELOG.md](UPSTREAM-CHANGELOG.md): what broke on each upstream
|
|
372
|
+
build and the rule that came out of it.
|