@skyf0xx/hedgehog 0.1.21 → 2.0.0
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 +92 -20
- package/bin/cli.mjs +107 -45
- package/package.json +2 -2
- package/src/agents/bootstrap.md +83 -50
- package/src/agents/front-end-eng.md +1 -1
- package/src/agents/landing-builder.md +96 -0
- package/src/agents/landing-critic.md +107 -0
- package/src/agents/landing-sequencer.md +112 -0
- package/src/agents/landing-strategist.md +217 -0
- package/src/agents/landing-systems.md +206 -0
- package/src/agents/planner.md +207 -143
- package/src/golden-cores/landing-page/.prettierignore +4 -0
- package/src/golden-cores/landing-page/.prettierrc.js +11 -0
- package/src/golden-cores/landing-page/.vscode/extensions.json +4 -0
- package/src/golden-cores/landing-page/.vscode/launch.json +11 -0
- package/src/golden-cores/landing-page/astro.config.mjs +11 -0
- package/src/golden-cores/landing-page/eslint.config.mjs +23 -0
- package/src/golden-cores/landing-page/gitignore.template +9 -0
- package/src/golden-cores/landing-page/package.json +40 -0
- package/src/golden-cores/landing-page/pnpm-lock.yaml +4587 -0
- package/src/golden-cores/landing-page/public/favicon.ico +0 -0
- package/src/golden-cores/landing-page/public/favicon.svg +9 -0
- package/src/golden-cores/landing-page/src/motifs/.gitkeep +0 -0
- package/src/golden-cores/landing-page/src/pages/index.astro +24 -0
- package/src/golden-cores/landing-page/src/sections/.gitkeep +0 -0
- package/src/golden-cores/landing-page/src/styles/global.css +18 -0
- package/src/golden-cores/landing-page/tsconfig.json +5 -0
- package/src/skills/hedgehog-bootstrap/SKILL.md +19 -19
- package/src/skills/{hedgehog-bootstrap-core → hedgehog-bootstrap-full-stack-app-core}/SKILL.md +19 -18
- package/src/skills/hedgehog-bootstrap-landing-page-core/SKILL.md +160 -0
- package/src/skills/hedgehog-landing-loop/SKILL.md +188 -0
- package/src/skills/hedgehog-planning-intake/SKILL.md +30 -17
- package/src/templates/CLAUDE.core.full-stack-app.md +131 -0
- package/src/templates/CLAUDE.core.landing-page.md +133 -0
- package/src/templates/CLAUDE.md +54 -183
- package/src/templates/TODO.core.full-stack-app.md +46 -0
- package/src/templates/TODO.core.landing-page.md +24 -0
- package/src/templates/TODO.md +6 -50
- /package/src/{golden-core → golden-cores/full-stack-app}/.env.example +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/.github/workflows/phase-gate.yml +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/.prettierignore +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/.prettierrc +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/.vscode/extensions.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/eslint.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/app/app.module.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/app/health.controller.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/assets/.gitkeep +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/main.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/tsconfig.app.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/webpack.config.cjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/eslint.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/api/api.spec.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/global-setup.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/test-setup.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/tsconfig.spec.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/vitest.config.mts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/.prettierrc.js +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/.swcrc +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/components.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/eslint.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/index.d.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/next-env.d.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/next.config.js +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/postcss.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/public/.gitkeep +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/public/favicon.ico +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/global.css +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/layout.tsx +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/page.tsx +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/providers.tsx +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/theme-toggle.tsx +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/ui/button.tsx +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/lib/utils.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/eslint.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/playwright.config.mts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/src/example.spec.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/commitlint.config.cjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/docker-compose.yml +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/eslint.config.mjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/gitignore.template +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/lefthook.yml +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/nx.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/eslint-base.js +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/prettier.js +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/env.schema.spec.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/env.schema.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/index.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.lib.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.spec.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/vitest.config.mts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/package.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/index.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/lib/db.spec.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/lib/db.ts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.lib.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.spec.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/vitest.config.mts +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/pnpm-lock.yaml +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/pnpm-workspace.yaml +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/tools/phase-gate.cjs +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/tsconfig.base.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/tsconfig.json +0 -0
- /package/src/{golden-core → golden-cores/full-stack-app}/vitest.workspace.ts +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hedgehog-landing-loop
|
|
3
|
+
description: Use for every unit of work on the landing-page core, from planning intake through the final build phase — the Chain Method's brief → feeling → tokens/motif → sequence → artifact pipeline, gated and committed one phase at a time, checked off TODO.md. Triggers on "next step", "next phase", "what's next", or the start of any work session on a bootstrapped landing-page project. Also covers this core's own planning intake and Correction Protocol.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Hedgehog Landing Loop
|
|
7
|
+
|
|
8
|
+
The operating loop for a bootstrapped `landing-page` project: pick the
|
|
9
|
+
next phase, run it through its owning agent, gate it, commit it, check it
|
|
10
|
+
off. `TODO.md` at repo root is the live list — read it before starting.
|
|
11
|
+
It's thin: a context blurb plus a checklist mirroring the phase structure
|
|
12
|
+
below. Checked/unchecked is its only state.
|
|
13
|
+
|
|
14
|
+
This is the **Chain Method**: a pipeline where every visual choice traces
|
|
15
|
+
back to a reason. No agent may introduce a choice that doesn't originate
|
|
16
|
+
in the previous agent's output — that discipline is what this skill
|
|
17
|
+
enforces mechanically, the same role Nx module boundaries play for
|
|
18
|
+
`full-stack-app`.
|
|
19
|
+
|
|
20
|
+
## Planning intake (Phase 0, before any build phase)
|
|
21
|
+
|
|
22
|
+
Run once, before `bootstrap` scaffolds the workspace. Opens with
|
|
23
|
+
`hedgehog-planning-intake`'s Phase 0 — the same vendored BMAD-METHOD
|
|
24
|
+
shelf `full-stack-app` runs, in the same full sequence, archived to the
|
|
25
|
+
same `.hedgehog/BMAD/` layout. After that Phase 0 completes, this
|
|
26
|
+
section does its own mining — a one-paragraph subject statement, the
|
|
27
|
+
landing-page counterpart to `hedgehog-planning-intake`'s own Phase 1
|
|
28
|
+
(domain modules and an Add-ons decision on full-stack-app). That mined
|
|
29
|
+
draft becomes the first draft of `.hedgehog/chain/00-brief.md`, shown
|
|
30
|
+
back at Confirm & Lock for the user to accept or correct.
|
|
31
|
+
|
|
32
|
+
1. **Run `hedgehog-planning-intake`'s Phase 0 in full**: state the BMAD
|
|
33
|
+
attribution it states, then run `bmad-brainstorming`,
|
|
34
|
+
`bmad-product-brief`, `bmad-prfaq`, `bmad-prd`, `bmad-ux`,
|
|
35
|
+
`bmad-deep-recon`, archived to `.hedgehog/BMAD/` with the fixed layout
|
|
36
|
+
and `00-manifest.md` attribution header that skill's Phase 0 defines.
|
|
37
|
+
`.hedgehog/BMAD/` is archival and immutable once written, same as
|
|
38
|
+
`full-stack-app` — nothing in this core's day-to-day loop reads it
|
|
39
|
+
live after this step mines it once.
|
|
40
|
+
2. **Mine a draft subject statement** from `.hedgehog/BMAD/`: the
|
|
41
|
+
concrete subject (what is this actually selling/announcing/showing),
|
|
42
|
+
the audience, and the page's single job, sourced from the brief and
|
|
43
|
+
PR-FAQ (a landing page's brief and PR-FAQ are the closest BMAD
|
|
44
|
+
artifacts to a subject statement — the PRD's Glossary and deep-recon
|
|
45
|
+
output are read for supporting color, not required to resolve a
|
|
46
|
+
one-page subject/audience/job). Where BMAD's material leaves any of
|
|
47
|
+
the three genuinely unresolved, ask directly — don't proceed on
|
|
48
|
+
vagueness, and don't invent an audience or job that wasn't stated,
|
|
49
|
+
mined, or confirmed.
|
|
50
|
+
3. **Write `.hedgehog/chain/00-brief.md`** — the mined subject statement,
|
|
51
|
+
one paragraph, plus the audience and single job named explicitly.
|
|
52
|
+
This is the root every downstream phase's traceability audit walks
|
|
53
|
+
back to; it draws from BMAD's archive but is its own file, in this
|
|
54
|
+
core's own `.hedgehog/chain/` layout, not a pointer into
|
|
55
|
+
`.hedgehog/BMAD/`.
|
|
56
|
+
4. **Confirm & Lock** — show the mined subject statement, audience, and
|
|
57
|
+
job back in plain terms, alongside which BMAD skills ran and where
|
|
58
|
+
their output lives (`.hedgehog/BMAD/`), before writing `TODO.md`.
|
|
59
|
+
State plainly what happens on confirmation: *"This locks in the
|
|
60
|
+
brief, commits it (`chore(planning): intake`), and hands off to
|
|
61
|
+
`bootstrap` to scaffold the Astro workspace. The Strategist phase
|
|
62
|
+
starts once that closes. Anything wrong or missing — say so now."*
|
|
63
|
+
Wait for explicit go-ahead — a revision here is just another mining
|
|
64
|
+
pass against the same BMAD archive, not a Correction Protocol entry,
|
|
65
|
+
since nothing downstream exists yet.
|
|
66
|
+
5. **Write `TODO.md`** mirroring the phase table below, then commit
|
|
67
|
+
planning intake's output as one commit, `chore(planning): intake` —
|
|
68
|
+
`TODO.md`, `.hedgehog/BMAD/`, `.hedgehog/chain/00-brief.md`, and root
|
|
69
|
+
`CLAUDE.md`'s filled placeholders.
|
|
70
|
+
6. **Hand off to `bootstrap`** once the commit lands.
|
|
71
|
+
|
|
72
|
+
`planner` owns this section; see that agent for when it runs.
|
|
73
|
+
|
|
74
|
+
## The Chain Method phases
|
|
75
|
+
|
|
76
|
+
Every phase's input is the prior phase's output, in this exact order — no
|
|
77
|
+
agent works from anything but what was actually handed to it. Steps 4a
|
|
78
|
+
(inside `landing-systems`) and 4c (inside `landing-strategist`) are the
|
|
79
|
+
only parallel-input point in the chain, both reading the same upstream
|
|
80
|
+
artifact; everything else is strictly sequential.
|
|
81
|
+
|
|
82
|
+
| # | Phase | Agent | Produces | Commit |
|
|
83
|
+
|---|---|---|---|---|
|
|
84
|
+
| 1 | Strategist | `landing-strategist` | Subject/audience/job statement (from planning intake — restated here as this phase's formal output) | `feat(landing): strategy` |
|
|
85
|
+
| 1b | Diagnostician | `landing-strategist` | Awareness level, Sophistication level, Sin/desire, Big Idea, Category/Positioning statement | bundled into `feat(landing): strategy` |
|
|
86
|
+
| 1c | Narrative Agent | `landing-strategist` | StoryBrand arc (Character → Problem → Guide → Plan → Action → Success/Failure), subject as Guide | bundled into `feat(landing): strategy` |
|
|
87
|
+
| 1d | Objection Agent | `landing-strategist` | Ranked objection map, each tagged with a Cialdini rebuttal principle | bundled into `feat(landing): strategy` |
|
|
88
|
+
| 2 | Brand Anthropologist | `landing-strategist` | 3–5 adjective pairs (each with a named opposite) | bundled into `feat(landing): strategy` |
|
|
89
|
+
| 3 | Psychologist | `landing-strategist` | Adjectives sorted visceral / behavioral / reflective | bundled into `feat(landing): strategy` |
|
|
90
|
+
| 4 | Perfumer | `landing-strategist` | Top/heart/base note timing per adjective, the page's peak moment, the ending treatment | bundled into `feat(landing): strategy` |
|
|
91
|
+
| 5 | Ingredient Director + Copywriter | `landing-systems` | Dial table (color/type/form/space/motion) + voice spec + gated headline (2 backups) + objection rebuttal prose, run against the same sorted-adjectives/diagnosis input | `feat(landing): systems` |
|
|
92
|
+
| 6 | Systems Designer | `landing-systems` | The token system (hex values, type roles, spacing unit, easing family, copy voice, with note timing attached) | bundled into `feat(landing): systems` |
|
|
93
|
+
| 7 | Motif Artist | `landing-systems` | Signature motif (source, persistence, continuity, scale range, literalness) | bundled into `feat(landing): systems` |
|
|
94
|
+
| 8 | Sequencer | `landing-sequencer` | Per-section transition type, weight, spacing, beat structure | `feat(landing): sequence` |
|
|
95
|
+
| 9 | Critic + Usability Auditor | `landing-critic` | Redlines, or a pass — reconciled traceability/distinctiveness + usability audit | `feat(landing): audit` (no commit if redlined — see Correction Protocol) |
|
|
96
|
+
| 10 | Builder | `landing-builder` | The built page, in Astro | `feat(landing): build` |
|
|
97
|
+
|
|
98
|
+
Phases 1 through 4 (including 1b/1c/1d) are one agent's context
|
|
99
|
+
(`landing-strategist`) because they're one continuous judgment call —
|
|
100
|
+
subject into diagnosis into feeling into timing — not separable artifacts
|
|
101
|
+
with different tool footprints. Same reasoning collapses 5–7 into
|
|
102
|
+
`landing-systems` (everything that becomes a Tailwind token or a line of
|
|
103
|
+
copy) and 8/9's reconciliation into a single `landing-critic` pass. See
|
|
104
|
+
each agent's own file for the internal sub-steps it runs through.
|
|
105
|
+
|
|
106
|
+
## The Loop (every unit of work)
|
|
107
|
+
|
|
108
|
+
1. **Pick the next phase** per the table above, from `TODO.md`. One phase
|
|
109
|
+
at a time, in order.
|
|
110
|
+
2. **Check the gate.** The prior phase is checkpointed and committed
|
|
111
|
+
first.
|
|
112
|
+
3. **Delegate exactly one phase** to its owning agent, passing it the
|
|
113
|
+
full chain so far (every upstream artifact, not just the immediately
|
|
114
|
+
prior one) — an agent that only sees its direct input can't verify its
|
|
115
|
+
own traceability back to the subject statement.
|
|
116
|
+
4. The agent **runs its self-test** (see that agent's own file for what
|
|
117
|
+
it checks) before presenting its artifact.
|
|
118
|
+
5. The agent **commits** using the exact Conventional Commit format
|
|
119
|
+
above.
|
|
120
|
+
6. **Check off the line in `TODO.md`** once the agent reports the commit
|
|
121
|
+
landed.
|
|
122
|
+
7. **Repeat**, one delegated phase at a time.
|
|
123
|
+
|
|
124
|
+
Each commit batches exactly one phase's artifact; a wrong phase is fixed
|
|
125
|
+
forward later via the Correction Protocol.
|
|
126
|
+
|
|
127
|
+
## Correction Protocol
|
|
128
|
+
|
|
129
|
+
When a downstream phase reveals an upstream phase was wrong — most often
|
|
130
|
+
`landing-critic` redlining something that doesn't trace back to the
|
|
131
|
+
subject statement, or matches a known AI-default cluster:
|
|
132
|
+
|
|
133
|
+
1. Stop.
|
|
134
|
+
2. Patch the upstream phase directly, in place, via that phase's owning
|
|
135
|
+
agent.
|
|
136
|
+
3. Fast-forward every dependent phase that breaks. A token system change
|
|
137
|
+
(phase 6) ripples through the motif (7), the sequence (8), and the
|
|
138
|
+
build (10) — each gets its own small commit, in order, not one bundled
|
|
139
|
+
fix.
|
|
140
|
+
4. Re-run `landing-critic` against the patched chain before resuming.
|
|
141
|
+
5. The commit messages are the explanation.
|
|
142
|
+
6. Resume the loop.
|
|
143
|
+
|
|
144
|
+
Use `conventional-commits` when a correction touches several phases in
|
|
145
|
+
one working-tree pass and needs splitting back into per-phase commits.
|
|
146
|
+
|
|
147
|
+
## Phase Transition Checks
|
|
148
|
+
|
|
149
|
+
Before `landing-builder` starts, confirm:
|
|
150
|
+
|
|
151
|
+
- `landing-critic` returned a pass, not a redline — a redlined spec never
|
|
152
|
+
reaches the Builder; it goes back to the phase the redline names.
|
|
153
|
+
- Every phase 1–9 has its commit landed.
|
|
154
|
+
|
|
155
|
+
Before `landing-strategist` starts, confirm planning intake's Confirm &
|
|
156
|
+
Lock has held and its commit has landed. If not, stop and ask.
|
|
157
|
+
|
|
158
|
+
## Rules
|
|
159
|
+
|
|
160
|
+
- **No agent introduces a choice that doesn't originate in the previous
|
|
161
|
+
agent's output.** This is the chain's core discipline — enforced by
|
|
162
|
+
`landing-critic`'s traceability audit, not by tooling, so treat a
|
|
163
|
+
critic redline with the same weight a failed typecheck gets elsewhere
|
|
164
|
+
in Hedgehog.
|
|
165
|
+
- **Ingredients move in agreement.** Color, type, space, motion, copy
|
|
166
|
+
rhythm, and pacing are reconciled into one system at phase 6 — a
|
|
167
|
+
mismatch (warm color, cold type) is a defect `landing-systems` owns
|
|
168
|
+
fixing, not a later polish pass.
|
|
169
|
+
- **Sequential except phases 5's two parallel inputs.** The Ingredient
|
|
170
|
+
Director and Copywriter sub-steps inside `landing-systems` read the
|
|
171
|
+
same sorted-adjectives input and can run together; every other phase
|
|
172
|
+
waits on the one before it.
|
|
173
|
+
- **A wrong phase gets fixed at its source** — the Correction Protocol,
|
|
174
|
+
not a downstream workaround (e.g. don't patch the Builder's output to
|
|
175
|
+
fix a token that's wrong at the Systems Designer level).
|
|
176
|
+
- **The Critic's veto is real.** `landing-critic` can send any phase back
|
|
177
|
+
to its owning agent, citing which audit failed; it cannot rewrite the
|
|
178
|
+
artifact itself.
|
|
179
|
+
- **Figma/Stitch MCP output is input only.** Anything handed off from
|
|
180
|
+
those tools is re-derived through the token system (phase 6) before it
|
|
181
|
+
touches Tailwind config — never copied through as final values.
|
|
182
|
+
|
|
183
|
+
## Stop Condition
|
|
184
|
+
|
|
185
|
+
A build session ends when every phase in `TODO.md` is checked off and
|
|
186
|
+
`landing-builder`'s artifact is committed, or when the subject statement
|
|
187
|
+
or an adjective is ambiguous enough that continuing means guessing — ask
|
|
188
|
+
one question and wait.
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hedgehog-planning-intake
|
|
3
|
-
description: Use once per project, at the start,
|
|
3
|
+
description: Use once per project, at the start, on either core — Phase 0 (running the vendored BMAD-METHOD planning shelf) is shared by full-stack-app and landing-page alike; Phase 1 (mining BMAD's output into scope boundary/domain modules/the Add-ons decision) is full-stack-app's own procedure, run again on a scoped pass when new domain scope enters play. Invoked by the `planner` agent after Phase 0 core selection; don't run standalone. landing-page runs this skill's Phase 0, then mines the same archive through `hedgehog-landing-loop`'s own planning-intake section, that core's counterpart to this skill's Phase 1.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Hedgehog Planning Intake
|
|
7
7
|
|
|
8
|
-
Turns a person's description of a problem into
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
Turns a person's description of a problem into planning material, by
|
|
9
|
+
running the vendored BMAD-METHOD planning shelf (Phase 0, shared by both
|
|
10
|
+
cores) and mining its output. On full-stack-app that mining is this
|
|
11
|
+
skill's own Phase 1, into scope boundary/domain modules/Add-ons; on
|
|
12
|
+
landing-page it's `hedgehog-landing-loop`'s planning-intake section, into
|
|
13
|
+
a subject/audience/job statement. This is the mechanics `planner` calls
|
|
14
|
+
once its Phase 0 core-selection check has picked a core — the
|
|
15
|
+
interpretive judgment (scope boundary, module split, Add-ons decision on
|
|
16
|
+
full-stack-app; subject statement on landing-page; Confirm & Lock either
|
|
17
|
+
way) belongs to `planner`; this skill (Phase 0, and Phase 1 on
|
|
18
|
+
full-stack-app) and `hedgehog-landing-loop` (landing-page's own mining)
|
|
19
|
+
are the fixed procedures that judgment runs inside.
|
|
20
|
+
|
|
21
|
+
## Phase 0 — BMAD elicitation (both cores)
|
|
17
22
|
|
|
18
23
|
State the BMAD attribution, then run the vendored shelf in full
|
|
19
24
|
sequence, every time — no per-project skip logic, no reduced default
|
|
@@ -55,13 +60,21 @@ Every file/folder carries a one-line attribution header. `00-manifest.md`
|
|
|
55
60
|
states the source repo, pinned version (`skills/BMAD/ATTRIBUTION.md` has
|
|
56
61
|
the pinned commit), date, and which skills ran.
|
|
57
62
|
|
|
58
|
-
`.hedgehog/BMAD/` is archival and immutable once written
|
|
59
|
-
`hedgehog-loop`'s day-to-day operation, `hedgehog-bootstrap`,
|
|
60
|
-
`reviewer` reads this folder live — `planner` reads it exactly once,
|
|
61
|
-
right after the shelf completes, to mine it
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
`.hedgehog/BMAD/` is archival and immutable once written, on both cores.
|
|
64
|
+
Nothing in `hedgehog-loop`'s day-to-day operation, `hedgehog-bootstrap`,
|
|
65
|
+
or `reviewer` reads this folder live — `planner` reads it exactly once,
|
|
66
|
+
right after the shelf completes, to mine it (this skill's Phase 1 below
|
|
67
|
+
on full-stack-app; `hedgehog-landing-loop`'s planning-intake section on
|
|
68
|
+
landing-page). After that it's historical record only, the same
|
|
69
|
+
relationship the commit log has to a merged PR.
|
|
70
|
+
|
|
71
|
+
## Phase 1 — Mining (full-stack-app only)
|
|
72
|
+
|
|
73
|
+
landing-page's counterpart to this Phase 1 is
|
|
74
|
+
`hedgehog-landing-loop`'s own planning-intake section, run once Phase 0
|
|
75
|
+
above completes: it mines the same `.hedgehog/BMAD/` archive into a
|
|
76
|
+
subject/audience/job statement, in place of the scope boundary/domain
|
|
77
|
+
modules/Add-ons decision this Phase 1 produces.
|
|
65
78
|
|
|
66
79
|
Read `.hedgehog/BMAD/` once and do the interpretive work BMAD's docs
|
|
67
80
|
don't do for you — none of BMAD's outputs contain a ready-made
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
## This project's core: full-stack-app
|
|
2
|
+
|
|
3
|
+
Backend-first, schema → contract → repository → service → controller, then
|
|
4
|
+
hook → UX rationale → screen, per domain module. See `.hedgehog/BMAD/` for
|
|
5
|
+
the archival planning intake output — BMAD-METHOD's brainstorming, brief,
|
|
6
|
+
PRD, and UX spec, written once by `planner` and never edited after.
|
|
7
|
+
`TODO.md` also carries this core's `## Add-ons` block (Auth/Queue/Mobile,
|
|
8
|
+
each on or off) — check it before assuming any add-on's infra exists.
|
|
9
|
+
|
|
10
|
+
### The skills — invoke these, don't improvise
|
|
11
|
+
|
|
12
|
+
The discipline is packaged as skills. Use them; don't reconstruct their
|
|
13
|
+
steps from memory:
|
|
14
|
+
|
|
15
|
+
- **`hedgehog-loop`** — every unit of work once bootstrapped: pick the
|
|
16
|
+
next step from `TODO.md`, build exactly one, gate it, commit it, check
|
|
17
|
+
it off. Also holds the Correction Protocol for fixing a wrong upstream
|
|
18
|
+
step. Invoke it at the start of any build session and for "what's next".
|
|
19
|
+
- **`hedgehog-bootstrap`** — run **once**, at project start, to scaffold
|
|
20
|
+
the core stack, the enforcement config, and whichever add-ons (Auth,
|
|
21
|
+
Queue, Mobile) planning intake turned on. Skip if `nx.json` already
|
|
22
|
+
exists.
|
|
23
|
+
- **`conventional-commits`** — when a change spans several steps in one
|
|
24
|
+
working-tree pass and needs splitting back into per-step commits (mainly
|
|
25
|
+
Correction Protocol cleanups).
|
|
26
|
+
|
|
27
|
+
### The agents — delegate the judgment calls
|
|
28
|
+
|
|
29
|
+
- **`planner`** — planning intake (which core applies, then
|
|
30
|
+
`hedgehog-planning-intake`'s BMAD-METHOD brainstorming/brief/PRD/UX-spec
|
|
31
|
+
shelf, mined into scope boundary, the Add-ons decision, and domain
|
|
32
|
+
vocabulary) at project start, and module scoping when new scope enters
|
|
33
|
+
play. Writes `TODO.md` (including its `## Add-ons` block),
|
|
34
|
+
`.hedgehog/BMAD/`, and `docs/design/<module>-notes.md`. On first run,
|
|
35
|
+
hands off to the `bootstrap` agent once Confirm & Lock holds.
|
|
36
|
+
- **`bootstrap`** — runs `hedgehog-bootstrap`'s core steps (always) plus
|
|
37
|
+
whichever add-on steps planning intake turned on. Triggered
|
|
38
|
+
automatically by `planner` after its first run; skip if `nx.json`
|
|
39
|
+
already exists.
|
|
40
|
+
- **`backend-eng`** — builds each module's Phase A steps (schema →
|
|
41
|
+
contract → repository → service → controller → queue?), one step at a
|
|
42
|
+
time, gated and committed in its own context.
|
|
43
|
+
- **`ux-planner`** — once per module in Phase B, after the hook exists and
|
|
44
|
+
before the screen: writes `docs/design/<module>.md`.
|
|
45
|
+
- **`front-end-eng`** — builds each module's Phase B steps (hook, screen)
|
|
46
|
+
from the ux-planner rationale, one step at a time, in its own context.
|
|
47
|
+
- **`reviewer`** — phase-transition and Correction Protocol checks the
|
|
48
|
+
mechanical gate can't make (port discipline, FK-by-ID discipline,
|
|
49
|
+
contract shape).
|
|
50
|
+
|
|
51
|
+
## The constants (do not deviate)
|
|
52
|
+
|
|
53
|
+
### Stack: core (locked, every project) + add-ons (this project's picks below)
|
|
54
|
+
|
|
55
|
+
**Core** — applies regardless of project size or which add-ons are on:
|
|
56
|
+
Nx monorepo · pnpm · **NestJS** (all domain logic + DB access) · **Drizzle**
|
|
57
|
+
(+ `drizzle-zod`) · **PostgreSQL** · **Docker Compose** (local Postgres,
|
|
58
|
+
every host OS) · Railway · **ts-rest** contracts · **Zod** validation ·
|
|
59
|
+
**TanStack Query** hooks · **Next.js** + ShadCN + Tailwind (web, UI only) ·
|
|
60
|
+
Pino logging · Vitest + Playwright (tests) · Conventional Commits +
|
|
61
|
+
commitlint + lefthook · Sentry.
|
|
62
|
+
|
|
63
|
+
**Add-ons** — each on or off per project, decided at planning intake and
|
|
64
|
+
recorded in `TODO.md`'s `## Add-ons` block; check that block for this
|
|
65
|
+
project's actual picks rather than assuming any of these are present:
|
|
66
|
+
|
|
67
|
+
| Add-on | Adds |
|
|
68
|
+
| --- | --- |
|
|
69
|
+
| Auth | Better Auth, `packages/auth`, a global auth guard on `apps/api` |
|
|
70
|
+
| Queue | BullMQ + Redis, `apps/worker`, a `Queue` port/adapter seam |
|
|
71
|
+
| Mobile | Expo + React Native Reusables + NativeWind, `apps/mobile` |
|
|
72
|
+
|
|
73
|
+
An add-on that's off means the corresponding piece of infra genuinely
|
|
74
|
+
isn't in this codebase — don't write code assuming `packages/auth`,
|
|
75
|
+
`apps/worker`, or `apps/mobile` exist without checking `TODO.md`'s
|
|
76
|
+
`## Add-ons` block first.
|
|
77
|
+
|
|
78
|
+
Don't substitute libraries, in core or in whichever add-ons are on. If a
|
|
79
|
+
package or generator name changed upstream, verify against current docs
|
|
80
|
+
before running — don't swap in a different library.
|
|
81
|
+
|
|
82
|
+
### Layout
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
docker-compose.yml local Postgres (+ Redis if Queue add-on is on) — every host OS, no native install
|
|
86
|
+
apps/
|
|
87
|
+
web Next.js — UI only
|
|
88
|
+
mobile Expo — only if Mobile add-on is on
|
|
89
|
+
api NestJS — owns all domain logic + DB access
|
|
90
|
+
worker BullMQ consumers — only if Queue add-on is on
|
|
91
|
+
packages/
|
|
92
|
+
db Drizzle schema + client
|
|
93
|
+
contracts ts-rest + Zod contracts
|
|
94
|
+
hooks TanStack Query — shared web + mobile
|
|
95
|
+
jobs typed job registry / queue definitions — only if Queue add-on is on
|
|
96
|
+
auth Better Auth config — only if Auth add-on is on
|
|
97
|
+
config locked ESLint/Prettier/tsconfig/env schema
|
|
98
|
+
shared cross-cutting types + utils
|
|
99
|
+
libs/
|
|
100
|
+
<module>/port · <module>/repository · <module>/service (one triplet per table)
|
|
101
|
+
.hedgehog/
|
|
102
|
+
BMAD/ archival planning intake output (brief, PRD, UX spec, research) — write-once, from planner
|
|
103
|
+
docs/
|
|
104
|
+
design <module>-notes.md (planner, sourced from BMAD's UX spec) and <module>.md (ux-planner)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Check `TODO.md`'s `## Add-ons` block before assuming any "only if" line
|
|
108
|
+
above is actually present in this codebase.
|
|
109
|
+
|
|
110
|
+
### Core rules
|
|
111
|
+
|
|
112
|
+
- **One table = one domain module.** Each carries the full step sequence.
|
|
113
|
+
- **Cross-module references are FK-by-ID only.** A service imports only
|
|
114
|
+
its own ports — never another module's adapter. (Enforced by Nx module
|
|
115
|
+
boundaries; building out of order fails `nx lint`.)
|
|
116
|
+
- **Backend before frontend.** Phase A (schema → contract → repository →
|
|
117
|
+
service → controller → queue?) closes for a module before Phase B
|
|
118
|
+
(hooks → screen) opens. Enforced by the CI phase gate.
|
|
119
|
+
- **Sequential within a phase.** A step starts only once the previous one
|
|
120
|
+
compiles and passes tests.
|
|
121
|
+
- **One step = one commit**, in the exact Conventional Commit format from
|
|
122
|
+
`hedgehog-loop`. A commit that fails typecheck/lint/test does not happen
|
|
123
|
+
(lefthook gate).
|
|
124
|
+
- **Fix wrong steps at the source** via the Correction Protocol — never a
|
|
125
|
+
downstream workaround.
|
|
126
|
+
- **Local Postgres always runs through `docker-compose.yml`**, on every
|
|
127
|
+
host OS, regardless of add-ons; Redis joins it only if the Queue add-on
|
|
128
|
+
is on. Never a natively-installed Postgres or Redis, even to match a
|
|
129
|
+
contributor's existing local setup.
|
|
130
|
+
- **`packages/config` is the single source** for shared config. A per-app
|
|
131
|
+
override request means fix the base config, not add an override.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
## This project's core: landing-page
|
|
2
|
+
|
|
3
|
+
The Chain Method: brief → feeling → tokens/motif → sequence → artifact,
|
|
4
|
+
where every visual choice traces back to a sentence that caused it. No
|
|
5
|
+
domain data, no backend — a single (or few-page) marketing site, built
|
|
6
|
+
once through a fixed pipeline rather than iterated on freely. See
|
|
7
|
+
`.hedgehog/BMAD/` for the vendored BMAD-METHOD shelf's raw output and
|
|
8
|
+
`.hedgehog/chain/` for this core's own archival planning intake output —
|
|
9
|
+
the Strategist's subject statement, the adjective/note tables, and the
|
|
10
|
+
token system, written once by `planner` and the pipeline agents, never
|
|
11
|
+
edited after a phase closes.
|
|
12
|
+
|
|
13
|
+
### The skills — invoke these, don't improvise
|
|
14
|
+
|
|
15
|
+
- **`hedgehog-landing-loop`** — every unit of work once bootstrapped:
|
|
16
|
+
pick the next step from `TODO.md`, run exactly one Chain Method phase
|
|
17
|
+
through its owning agent, gate it, commit it, check it off. Also holds
|
|
18
|
+
the Correction Protocol for fixing a wrong upstream phase (e.g. a
|
|
19
|
+
motif that doesn't trace back to the subject statement). Invoke it at
|
|
20
|
+
the start of any build session and for "what's next".
|
|
21
|
+
- **`hedgehog-bootstrap-landing-page-core`** — run **once**, at project
|
|
22
|
+
start, to land the pre-verified Astro + Tailwind workspace. Skip if
|
|
23
|
+
`astro.config.mjs` already exists.
|
|
24
|
+
- **`conventional-commits`** — when a change spans several phases in one
|
|
25
|
+
working-tree pass and needs splitting back into per-phase commits
|
|
26
|
+
(mainly Correction Protocol cleanups).
|
|
27
|
+
|
|
28
|
+
### The agents — delegate the judgment calls
|
|
29
|
+
|
|
30
|
+
- **`planner`** — planning intake (which core applies, then this core's
|
|
31
|
+
own brief intake: the vendored BMAD-METHOD shelf, run in full and
|
|
32
|
+
mined into subject, audience, single page job) at project start.
|
|
33
|
+
Writes `TODO.md`, `.hedgehog/BMAD/`, and `.hedgehog/chain/00-brief.md`.
|
|
34
|
+
On first run, hands off to the `bootstrap` agent once Confirm & Lock
|
|
35
|
+
holds.
|
|
36
|
+
- **`bootstrap`** — runs `hedgehog-bootstrap-landing-page-core`'s steps.
|
|
37
|
+
Triggered automatically by `planner` after its first run; skip if
|
|
38
|
+
`astro.config.mjs` already exists.
|
|
39
|
+
- **`landing-strategist`** — Chain Method steps 1–3 and 4c, plus the
|
|
40
|
+
Diagnostician/Narrative Agent/Objection Agent sub-steps folded into
|
|
41
|
+
step 1: subject statement → Awareness/Sophistication/Big-Idea
|
|
42
|
+
diagnosis → narrative arc → objection map → adjective pairs
|
|
43
|
+
(visceral/behavioral/reflective) → top/heart/base note timing and the
|
|
44
|
+
page's single peak moment. One context, one artifact: the emotional
|
|
45
|
+
and persuasive target spec.
|
|
46
|
+
- **`landing-systems`** — steps 4a/4b/5/6, run together: the ingredient
|
|
47
|
+
dial table, the copy voice spec (plus the Awareness-gated headline and
|
|
48
|
+
objection rebuttal prose), the token system that reconciles them, and
|
|
49
|
+
the signature motif. Owns everything that becomes a Tailwind token or a
|
|
50
|
+
piece of copy.
|
|
51
|
+
- **`landing-sequencer`** — step 7: per-section transition type, weight,
|
|
52
|
+
spacing, and beat structure — the GSAP/ScrollTrigger/Lenis pacing spec
|
|
53
|
+
the Builder implements against.
|
|
54
|
+
- **`landing-critic`** — steps 8–9 reconciled: traceability/distinctiveness
|
|
55
|
+
audit (does every choice trace to the subject statement, does anything
|
|
56
|
+
match a known AI-default cluster) and the usability pass (Fitts's Law
|
|
57
|
+
on the CTA, affordance/signifier check). Has veto power; cannot rewrite,
|
|
58
|
+
only redline back to the owning agent.
|
|
59
|
+
- **`landing-builder`** — step 10: builds the audited spec exactly in
|
|
60
|
+
Astro. Anything that can't be built as specified is flagged back up the
|
|
61
|
+
chain, never silently improvised around.
|
|
62
|
+
|
|
63
|
+
## The constants (do not deviate)
|
|
64
|
+
|
|
65
|
+
### Stack (locked, every project — no add-ons on this core)
|
|
66
|
+
|
|
67
|
+
**Astro** (zero-JS-by-default shell, islands only where interaction is
|
|
68
|
+
genuinely needed) · **Tailwind** (config as token layer only — no
|
|
69
|
+
component library on top) · **GSAP + ScrollTrigger** (primary animation
|
|
70
|
+
engine; owns Sequencer pacing and top/heart/base fade timing) ·
|
|
71
|
+
**Lenis** (smooth-scroll feel) · **SVG-first** (hand-authored graphics
|
|
72
|
+
for the motif — no icon library or generator look) · **SplitType**
|
|
73
|
+
(line/word/char copy-reveal splitting) · **Paper.js** (canvas vector
|
|
74
|
+
work for a motif that evolves across sections) · **MorphSVGPlugin**
|
|
75
|
+
(GSAP — for a motif that physically transforms across sections) ·
|
|
76
|
+
**custom SVG noise/grain filter** (cheap materiality/texture layer) ·
|
|
77
|
+
**React Three Fiber** (rare — only when the subject is genuinely
|
|
78
|
+
spatial; default is to skip it).
|
|
79
|
+
|
|
80
|
+
Figma MCP / Stitch MCP are handoff/input tools only, used at the
|
|
81
|
+
Strategist/Builder boundaries — never allowed to set spacing or style
|
|
82
|
+
defaults directly. Anything they hand off is re-derived through the
|
|
83
|
+
Systems Designer's token system (step 5) before it touches Tailwind
|
|
84
|
+
config.
|
|
85
|
+
|
|
86
|
+
Don't substitute libraries. If a package name changed upstream, verify
|
|
87
|
+
against current docs before running — don't swap in a different one, and
|
|
88
|
+
don't reach for a component library or icon set to fill a gap one of the
|
|
89
|
+
above doesn't cover; that gap is a signal to go back to the Ingredient
|
|
90
|
+
Vocabulary and derive the right choice, not to default to something
|
|
91
|
+
off-the-shelf.
|
|
92
|
+
|
|
93
|
+
### Layout
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
astro.config.mjs Astro workspace root
|
|
97
|
+
tailwind.config.ts token layer only — hex values, type roles, spacing unit, easing family from Step 5
|
|
98
|
+
src/
|
|
99
|
+
pages/ one file per page (usually just index.astro)
|
|
100
|
+
sections/ one component per page section, in Sequencer order
|
|
101
|
+
motifs/ the signature SVG/Paper.js motif + its variation rules
|
|
102
|
+
styles/ global.css — Tailwind import + CSS variable theme
|
|
103
|
+
.hedgehog/
|
|
104
|
+
BMAD/ vendored BMAD-METHOD shelf's raw output (brief, PR-FAQ, PRD, UX spec, research) —
|
|
105
|
+
write-once, from planner
|
|
106
|
+
chain/ this core's own archival planning intake output — subject statement, adjective tables,
|
|
107
|
+
token system, motif spec, sequence spec — write-once, from planner + pipeline agents
|
|
108
|
+
docs/
|
|
109
|
+
design/ audited spec (Critic + Usability Auditor reconciled) the Builder builds from
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Core rules
|
|
113
|
+
|
|
114
|
+
- **One page, one job.** The Strategist's subject statement names it;
|
|
115
|
+
every downstream choice traces back to that sentence or gets cut.
|
|
116
|
+
- **No agent introduces a choice that doesn't originate in the previous
|
|
117
|
+
agent's output.** A motif the Motif Artist didn't source from the
|
|
118
|
+
subject, a color the Ingredient Director didn't derive from an
|
|
119
|
+
adjective — both get redlined by the Critic, not waved through.
|
|
120
|
+
- **Ingredients move in agreement.** Color, type, space, motion, copy
|
|
121
|
+
rhythm, and pacing are one system reconciled at step 5 — a page warm
|
|
122
|
+
in color but cold in type is a defect, not a style choice.
|
|
123
|
+
- **Sequential through the pipeline.** A phase starts only once the
|
|
124
|
+
phase before it is checkpointed and committed — steps 4a/4b/4c run in
|
|
125
|
+
parallel (same input), everything else is strictly sequential.
|
|
126
|
+
- **One phase = one commit**, in the exact Conventional Commit format
|
|
127
|
+
from `hedgehog-landing-loop`.
|
|
128
|
+
- **Fix wrong phases at the source** via the Correction Protocol — never
|
|
129
|
+
a downstream workaround (e.g. don't patch the Builder's output to fix
|
|
130
|
+
a token that's wrong at the Systems Designer's level).
|
|
131
|
+
- **The Critic's veto is real.** A traceability or default-cluster
|
|
132
|
+
failure blocks the Builder from starting, the same way a failing gate
|
|
133
|
+
blocks a commit elsewhere in Hedgehog.
|