@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 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, GSAP)
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": "@skyf0xx/hedgehog",
3
- "version": "2.0.8",
3
+ "version": "2.0.9",
4
4
  "description": "Install the Hedgehog build discipline (agents + skills) into a repo.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -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, GSAP/ScrollTrigger/Lenis, SplitType, and the p5.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.
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
- - **GSAP + ScrollTrigger** — implement `landing-sequencer`'s pacing spec:
31
- section transitions, timing. Scoped to CSS/transform targets only, no
32
- plugins — a `border-radius` string tween replaces shape-morphing, for
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
- - **p5.js / CSS / Canvas 2D** — implement the motif from `src/motifs/`
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 (p5.js for organic/generative, CSS 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 GSAP/ScrollTrigger timeline per the pacing
55
- spec — transition type, relative weight (translated to actual spacing/
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 GSAP timeline matching its specified beat.
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/GSAP output. You don't write code.
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 GSAP/ScrollTrigger/Lenis as the implementation target.
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 GSAP/
15
- ScrollTrigger/Lenis need to do, section by section.
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
- - **GSAP + ScrollTrigger** — the primary animation engine; you own its
20
- pacing spec (what triggers when, relative to scroll position).
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 GSAP/ScrollTrigger code, Astro markup, or final
105
- section content — that's `landing-builder`'s step 10. Your output is
106
- the spec, not the implementation.
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
- - **p5.js** for an organic/generative motif — described as a rule
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 GSAP-animatable.
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 p5.js sketch (driven by a formula — noise, jitter, growth) for
163
- an organic motif that needs to evolve programmatically across sections; a
164
- CSS-only treatment (`clip-path`, gradients, `border-radius`) for a static
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.3",
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
- "p5": "^2.3.1",
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.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
  }