luckiest-co 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/package.json +1 -1
  3. package/skills/luckiest-ab-testing/SKILL.md +1 -1
  4. package/skills/luckiest-ad-creative/SKILL.md +1 -1
  5. package/skills/luckiest-ads/SKILL.md +1 -1
  6. package/skills/luckiest-advisors/SKILL.md +1 -1
  7. package/skills/luckiest-aeo-grader/SKILL.md +1 -1
  8. package/skills/luckiest-ai-seo/SKILL.md +1 -1
  9. package/skills/luckiest-analytics/SKILL.md +1 -1
  10. package/skills/luckiest-aso/SKILL.md +1 -1
  11. package/skills/luckiest-churn-prevention/SKILL.md +1 -1
  12. package/skills/luckiest-co-marketing/SKILL.md +1 -1
  13. package/skills/luckiest-coder/SKILL.md +1 -1
  14. package/skills/luckiest-coder-brainstorming/SKILL.md +1 -1
  15. package/skills/luckiest-coder-consistency/SKILL.md +1 -1
  16. package/skills/luckiest-coder-constitution/SKILL.md +1 -1
  17. package/skills/luckiest-coder-debugging/SKILL.md +1 -1
  18. package/skills/luckiest-coder-dispatching-parallel-agents/SKILL.md +1 -1
  19. package/skills/luckiest-coder-executing-plans/SKILL.md +1 -1
  20. package/skills/luckiest-coder-finishing-a-branch/SKILL.md +1 -1
  21. package/skills/luckiest-coder-git-worktrees/SKILL.md +1 -1
  22. package/skills/luckiest-coder-guard/SKILL.md +1 -1
  23. package/skills/luckiest-coder-qa/SKILL.md +1 -1
  24. package/skills/luckiest-coder-receiving-code-review/SKILL.md +1 -1
  25. package/skills/luckiest-coder-requesting-code-review/SKILL.md +1 -1
  26. package/skills/luckiest-coder-shipping/SKILL.md +1 -1
  27. package/skills/luckiest-coder-subagent-driven-development/SKILL.md +1 -1
  28. package/skills/luckiest-coder-tdd/SKILL.md +1 -1
  29. package/skills/luckiest-coder-verification/SKILL.md +1 -1
  30. package/skills/luckiest-coder-writing-plans/SKILL.md +1 -1
  31. package/skills/luckiest-coder-writing-skills/SKILL.md +1 -1
  32. package/skills/luckiest-cold-email/SKILL.md +1 -1
  33. package/skills/luckiest-community-marketing/SKILL.md +1 -1
  34. package/skills/luckiest-competitor-profiling/SKILL.md +1 -1
  35. package/skills/luckiest-competitors/SKILL.md +1 -1
  36. package/skills/luckiest-content-strategy/SKILL.md +1 -1
  37. package/skills/luckiest-copy-editing/SKILL.md +1 -1
  38. package/skills/luckiest-copywriting/SKILL.md +1 -1
  39. package/skills/luckiest-cro/SKILL.md +1 -1
  40. package/skills/luckiest-customer-research/SKILL.md +1 -1
  41. package/skills/luckiest-directory-submissions/SKILL.md +1 -1
  42. package/skills/luckiest-emails/SKILL.md +1 -1
  43. package/skills/luckiest-extract-design-system/SKILL.md +1 -1
  44. package/skills/luckiest-free-tools/SKILL.md +1 -1
  45. package/skills/luckiest-image/SKILL.md +1 -1
  46. package/skills/luckiest-launch/SKILL.md +1 -1
  47. package/skills/luckiest-lead-magnets/SKILL.md +1 -1
  48. package/skills/luckiest-marketing-ideas/SKILL.md +1 -1
  49. package/skills/luckiest-marketing-plan/SKILL.md +1 -1
  50. package/skills/luckiest-marketing-psychology/SKILL.md +1 -1
  51. package/skills/luckiest-model-router/SKILL.md +1 -1
  52. package/skills/luckiest-offers/SKILL.md +1 -1
  53. package/skills/luckiest-onboarding/SKILL.md +1 -1
  54. package/skills/luckiest-paywalls/SKILL.md +1 -1
  55. package/skills/luckiest-popups/SKILL.md +1 -1
  56. package/skills/luckiest-pricing/SKILL.md +1 -1
  57. package/skills/luckiest-product-marketing/SKILL.md +1 -1
  58. package/skills/luckiest-programmatic-seo/SKILL.md +1 -1
  59. package/skills/luckiest-prompt-rewrite/SKILL.md +1 -1
  60. package/skills/luckiest-prospecting/SKILL.md +1 -1
  61. package/skills/luckiest-public-relations/SKILL.md +1 -1
  62. package/skills/luckiest-referrals/SKILL.md +1 -1
  63. package/skills/luckiest-revops/SKILL.md +1 -1
  64. package/skills/luckiest-sales-enablement/SKILL.md +1 -1
  65. package/skills/luckiest-schema/SKILL.md +1 -1
  66. package/skills/luckiest-seo-audit/SKILL.md +1 -1
  67. package/skills/luckiest-session-handoff/SKILL.md +1 -1
  68. package/skills/luckiest-signup/SKILL.md +1 -1
  69. package/skills/luckiest-site-architecture/SKILL.md +1 -1
  70. package/skills/luckiest-sms/SKILL.md +1 -1
  71. package/skills/luckiest-social/SKILL.md +1 -1
  72. package/skills/luckiest-thinker/SKILL.md +1 -1
  73. package/skills/luckiest-trends/SKILL.md +1 -1
  74. package/skills/luckiest-video/SKILL.md +1 -1
  75. package/skills/luckiest-website-cloner/ATTRIBUTION.md +29 -0
  76. package/skills/luckiest-website-cloner/CHANGELOG.md +8 -0
  77. package/skills/luckiest-website-cloner/LICENSE +21 -0
  78. package/skills/luckiest-website-cloner/SKILL.md +289 -0
  79. package/skills/luckiest-website-cloner/references/builtin-browser-recipes.md +74 -0
  80. package/skills/luckiest-website-cloner/references/compositing.md +65 -0
  81. package/skills/luckiest-website-cloner/references/fidelity-fast-path.md +92 -0
  82. package/skills/luckiest-website-cloner/references/playwright-cli-recipes.md +68 -0
  83. package/skills/luckiest-website-cloner/references/teardown.md +142 -0
  84. package/skills/luckiest-website-cloner/references/visual-qa.md +102 -0
  85. package/skills/luckiest-website-cloner/scripts/build-bundle.cjs +12 -0
  86. package/skills/luckiest-website-cloner/scripts/motion-probe.js +423 -0
  87. package/skills/luckiest-website-cloner/scripts/surface-map.js +392 -0
  88. package/skills/luckiest-website-cloner/scripts/tokens-probe.js +178 -0
  89. package/skills/luckiest-website-cloner-dom/ATTRIBUTION.md +4 -0
  90. package/skills/luckiest-website-cloner-dom/CHANGELOG.md +8 -0
  91. package/skills/luckiest-website-cloner-dom/LICENSE +21 -0
  92. package/skills/luckiest-website-cloner-dom/SKILL.md +170 -0
  93. package/skills/luckiest-website-cloner-dom/references/asset-resolution.md +93 -0
  94. package/skills/luckiest-website-cloner-dom/references/interaction-fingerprints.md +85 -0
  95. package/skills/luckiest-website-cloner-remix/ATTRIBUTION.md +4 -0
  96. package/skills/luckiest-website-cloner-remix/CHANGELOG.md +8 -0
  97. package/skills/luckiest-website-cloner-remix/LICENSE +21 -0
  98. package/skills/luckiest-website-cloner-remix/SKILL.md +202 -0
  99. package/skills/luckiest-website-cloner-remix/references/directions.md +82 -0
  100. package/skills/luckiest-website-cloner-remix/references/reskin.md +84 -0
  101. package/skills/luckiest-website-cloner-remix/references/tweak-panel.md +72 -0
  102. package/skills/luckiest-website-cloner-remix/scripts/apply-overrides.cjs +105 -0
  103. package/skills/luckiest-website-cloner-remix/scripts/gallery.cjs +71 -0
  104. package/skills/luckiest-website-cloner-remix/scripts/tokenize-css.cjs +127 -0
  105. package/skills/luckiest-website-cloner-remix/scripts/tweak-panel.js +169 -0
  106. package/skills/luckiest-website-cloner-shaders/ATTRIBUTION.md +11 -0
  107. package/skills/luckiest-website-cloner-shaders/CHANGELOG.md +8 -0
  108. package/skills/luckiest-website-cloner-shaders/LICENSE +21 -0
  109. package/skills/luckiest-website-cloner-shaders/SKILL.md +129 -0
  110. package/skills/luckiest-website-cloner-shaders/references/capture-backends.md +89 -0
  111. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/SKILL.md +123 -0
  112. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/capture-backends.md +201 -0
  113. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/evidence-policy.md +93 -0
  114. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/operating-contract.md +82 -0
  115. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/qa-failure-policy.md +100 -0
  116. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/recon-kernel.md +206 -0
  117. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/replay-policy.md +145 -0
  118. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/shaders-com.md +212 -0
  119. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/source-analysis.md +112 -0
  120. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/surface-discovery.md +113 -0
  121. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/target-lock.md +205 -0
  122. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/three-shader-reconstruction.md +155 -0
  123. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/tool-capability-matrix.md +57 -0
  124. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/references/unicorn-studio.md +387 -0
  125. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/scripts/fetch-rendered-dom.mjs +178 -0
  126. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/scripts/scan-bundle.sh +80 -0
  127. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/extraction-report.md +41 -0
  128. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/known-gaps.md +14 -0
  129. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/qa-report.md +74 -0
  130. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/replay-manifest.json +147 -0
  131. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/run-state.json +75 -0
  132. package/skills/luckiest-website-cloner-shaders/vendor/web-shader-extractor/templates/scout-card.json +106 -0
