@skyf0xx/hedgehog 2.0.8 → 2.0.9
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 +1 -1
- package/package.json +1 -1
- package/src/agents/landing-builder.md +13 -11
- package/src/agents/landing-critic.md +1 -1
- package/src/agents/landing-sequencer.md +8 -8
- package/src/agents/landing-systems.md +6 -5
- package/src/golden-cores/landing-page/package.json +7 -7
- package/src/golden-cores/landing-page/pnpm-lock.yaml +155 -225
- package/src/skills/hedgehog-bootstrap-landing-page-core/SKILL.md +2 -2
- package/src/skills/motif-authoring/SKILL.md +28 -58
- package/src/skills/paper-js-motifs/SKILL.md +167 -0
- package/src/templates/CLAUDE.core.landing-page.md +17 -16
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ From an empty project folder ask Claude to install:
|
|
|
72
72
|
# 1. Full-stack app (Nx, NestJS, Drizzle, ts-rest, Next.js)
|
|
73
73
|
npx @skyf0xx/hedgehog init --ts-full-stack-app
|
|
74
74
|
|
|
75
|
-
# 2. Landing page (Astro, Tailwind,
|
|
75
|
+
# 2. Landing page (Astro, Tailwind, Motion)
|
|
76
76
|
npx @skyf0xx/hedgehog init --landing-page
|
|
77
77
|
```
|
|
78
78
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: landing-builder
|
|
3
|
-
description: Use for the build phase of the Chain Method (landing-page core) — implementing the audited spec exactly in Astro, Tailwind,
|
|
3
|
+
description: Use for the build phase of the Chain Method (landing-page core) — implementing the audited spec exactly in Astro, Tailwind, Motion/Lenis, SplitType, and the Paper.js/CSS/Canvas 2D motif construction, placing landing-copywriter's final copy verbatim. Runs last, only after landing-critic returns a pass. Specializes in this core's stack; builds to spec, never improvises around it.
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: green
|
|
6
6
|
tools: Read, Glob, Grep, Edit, Write, Bash
|
|
@@ -27,21 +27,23 @@ never silently improvised around.
|
|
|
27
27
|
value outside that token set — a value you need that isn't there is a
|
|
28
28
|
gap in the token system, flagged back to `landing-systems`, not
|
|
29
29
|
invented locally.
|
|
30
|
-
- **
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
example.
|
|
30
|
+
- **Motion** — implement `landing-sequencer`'s pacing spec: section
|
|
31
|
+
transitions, timing, via `animate()`/`scroll()`/`stagger()`. Scoped to
|
|
32
|
+
CSS/transform targets only — a `border-radius` string tween replaces
|
|
33
|
+
shape-morphing, for example.
|
|
34
34
|
- **Lenis** — wire smooth-scroll globally, matching the beat structure
|
|
35
35
|
`landing-sequencer` specified.
|
|
36
36
|
- **SplitType** — implement copy-reveal splitting exactly where
|
|
37
37
|
`landing-sequencer`'s beat structure calls for it, not on every section
|
|
38
38
|
by default.
|
|
39
|
-
- **
|
|
39
|
+
- **Paper.js / CSS / Canvas 2D** — implement the motif from `src/motifs/`
|
|
40
40
|
exactly as `landing-systems` specified (source, persistence,
|
|
41
41
|
continuity, scale range, literalness), using whichever construction
|
|
42
|
-
technique the spec calls for (
|
|
42
|
+
technique the spec calls for (Paper.js for organic/generative, CSS for
|
|
43
43
|
static geometric, Canvas 2D for measured/connective) — don't simplify
|
|
44
|
-
or embellish it during implementation.
|
|
44
|
+
or embellish it during implementation. Use the `paper-js-motifs` skill
|
|
45
|
+
for the Paper.js implementation patterns (scoped `PaperScope`, seeded
|
|
46
|
+
randomness, the `params` object, setter-based redraw).
|
|
45
47
|
- **React Three Fiber** — only if the subject is genuinely spatial and
|
|
46
48
|
`landing-systems`/`landing-sequencer` specified it; otherwise never
|
|
47
49
|
reach for it.
|
|
@@ -51,8 +53,8 @@ never silently improvised around.
|
|
|
51
53
|
- Replace the core's placeholder `src/pages/index.astro` with the real
|
|
52
54
|
page, assembled from `src/sections/` components in
|
|
53
55
|
`landing-sequencer`'s order.
|
|
54
|
-
- Implement each section's
|
|
55
|
-
|
|
56
|
+
- Implement each section's Motion timeline per the pacing spec —
|
|
57
|
+
transition type, relative weight (translated to actual spacing/
|
|
56
58
|
sizing), sub-section beats.
|
|
57
59
|
- Wire Lenis once, globally, matching the specified scroll feel.
|
|
58
60
|
- Implement the motif exactly as specified, in `src/motifs/`, referenced
|
|
@@ -68,7 +70,7 @@ never silently improvised around.
|
|
|
68
70
|
2. Read the full chain: emotional target, token system, motif, pacing
|
|
69
71
|
spec, final copy — not just the sequencer's output in isolation.
|
|
70
72
|
3. Build section by section, in `landing-sequencer`'s order, each
|
|
71
|
-
section's
|
|
73
|
+
section's Motion timeline matching its specified beat.
|
|
72
74
|
4. Wire Lenis, the motif, and `landing-copywriter`'s copy per spec.
|
|
73
75
|
5. Verify: `pnpm astro check`, `pnpm lint`, `pnpm build` all clean.
|
|
74
76
|
6. Commit as `feat(landing): build`.
|
|
@@ -17,7 +17,7 @@ over the whole chain; you cannot rewrite anything yourself.
|
|
|
17
17
|
## Stack (locked)
|
|
18
18
|
|
|
19
19
|
None — you read specs and, once `landing-builder` has run at least a
|
|
20
|
-
draft, the built Astro/Tailwind/
|
|
20
|
+
draft, the built Astro/Tailwind/Motion output. You don't write code.
|
|
21
21
|
|
|
22
22
|
## Core Responsibilities
|
|
23
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: landing-sequencer
|
|
3
|
-
description: Use for the sequence phase of the Chain Method (landing-page core) — per-section transition type, relative weight, spacing, and beat structure. Runs after landing-systems, before landing-copywriter. Specializes in pacing a scroll as a deliberate composition rather than a stack of sections, using
|
|
3
|
+
description: Use for the sequence phase of the Chain Method (landing-page core) — per-section transition type, relative weight, spacing, and beat structure. Runs after landing-systems, before landing-copywriter. Specializes in pacing a scroll as a deliberate composition rather than a stack of sections, using Motion/Lenis as the implementation target.
|
|
4
4
|
model: sonnet
|
|
5
5
|
color: orange
|
|
6
6
|
tools: Read, Glob, Grep, Edit, Write
|
|
@@ -11,13 +11,13 @@ Method (`hedgehog-landing-loop`), running step 7: Sequencer. Your input
|
|
|
11
11
|
is `landing-systems`'s token system and motif, plus `landing-strategist`'s
|
|
12
12
|
note-timing spec (top/heart/base, the peak moment, the ending treatment).
|
|
13
13
|
Your output is the pacing spec `landing-builder` implements against —
|
|
14
|
-
you don't write final page code, but you do specify exactly what
|
|
15
|
-
|
|
14
|
+
you don't write final page code, but you do specify exactly what Motion/
|
|
15
|
+
Lenis need to do, section by section.
|
|
16
16
|
|
|
17
17
|
## Stack (locked)
|
|
18
18
|
|
|
19
|
-
- **
|
|
20
|
-
|
|
19
|
+
- **Motion** — the primary animation engine; you own its pacing spec
|
|
20
|
+
(what triggers when, relative to scroll position).
|
|
21
21
|
- **Lenis** — smooth-scroll feel; your beat structure accounts for
|
|
22
22
|
Lenis's easing, not raw browser scroll physics.
|
|
23
23
|
- **SplitType** — line/word/char copy-reveal splitting, where a section's
|
|
@@ -101,9 +101,9 @@ back), not something to silently override.
|
|
|
101
101
|
trace to the token system, the motif, or the note-timing spec — a
|
|
102
102
|
transition chosen for variety's sake with no upstream justification is
|
|
103
103
|
exactly what gets redlined at the next phase.
|
|
104
|
-
- Never write actual
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
- Never write actual Motion code, Astro markup, or final section
|
|
105
|
+
content — that's `landing-builder`'s step 10. Your output is the spec,
|
|
106
|
+
not the implementation.
|
|
107
107
|
- Don't relitigate the token system or the motif — if either seems wrong
|
|
108
108
|
for pacing purposes, flag it back to `landing-systems` rather than
|
|
109
109
|
quietly working around it.
|
|
@@ -23,10 +23,10 @@ values and the signature motif.
|
|
|
23
23
|
base.
|
|
24
24
|
- **Motif construction** is picked per motif type, never hand-typed
|
|
25
25
|
coordinates:
|
|
26
|
-
- **
|
|
26
|
+
- **Paper.js** for an organic/generative motif — described as a rule
|
|
27
27
|
(noise, jitter, growth) rather than freehand path data.
|
|
28
28
|
- **CSS** (`clip-path` / gradients / `border-radius`) for a static
|
|
29
|
-
geometric motif — spines, chevrons, blobs — directly
|
|
29
|
+
geometric motif — spines, chevrons, blobs — directly Motion-animatable.
|
|
30
30
|
- **Canvas 2D with computed coordinates** for a measured/connective
|
|
31
31
|
motif — threads/lines that align to real DOM positions, drawn from
|
|
32
32
|
measured values, not imagined ones.
|
|
@@ -159,9 +159,10 @@ Borrowed technique:
|
|
|
159
159
|
recurs, rather than repeating identically or mutating arbitrarily
|
|
160
160
|
|
|
161
161
|
Pick the construction technique from what the motif actually is, not by
|
|
162
|
-
default: a
|
|
163
|
-
an organic motif that needs to evolve programmatically
|
|
164
|
-
CSS-only treatment (`clip-path`, gradients,
|
|
162
|
+
default: a Paper.js scene graph (driven by a formula — noise, jitter,
|
|
163
|
+
growth) for an organic motif that needs to evolve programmatically
|
|
164
|
+
across sections; a CSS-only treatment (`clip-path`, gradients,
|
|
165
|
+
`border-radius`) for a static
|
|
165
166
|
geometric shape; Canvas 2D driven by measured DOM coordinates for a motif
|
|
166
167
|
that threads/connects across real element positions. Output the result
|
|
167
168
|
into `src/motifs/`. Use the `motif-authoring` skill for the actual
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "app",
|
|
3
|
-
"private": true,
|
|
4
3
|
"type": "module",
|
|
5
4
|
"version": "0.0.1",
|
|
6
|
-
"packageManager": "pnpm@10.12.1",
|
|
7
5
|
"engines": {
|
|
8
6
|
"node": ">=22.12.0"
|
|
9
7
|
},
|
|
@@ -18,16 +16,16 @@
|
|
|
18
16
|
},
|
|
19
17
|
"dependencies": {
|
|
20
18
|
"@tailwindcss/vite": "^4.3.3",
|
|
21
|
-
"astro": "^7.1.
|
|
22
|
-
"gsap": "^3.15.0",
|
|
19
|
+
"astro": "^7.1.4",
|
|
23
20
|
"lenis": "^1.3.25",
|
|
21
|
+
"motion": "^12.42.2",
|
|
24
22
|
"ogl": "^1.0.11",
|
|
25
|
-
"
|
|
23
|
+
"paper": "^0.12.18",
|
|
26
24
|
"split-type": "^0.3.4",
|
|
27
25
|
"tailwindcss": "^4.3.3"
|
|
28
26
|
},
|
|
29
27
|
"devDependencies": {
|
|
30
|
-
"@astrojs/check": "^0.9.
|
|
28
|
+
"@astrojs/check": "^0.9.10",
|
|
31
29
|
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
|
32
30
|
"@typescript-eslint/parser": "^8.65.0",
|
|
33
31
|
"astro-eslint-parser": "^3.0.0",
|
|
@@ -37,5 +35,7 @@
|
|
|
37
35
|
"prettier-plugin-astro": "^0.14.1",
|
|
38
36
|
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
39
37
|
"typescript": "^5.9.3"
|
|
40
|
-
}
|
|
38
|
+
},
|
|
39
|
+
"private": true,
|
|
40
|
+
"packageManager": "pnpm@10.12.1"
|
|
41
41
|
}
|