@@ -0,0 +1,170 @@
1
+ ---
2
+ name: luckiest-website-cloner-dom
3
+ description: >-
4
+ Extract and rebuild the DOM/CSS layer of a web page — layout, typography,
5
+ colors, spacing, real content, assets, and normal interactions — into clean
6
+ components, section by section, from exact getComputedStyle() values rather
7
+ than guesses. This is the DOM/CSS track: it deliberately does NOT handle
8
+ WebGL/WebGPU/canvas shader surfaces (those go to luckiest-website-cloner-shaders). Usually
9
+ driven by the luckiest-website-cloner coordinator, but can be used directly when the user
10
+ wants to rebuild a page's markup/styling and there are no GPU-rendered
11
+ effects. Trigger on "rebuild this section", "extract the CSS/layout", "clone
12
+ the markup and styling of this page", or the DOM half of a full site clone.
13
+ argument-hint: "<url> | <output-dir with surface-map.json + ROUTING.md>"
14
+ user-invocable: false
15
+ license: MIT. See ATTRIBUTION.md
16
+ allowed-tools: Bash, Read, Write, Edit, Glob, Grep
17
+ metadata:
18
+ version: "1.0.0"
19
+ listing_id: luckiest-website-cloner-dom
20
+ author: luckiest
21
+ ---
22
+
23
+ # DOM Clone
24
+
25
+ Rebuild the DOM/CSS layer of a page as clean components whose every value is
26
+ **measured, not estimated**. The difference between a clone that reads as
27
+ "pixel-perfect" and one that reads as "AI slop" is almost entirely whether the
28
+ spacing, type scale, and colors are the site's real computed values or an
29
+ approximation. So the whole method is built to remove guessing.
30
+
31
+ **Scope boundary — read this first.** This track handles DOM/CSS only. Any
32
+ `<canvas>` painting WebGL/WebGPU/2D pixels is invisible to `getComputedStyle()`
33
+ and belongs to `luckiest-website-cloner-shaders`. When you meet a GPU surface (the surface map
34
+ tags them, or you see a `<canvas>` you can't style your way into), do NOT rebuild
35
+ it — leave a **placeholder mount** (below) and move on. Rebuilding a shader as
36
+ HTML is the classic failure that makes a clone look empty.
37
+
38
+ ## Inputs
39
+
40
+ - Driven by luckiest-website-cloner: you get an output dir containing `surface-map.json` and
41
+ `ROUTING.md`. Build only the sections routed to the DOM track; leave mounts for
42
+ GPU surfaces.
43
+ - Standalone: you get a URL. Do a quick recon first (screenshots + the interaction
44
+ sweep below). If you spot GPU `<canvas>` surfaces, tell the user those need the
45
+ luckiest-website-cloner-shaders track and build the DOM around them.
46
+
47
+ Requires a browser MCP (Chrome/Playwright/Puppeteer). Keep large extraction
48
+ artifacts in the output dir, not the conversation.
49
+
50
+ ## The method: extract → spec → build → verify
51
+
52
+ ### 1. Foundation first (sequential, do it yourself)
53
+
54
+ Nothing can be built until the shared ground exists, because every later
55
+ component depends on it:
56
+
57
+ - **Design tokens** — run `../luckiest-website-cloner/scripts/tokens-probe.js`
58
+ (`tokensProbe()`) at 1440/768/390 if the coordinator hasn't already left
59
+ `tokens-*.json` in the output dir. Its frequency-ranked palette, type scale,
60
+ spacing, radii, shadows, and `:root` custom props ARE the tokens — write them
61
+ as CSS variables / Tailwind theme, keeping the site's own `--names` when it
62
+ has them. Colors and fonts wrong here poison every component.
63
+ - **Motion params** — likewise take `motion.json` (`../luckiest-website-cloner/scripts/
64
+ motion-probe.js`) as the source for every GSAP/ScrollTrigger/Lenis/WAAPI
65
+ value a spec needs. A spec that says `scrub: 1.2, start: "top top", end:
66
+ "+=200%"` came from the runtime; one that says "scrubs on scroll" is a guess.
67
+ - **Fonts** — identify actual `font-family` on headings/body/labels; wire up the
68
+ same families (self-hosted or Google) so metrics match.
69
+ - **Global assets** — favicons, logos, and site-wide images to the project.
70
+ Resolve each through the asset ladder in `references/asset-resolution.md`:
71
+ download the REAL file first; only fall back to reconstructing, generating
72
+ (Higgsfield, for decorative assets — never brand identity), or a placeholder,
73
+ and label which tier was used. This keeps the clone honest about what's real.
74
+ - **Global behaviors** — smooth-scroll library (Lenis/Locomotive), scroll-snap,
75
+ global keyframes. See `references/interaction-fingerprints.md` to detect and
76
+ reproduce these; they change how sections must be built.
77
+
78
+ Verify the empty shell builds before going further.
79
+
80
+ ### 2. Extract each section with exact values
81
+
82
+ For each DOM section top-to-bottom, use the browser to capture — don't hand-
83
+ measure:
84
+
85
+ - A section screenshot (for the builder's reference and later QA).
86
+ - **Computed styles** for every meaningful element via `getComputedStyle()` —
87
+ real px/color/weight values, not "looks like `text-lg`".
88
+ - **Real content** — verbatim text, alt text, and every image/`<img>`/background
89
+ image in the section, including **layered/overlay** images (a hero is often a
90
+ background + a foreground mockup + an icon; miss the overlay and it looks bare).
91
+ Resolve each asset through `references/asset-resolution.md` (REAL → RECONSTRUCT
92
+ → GENERATE → PLACEHOLDER), tagging any that couldn't be downloaded.
93
+ - **All states, not just the default** — for tabs/accordions click each and
94
+ record per-state content; for scroll- or hover-triggered changes, capture the
95
+ before AND after computed styles and the transition (duration/easing) plus the
96
+ exact trigger. See `references/interaction-fingerprints.md`.
97
+
98
+ ### 3. Write a spec file — the contract
99
+
100
+ Write one spec per section to `<output>/specs/<section>.spec.md` BEFORE building.
101
+ This is the contract between measurement and construction: the builder works from
102
+ the spec, not from its memory of a browser session, so it can't drift into
103
+ guessing. A spec has: target file, screenshot path, **interaction model**
104
+ (static / click / scroll / hover / time), exact computed styles per element,
105
+ per-state content, assets with local paths, verbatim text, and responsive
106
+ behavior at 1440 / 768 / 390. If a builder would have to invent any value, the
107
+ spec isn't done yet.
108
+
109
+ For GPU surfaces in this section, the spec says only: **placeholder mount** — a
110
+ positioned empty container with the id, size, z-index, and pointer-events from
111
+ the surface map, for luckiest-website-cloner-shaders to fill later. Nothing more.
112
+
113
+ ### 4. Build — size agents to the model, not to dogma
114
+
115
+ Dispatch builders that each receive their spec inline (never "go read the spec").
116
+ On agent granularity: splitting a page into many tiny builders is a choice for
117
+ **speed and edit-isolation**, not a fidelity requirement — a capable model holds
118
+ a whole section's spec fine. So prefer **one builder per section** by default,
119
+ and split further only when a section contains genuinely independent pieces
120
+ (three distinct card variants, separate interactive widgets) that benefit from
121
+ parallel isolation. Over-splitting just adds merge and coordination cost.
122
+
123
+ If builders run in parallel and might touch shared files, isolate them (git
124
+ worktrees or separate output subtrees) and merge with the section topology in
125
+ hand. Each builder verifies its own typecheck/build before finishing.
126
+
127
+ ### 5. Verify with a real diff
128
+
129
+ After assembly, run an automated pixel diff (Playwright `toHaveScreenshot()`),
130
+ original vs clone, at all three breakpoints — **masking any GPU placeholder
131
+ regions** so their emptiness/animation doesn't dominate the result. Tune
132
+ `maxDiffPixelRatio` rather than demanding zero diff (anti-aliasing causes false
133
+ positives). For each real discrepancy, decide: was the spec value wrong
134
+ (re-extract, fix spec) or did the builder ignore a correct spec (fix component)?
135
+ Fix at the source, not with a compensating fudge.
136
+
137
+ ## Output
138
+
139
+ - `site/` (or the coordinator's chosen substrate) with styled sections + mounts
140
+ - `specs/*.spec.md` — one per section, the audit trail
141
+ - Downloaded assets under the project's public dir
142
+ - QA diff results per breakpoint + list of placeholder mounts left for GPU track
143
+
144
+ ## What not to do
145
+
146
+ - Don't clone from a screenshot; extract the real DOM/CSS/content.
147
+ - Don't rebuild a `<canvas>` shader/3D effect as HTML — leave a mount.
148
+ - Don't approximate a computed value you could have measured.
149
+ - Don't freeze a `<video>` or animated SVG to a static image — re-embed / keep it.
150
+ - Don't build a click-based UI when the original is scroll-driven; settle the
151
+ interaction model before building (it's a rewrite, not a tweak, to change later).
152
+
153
+ ## Guardrails
154
+
155
+ Clone for migration, for recovering your own lost source, or for learning how a
156
+ build works. Do not use it to pass off someone else's brand or design as your
157
+ own, for phishing or impersonation, or against a site whose terms forbid
158
+ reproduction. Logos, brand assets, and copy belong to their owners.
159
+
160
+ Stop and ask the user before continuing if any of these are true:
161
+
162
+ - The target looks like it exists to be impersonated: a bank or wallet login, a
163
+ checkout, an account or password page.
164
+ - The page is behind a login, a paywall, or a bot wall. Never supply
165
+ credentials, cookies, session tokens, or a stored browser profile to get past
166
+ one, and never work around the block.
167
+ - The page holds personal data about real people.
168
+
169
+ Capture only what renders publicly. Do not read or copy credentials, cookies,
170
+ local storage, or session storage from the target.
@@ -0,0 +1,93 @@
1
+ # Asset resolution ladder
2
+
3
+ A clone needs the page's images, videos, textures, and icons. Some you can just
4
+ download; some are blocked (cross-origin, DRM, auth-walled); some you *shouldn't*
5
+ copy at all (a brand's logo in a learning clone). This ladder decides, per asset,
6
+ how to resolve it — and keeps the result honest about which tier was used.
7
+
8
+ The governing rule: **a faithful clone wants the REAL asset.** Generating a
9
+ lookalike is a fallback, never the default, and is gated by what the asset *is*.
10
+ A generated hero-background texture raises completeness; a generated logo lowers
11
+ fidelity AND copies brand identity. So gate by role, not by convenience.
12
+
13
+ ## The four tiers (label every asset with the one used)
14
+
15
+ 1. **REAL** — download the actual file to the project (`<img src>`, `<video>`,
16
+ background-image, source-set). Default. Highest fidelity. Always try first.
17
+ 2. **RECONSTRUCT** — rebuild it yourself when it's cheaply rebuildable: an inline
18
+ SVG you can extract, a CSS gradient, a canvas/WebGL effect (hand to
19
+ luckiest-website-cloner-shaders). Faithful and license-clean.
20
+ 3. **GENERATE** — synthesize a substitute via the Higgsfield MCP. Only when 1 and
21
+ 2 both fail or are disallowed. Label the asset `GENERATED` and log it in
22
+ `known-gaps.md`. Never let a generated asset be reported as REAL.
23
+ 4. **PLACEHOLDER** — a solid block, blurhash, or captured poster frame, when
24
+ generation isn't wanted or the asset is identity/content (below).
25
+
26
+ ## Gate by role — the decision that matters
27
+
28
+ **Decorative / demo assets → GENERATE is appropriate** when REAL/RECONSTRUCT fail:
29
+ - hero or section **background video/image** that's blocked or heavy
30
+ - ambient **textures**, noise maps, gradient meshes, particle sprites
31
+ - a **poster frame** for a shader/canvas that couldn't be reconstructed
32
+ - filler **product/UI mockups** in a demo where exact content doesn't matter
33
+
34
+ **Identity / content assets → NEVER generate. REAL-or-PLACEHOLDER only:**
35
+ - **logos**, wordmarks, brand icons
36
+ - real **UI screenshots** / product imagery that carries meaning
37
+ - **photos of real people**, testimonials, author avatars
38
+ - anything where a generated substitute would misrepresent the original
39
+
40
+ Generating identity assets makes the clone *less* faithful and copies brand
41
+ identity — both wrong. If you can't get the real one, use a neutral placeholder
42
+ and note it.
43
+
44
+ ## Special case: composited live-UI mocks (the download trap)
45
+
46
+ The most common asset mistake on modern product sites: a hero or feature visual
47
+ that *looks* like one image is actually a **live UI composited in HTML over a
48
+ static background image** — a fake app window, code panel, or dashboard layered
49
+ on a painterly/gradient wallpaper. If you naively download the background image
50
+ (tier 1 REAL), you get an empty wallpaper with none of the UI, because the UI was
51
+ never in that file. Worse, sites often **reuse the same wallpaper** across several
52
+ feature blocks, so an nth-image match lands on the wrong block's background.
53
+
54
+ How to handle it:
55
+
56
+ - **Recognize it:** the region contains real DOM (text nodes, buttons, code) on
57
+ top of an `<img>`/background whose natural size ≈ the whole region and whose
58
+ content is just texture. If getComputedStyle sees real child elements over an
59
+ image, it's composited — not a flat asset.
60
+ - **Capture, don't download:** screenshot the composited region as a whole
61
+ (Playwright `clip` at the region's box) → tier is CAPTURED, not REAL. This is
62
+ the faithful static representation of a live composition.
63
+ - **Reused-wallpaper guard:** don't trust "the nth `<img>`" to identify the
64
+ block — capture by the region's own bounding box at the scroll offset where it's
65
+ fully visible (see the scroll-pinned note in `interaction-fingerprints.md`).
66
+
67
+ Label these CAPTURED in the report so it's clear the pixels are a snapshot of a
68
+ live composition, not a downloaded source asset.
69
+
70
+ ## Calling Higgsfield (tier 3)
71
+
72
+ Match the tool to the asset. Follow the creative-direction rule: for anything
73
+ non-trivial, propose 2–3 directions and get a pick before burning credits.
74
+
75
+ - **Image** (texture, background, mockup) → `generate_image` (GPT Image 2 for
76
+ design/text-in-image; Nano Banana for reference-driven). Feed it the surface's
77
+ role, palette (from design tokens), and aspect/size from the surface map.
78
+ - **Video** (hero background loop) → `generate_video` (Seedance for generic
79
+ motion). Match duration/aspect/muted-loop to the original `<video>` element.
80
+ - **Import a specific asset you found but can't hotlink** → `media_import_url`.
81
+ - **Cutout / transparent** → `remove_background`.
82
+
83
+ Write generated assets into the project's asset dir with a filename tagged
84
+ `-generated` and record in `known-gaps.md`: original URL (if any), why REAL/
85
+ RECONSTRUCT failed, the prompt used, and the tier. This keeps the clone auditable
86
+ and the fidelity claim honest.
87
+
88
+ ## Reporting
89
+
90
+ In the completion report, break assets down by tier: N REAL, N RECONSTRUCT, N
91
+ GENERATED, N PLACEHOLDER. A clone that's 90% REAL with 3 clearly-labeled
92
+ GENERATED decorative textures is honest and complete. A clone silently padded
93
+ with generated brand assets is neither.
@@ -0,0 +1,85 @@
1
+ # Interaction fingerprints
2
+
3
+ The most expensive mistake when rebuilding a section is getting its **control
4
+ model** wrong — building click-switched tabs when the original auto-switches on
5
+ scroll, or static CSS when the original runs a smooth-scroll library. Fixing it
6
+ later is a rewrite, not a tweak, because it changes the component's whole
7
+ structure. So identify the mechanism during extraction, from concrete signatures,
8
+ not from how it looks.
9
+
10
+ ## Determine the model by observing, in this order
11
+
12
+ 1. **Scroll first, don't click.** Slowly scroll the section. If content changes,
13
+ panels swap, or a sidebar's active item advances on its own as you scroll,
14
+ it's **scroll-driven** (IntersectionObserver / scroll timeline / sticky). Note
15
+ the trigger (scroll position or intersection ratio).
16
+ 2. **Then click.** If nothing changes on scroll, test clicks — real tabs/pills
17
+ that swap content on click.
18
+ 3. **Then hover.** Record hover state changes (color/scale/shadow) with their
19
+ transition duration + easing.
20
+
21
+ Record the verdict explicitly in the spec: `INTERACTION MODEL: scroll-driven
22
+ (IntersectionObserver)` etc.
23
+
24
+ ## Smooth-scroll libraries
25
+
26
+ Native browser scrolling feels different from a lerp-smoothed library; users spot
27
+ it instantly, so a clone must reproduce the same scroll feel. Detect by
28
+ signature:
29
+
30
+ - **Lenis** (the dominant current library) — a `Lenis` runtime global, a `lenis`
31
+ class on `<html>`, and/or `data-lenis*` attributes (e.g. `data-lenis-prevent`).
32
+ It smooths the browser's own native scroll (so sticky/anchor/accessibility keep
33
+ working) rather than transform-hijacking the page — reproduce it by adding Lenis
34
+ with matching lerp/duration, not by faking scroll with transforms.
35
+ - **Locomotive Scroll** — `data-scroll`, `data-scroll-container`,
36
+ `data-scroll-section`, `data-scroll-speed` attributes. Current versions are
37
+ built on top of Lenis, so a Locomotive page often shows Lenis signatures too;
38
+ reproduce with Locomotive (or Lenis + the same `data-scroll-speed` parallax).
39
+
40
+ The surface-map script already reports these under `scroll`. Trust that as the
41
+ first pass, then confirm the feel.
42
+
43
+ ## Scroll-driven CSS animations
44
+
45
+ Modern sites increasingly drive animations off scroll/view progress instead of
46
+ time, with no JS. Their fingerprint is CSS: `animation-timeline` set to something
47
+ other than `auto`, plus `scroll-timeline-name` / `view-timeline-name` (and their
48
+ `-axis` / `-inset`). When present, rebuild with the same scroll/view timeline —
49
+ don't approximate it with a JS scroll listener, which will feel and perform
50
+ differently.
51
+
52
+ ## Behaviors to catch (illustrative, not exhaustive)
53
+
54
+ - Navbar that shrinks / gains a shadow / changes background past a scroll
55
+ threshold — capture styles at position 0 and past the trigger; diff them.
56
+ - Elements that animate into view on entering the viewport (fade-up, stagger).
57
+ - Sticky sidebars whose active item auto-changes as content scrolls (Intersection
58
+ Observer, NOT click handlers) — the classic scroll-vs-click trap.
59
+ - Parallax layers moving at different rates than scroll.
60
+ - Auto-playing carousels / cycling content (time-driven).
61
+ - Section-to-section theme flips (dark↔light) tied to scroll.
62
+
63
+ For any stateful element, extract **every** state's content and styles plus the
64
+ transition between them — a clone that only captures the load-time state looks
65
+ broken the moment the user interacts with it.
66
+
67
+ ## Capturing assets inside scroll-pinned / sticky sequences
68
+
69
+ A common modern pattern: a tall feature section where a sticky column stays fixed
70
+ while paired content scrolls, swapping the visible mock per feature (`position:
71
+ sticky` + IntersectionObserver). Two traps when capturing the paired visual:
72
+
73
+ - **Don't trust "the nth image."** These sequences frequently reuse one
74
+ background/wallpaper image across every block, so an nth-`<img>` selector lands
75
+ on the wrong block's asset. Identify the block by its own container's bounding
76
+ box, not by image index.
77
+ - **Capture at the paired scroll offset.** The correct mock for feature N is only
78
+ fully composited/visible when the section is scrolled to N's active range.
79
+ Scroll to that offset first, then clip the region — capturing at scroll 0 gives
80
+ you the first (or an empty) frame. Record the offset in the spec so the capture
81
+ is reproducible.
82
+
83
+ If you only need a static clone, one clean full-row capture at the right offset is
84
+ enough; if you're rebuilding the pin behavior, also record the trigger ranges per
85
+ block (which one is active at which scroll position).
@@ -0,0 +1,4 @@
1
+ # Attribution
2
+
3
+ See `../luckiest-website-cloner/ATTRIBUTION.md`. Luckiest edition of the
4
+ open-source site-clone skill collection, MIT licensed.
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0
4
+
5
+ First Luckiest edition of `luckiest-website-cloner-remix`. Renamed from the upstream site-clone
6
+ collection, guardrails added to every entry point, recipes added for running the
7
+ probes from an in-app browser pane, frontmatter normalized to the Luckiest
8
+ package format. See ATTRIBUTION.md.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Chase Hannegan
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,202 @@
1
+ ---
2
+ name: luckiest-website-cloner-remix
3
+ description: >-
4
+ Turn a cloned (or any measured) website into YOUR site: re-skin it with your
5
+ brand, copy, and assets; generate three deliberately different design
6
+ directions as token/motion/shader overrides and render them side by side;
7
+ then put a live tweak panel on the direction you pick. This is the step after
8
+ /luckiest-website-cloner — it consumes the clone's TEARDOWN.md, tokens-*.json, motion.json,
9
+ and site/ and never re-probes. Use when the user says "/remix", "remix this
10
+ clone", "make this mine", "re-skin this", "give me three versions of this
11
+ site", "variations of this design", "add a tweak panel", "let me tune the
12
+ colors/spacing/motion", or has just approved a clone and wants to move from
13
+ copying to owning. NOT for cloning (use /luckiest-website-cloner) and NOT for building a
14
+ site from scratch.
15
+ argument-hint: "<clone-dir or site-dir> [--phase reskin|directions|panel]"
16
+ user-invocable: true
17
+ license: MIT. See ATTRIBUTION.md
18
+ allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
19
+ metadata:
20
+ version: "1.0.0"
21
+ listing_id: luckiest-website-cloner-remix
22
+ author: luckiest
23
+ ---
24
+
25
+ # Remix Site
26
+
27
+ A clone is a **measured design system plus a proven structure**. The teardown
28
+ already enumerated every knob — palette, type scale, spacing rhythm, motion
29
+ params, shader props, section order. Remixing means changing what flows
30
+ through those knobs, in three phases that each **stop for the user's call**
31
+ (unlike `/luckiest-website-cloner`, which runs autonomously):
32
+
33
+ 1. **Re-skin** — swap the three things that make it *theirs*: copy, brand, hero
34
+ assets. Output: a de-branded template. Non-negotiable and first.
35
+ 2. **Directions** — three deliberately different combinations of the big forks
36
+ (palette mood × type pairing × hero treatment × motion personality), rendered
37
+ side by side. The user picks one.
38
+ 3. **Tweak panel** — the chosen direction's 10–15 real knobs made live in the
39
+ page, with permalink state. Not 80 sliders; the ones they'll keep turning.
40
+
41
+ `--phase` runs a single phase (e.g. a second re-skin for another client, or a
42
+ panel on a site that never came from the cloner).
43
+
44
+ ## Inputs (the luckiest-website-cloner contract)
45
+
46
+ Resolve `$ARGUMENTS` to a directory and look for:
47
+
48
+ | File | Used for |
49
+ |---|---|
50
+ | `TEARDOWN.md` | stack, effects table, assets table, known gaps |
51
+ | `tokens-*.json` | the measured design system — the knob list |
52
+ | `motion.json` | exact animation params — the motion knobs |
53
+ | `surface-map.json` | which regions are GPU (shader knobs live here) |
54
+ | `site/` | the rebuilt project (Vite/Next) |
55
+ | `assets/` or `site/public/assets/` | original assets, tiered |
56
+
57
+ If only `site/` exists (not a clone), run `tokens-probe.js` and
58
+ `motion-probe.js` from `../luckiest-website-cloner/scripts/` against the dev server once to
59
+ produce the JSON — then proceed. Never re-probe when the JSON is present.
60
+
61
+ ## Phase 0 — Tokenize (mechanical, do it before anything)
62
+
63
+ The clone's CSS is full of literal values (`#1f3bff`, `32.04px`). Nothing can be
64
+ varied until those literals become variables. Run:
65
+
66
+ ```bash
67
+ node scripts/tokenize-css.cjs <site>/src/<site>.css <tokens-1440.json> <site>/src
68
+ ```
69
+
70
+ It rewrites the stylesheet so every measured token value goes through
71
+ `var(--rx-<role>, <original>)` and writes `remix-tokens.css` (the defaults). If
72
+ the site already exposes its own `--vars` (Nuxt/Vue sites often do), the script
73
+ aliases those instead of inventing new names — keep the site's vocabulary.
74
+
75
+ Route motion through a config too: the clone's behavior JS should read from
76
+ `window.__remix.motion` (seeded from `motion.json` → `remix-motion.js`), and
77
+ shader mounts from `window.__remix.shaders`. If the builder hard-coded them,
78
+ hoist now. This is the one code change remix makes to the clone — everything
79
+ after is data.
80
+
81
+ Verify the site still renders identically (`qa/diff.mjs` against itself before
82
+ /after: must be 0%). **Show the user the knob list** (`remix/knobs.json`) and
83
+ stop: "These are the N things we can turn. Re-skin next?"
84
+
85
+ ## Phase 1 — Re-skin
86
+
87
+ Ask for, in one batch: **brand** (name, logo file or "generate a placeholder
88
+ mark", primary + accent colors or "derive from logo"), **copy** (a doc/URL to
89
+ pull from, bullet points to expand, or "placeholder in their structure"), and
90
+ **hero/section assets** (files, or "generate").
91
+
92
+ Then:
93
+ - **Copy** — replace every text node section by section, keeping the
94
+ original's *shape* (eyebrow / headline / sub / CTA / card counts). Headline
95
+ lengths matter for layout: match ±20% characters or the hero reflows. Note
96
+ any overflow in the report.
97
+ - **Brand** — logo into the header/footer slots; primary/accent into
98
+ `remix-tokens.css`; favicon/OG.
99
+ - **Assets** — resolve through `../luckiest-website-cloner-dom/references/asset-resolution.md`
100
+ with the roles flipped: the original's REAL assets are now the thing to
101
+ *remove*. Decorative (hero background, textures, ambient imagery) →
102
+ GENERATE via Higgsfield using the original's composition as the brief (aspect,
103
+ subject placement, mood) — see `references/reskin.md` for the brief
104
+ template. Identity (their logo, their people, their product shots) → must be
105
+ replaced, never kept. Fonts: if the original's are commercially licensed,
106
+ swap to an open pairing with matching metrics (`references/reskin.md` has
107
+ the lookup); if open, keep.
108
+ - **Remove** analytics, their API endpoints, their links.
109
+
110
+ Render, screenshot the hero + two sections, **stop**: "This is the template
111
+ with your brand. Directions next?"
112
+
113
+ ## Phase 2 — Three directions
114
+
115
+ **Ask first, one batch, before touching anything** (this is the question that
116
+ decides whether the directions are coats of paint or actually different sites):
117
+
118
+ 1. **Amplitude** — *subtle* / *medium* / *big*?
119
+ | | moves | layer |
120
+ |---|---|---|
121
+ | subtle | palette, accent, motion timing, shader colors | `overrides.json` only |
122
+ | medium | + surface (radius/border/shadow), density (spacing ×), type scale + weights, grain | + `patch.css` |
123
+ | big | + hero treatment (photo → type-only / GPU-led / engraving), layout (grid ↔ editorial ↔ bento), section order, nav style, own hero asset per direction | + `patch.js` + generated assets |
124
+ If unsure, recommend **medium** — subtle reads as "same site, different coat"
125
+ side by side; big costs generations.
126
+ 2. **Anchors** — "any aesthetics in mind?" *none* / *describe it* / *reference
127
+ sites or images* / *pull from my taste library* (`/taste-vault`). With none:
128
+ nearest-legit / opposite / wildcard from `references/directions.md`. With
129
+ anchors: one direction per anchor, built *toward* it, and say which fork each
130
+ anchor maps to so the user sees the translation.
131
+
132
+ Not five. Five converge; three deliberately different forks give a real choice.
133
+ Each direction is **data + an optional patch layer**, scoped to
134
+ `:root[data-rx="<slug>"]` so directions never collide:
135
+
136
+ ```
137
+ remix/directions/<slug>.json
138
+ { "name": "...", "thesis": "one line",
139
+ "tokens": { "--rx-accent": "#…", "--rx-font-display": "…", "--rx-space-unit": "…" },
140
+ "motion": { "reveal": { "y": 22, "duration": 0.7, "ease": [.16,1,.3,1] }, "stagger": 0.08 },
141
+ "shaders": { "hero": { "colorFront": "#…", "intensity": 0.5 } },
142
+ "assets": { "hero-bg": "generated/<slug>-hero.jpg" } }
143
+ remix/directions/<slug>.patch.css (medium+) surface / density / type scale under :root[data-rx="<slug>"]
144
+ remix/directions/<slug>.patch.js (big) structural: hero variant, section order, layout classes
145
+ ```
146
+
147
+ `apply-overrides.cjs` picks up `<slug>.patch.css` / `.patch.js` next to the
148
+ JSON automatically. Patches must be **additive and scoped** — never edit the
149
+ base HTML/CSS for a direction, or the other two break.
150
+
151
+ Derive the three from the original's *axes*, not from taste alone — see
152
+ `references/directions.md` for the fork table (palette mood, type pairing, hero
153
+ treatment, density, motion personality) and the rule that each direction must
154
+ differ on **at least three** forks. If the user has a taste library
155
+ (`/taste-vault` or reference images), pull the directions from there. Generate
156
+ per-direction hero assets only for the decorative layer.
157
+
158
+ Apply each with `node scripts/apply-overrides.cjs <site> remix/directions/<slug>.json`
159
+ (writes `remix-tokens.<slug>.css` + `remix-motion.<slug>.js`; the site loads
160
+ the active set via `?rx=<slug>`). Then `node scripts/gallery.cjs <site>` writes
161
+ `<site>/directions.html`: all directions **live side by side in iframes** (real
162
+ shaders + motion), synced scroll, click-a-name fullscreen, and a *pick* button
163
+ that stores the choice in `localStorage.rx-pick`. Open it in the user's browser
164
+ (this is the deliverable — not a static contact sheet), and also render
165
+ `remix/directions.jpg` for the report. **Stop** with the URL and one line per
166
+ direction: thesis + what changed. The user picks (read `rx-pick` or ask).
167
+
168
+ ## Phase 3 — Tweak panel
169
+
170
+ On the pick only. Choose **10–15 knobs** from `knobs.json` — the ones that
171
+ matter for *this* direction (accent, display font size base, section spacing
172
+ unit, radius, reveal distance/duration/ease, stagger, shader intensity/colors,
173
+ hero gradient angle, grain opacity). Write `remix/panel.json`
174
+ (`references/tweak-panel.md` has the schema: type, range, step, default, CSS
175
+ var or motion/shader path) and inject `scripts/tweak-panel.js` into the site.
176
+
177
+ The panel: fixed, collapsible, grouped (Color / Type / Space / Motion / GPU),
178
+ writes CSS vars live, pokes `window.__remix` for motion/shader knobs and
179
+ re-renders the affected mount, serializes state into `#rx=` so a URL is a
180
+ permalink, and has Copy JSON / Reset / Export-as-direction. Keyboard: `` ` ``
181
+ toggles it. It is **dev-only** — stripped from the production build.
182
+
183
+ Verify: every knob visibly changes the page, permalink round-trips, reset
184
+ returns to the direction's defaults. Screenshot with the panel open.
185
+
186
+ ## Completion report
187
+
188
+ - Template: what was replaced (copy sections, brand slots, assets by tier —
189
+ GENERATED assets listed), fonts kept/swapped and why
190
+ - Directions: the contact sheet + the three theses + which was picked
191
+ - Panel: knob list, permalink example
192
+ - Still theirs: anything structural you kept verbatim that the user should
193
+ know about (section order, interaction patterns) — a remix is legitimate
194
+ because the *expression* is new; say plainly what the skeleton still owes
195
+ to the original
196
+
197
+ ## Guardrails
198
+
199
+ Phase 1 is mandatory before anything ships: no remix leaves with the
200
+ original's logo, copy, people, product imagery, or licensed fonts. If the user
201
+ asks to skip re-skinning and just "change the colors", say why that's still
202
+ their site and do Phase 1 first.