@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.
Files changed (115) hide show
  1. package/README.md +92 -20
  2. package/bin/cli.mjs +107 -45
  3. package/package.json +2 -2
  4. package/src/agents/bootstrap.md +83 -50
  5. package/src/agents/front-end-eng.md +1 -1
  6. package/src/agents/landing-builder.md +96 -0
  7. package/src/agents/landing-critic.md +107 -0
  8. package/src/agents/landing-sequencer.md +112 -0
  9. package/src/agents/landing-strategist.md +217 -0
  10. package/src/agents/landing-systems.md +206 -0
  11. package/src/agents/planner.md +207 -143
  12. package/src/golden-cores/landing-page/.prettierignore +4 -0
  13. package/src/golden-cores/landing-page/.prettierrc.js +11 -0
  14. package/src/golden-cores/landing-page/.vscode/extensions.json +4 -0
  15. package/src/golden-cores/landing-page/.vscode/launch.json +11 -0
  16. package/src/golden-cores/landing-page/astro.config.mjs +11 -0
  17. package/src/golden-cores/landing-page/eslint.config.mjs +23 -0
  18. package/src/golden-cores/landing-page/gitignore.template +9 -0
  19. package/src/golden-cores/landing-page/package.json +40 -0
  20. package/src/golden-cores/landing-page/pnpm-lock.yaml +4587 -0
  21. package/src/golden-cores/landing-page/public/favicon.ico +0 -0
  22. package/src/golden-cores/landing-page/public/favicon.svg +9 -0
  23. package/src/golden-cores/landing-page/src/motifs/.gitkeep +0 -0
  24. package/src/golden-cores/landing-page/src/pages/index.astro +24 -0
  25. package/src/golden-cores/landing-page/src/sections/.gitkeep +0 -0
  26. package/src/golden-cores/landing-page/src/styles/global.css +18 -0
  27. package/src/golden-cores/landing-page/tsconfig.json +5 -0
  28. package/src/skills/hedgehog-bootstrap/SKILL.md +19 -19
  29. package/src/skills/{hedgehog-bootstrap-core → hedgehog-bootstrap-full-stack-app-core}/SKILL.md +19 -18
  30. package/src/skills/hedgehog-bootstrap-landing-page-core/SKILL.md +160 -0
  31. package/src/skills/hedgehog-landing-loop/SKILL.md +188 -0
  32. package/src/skills/hedgehog-planning-intake/SKILL.md +30 -17
  33. package/src/templates/CLAUDE.core.full-stack-app.md +131 -0
  34. package/src/templates/CLAUDE.core.landing-page.md +133 -0
  35. package/src/templates/CLAUDE.md +54 -183
  36. package/src/templates/TODO.core.full-stack-app.md +46 -0
  37. package/src/templates/TODO.core.landing-page.md +24 -0
  38. package/src/templates/TODO.md +6 -50
  39. /package/src/{golden-core → golden-cores/full-stack-app}/.env.example +0 -0
  40. /package/src/{golden-core → golden-cores/full-stack-app}/.github/workflows/phase-gate.yml +0 -0
  41. /package/src/{golden-core → golden-cores/full-stack-app}/.prettierignore +0 -0
  42. /package/src/{golden-core → golden-cores/full-stack-app}/.prettierrc +0 -0
  43. /package/src/{golden-core → golden-cores/full-stack-app}/.vscode/extensions.json +0 -0
  44. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/eslint.config.mjs +0 -0
  45. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/package.json +0 -0
  46. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/app/app.module.ts +0 -0
  47. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/app/health.controller.ts +0 -0
  48. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/assets/.gitkeep +0 -0
  49. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/main.ts +0 -0
  50. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/tsconfig.app.json +0 -0
  51. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/tsconfig.json +0 -0
  52. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api/webpack.config.cjs +0 -0
  53. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/eslint.config.mjs +0 -0
  54. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/package.json +0 -0
  55. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/api/api.spec.ts +0 -0
  56. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/global-setup.ts +0 -0
  57. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/test-setup.ts +0 -0
  58. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/tsconfig.json +0 -0
  59. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/tsconfig.spec.json +0 -0
  60. /package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/vitest.config.mts +0 -0
  61. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/.prettierrc.js +0 -0
  62. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/.swcrc +0 -0
  63. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/components.json +0 -0
  64. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/eslint.config.mjs +0 -0
  65. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/index.d.ts +0 -0
  66. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/next-env.d.ts +0 -0
  67. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/next.config.js +0 -0
  68. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/package.json +0 -0
  69. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/postcss.config.mjs +0 -0
  70. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/public/.gitkeep +0 -0
  71. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/public/favicon.ico +0 -0
  72. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/global.css +0 -0
  73. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/layout.tsx +0 -0
  74. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/page.tsx +0 -0
  75. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/app/providers.tsx +0 -0
  76. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/theme-toggle.tsx +0 -0
  77. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/ui/button.tsx +0 -0
  78. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/lib/utils.ts +0 -0
  79. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web/tsconfig.json +0 -0
  80. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/eslint.config.mjs +0 -0
  81. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/package.json +0 -0
  82. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/playwright.config.mts +0 -0
  83. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/src/example.spec.ts +0 -0
  84. /package/src/{golden-core → golden-cores/full-stack-app}/apps/web-e2e/tsconfig.json +0 -0
  85. /package/src/{golden-core → golden-cores/full-stack-app}/commitlint.config.cjs +0 -0
  86. /package/src/{golden-core → golden-cores/full-stack-app}/docker-compose.yml +0 -0
  87. /package/src/{golden-core → golden-cores/full-stack-app}/eslint.config.mjs +0 -0
  88. /package/src/{golden-core → golden-cores/full-stack-app}/gitignore.template +0 -0
  89. /package/src/{golden-core → golden-cores/full-stack-app}/lefthook.yml +0 -0
  90. /package/src/{golden-core → golden-cores/full-stack-app}/nx.json +0 -0
  91. /package/src/{golden-core → golden-cores/full-stack-app}/package.json +0 -0
  92. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/eslint-base.js +0 -0
  93. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/package.json +0 -0
  94. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/prettier.js +0 -0
  95. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/env.schema.spec.ts +0 -0
  96. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/env.schema.ts +0 -0
  97. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/index.ts +0 -0
  98. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.json +0 -0
  99. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.lib.json +0 -0
  100. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/tsconfig.spec.json +0 -0
  101. /package/src/{golden-core → golden-cores/full-stack-app}/packages/config/vitest.config.mts +0 -0
  102. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/package.json +0 -0
  103. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/index.ts +0 -0
  104. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/lib/db.spec.ts +0 -0
  105. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/src/lib/db.ts +0 -0
  106. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.json +0 -0
  107. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.lib.json +0 -0
  108. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/tsconfig.spec.json +0 -0
  109. /package/src/{golden-core → golden-cores/full-stack-app}/packages/db/vitest.config.mts +0 -0
  110. /package/src/{golden-core → golden-cores/full-stack-app}/pnpm-lock.yaml +0 -0
  111. /package/src/{golden-core → golden-cores/full-stack-app}/pnpm-workspace.yaml +0 -0
  112. /package/src/{golden-core → golden-cores/full-stack-app}/tools/phase-gate.cjs +0 -0
  113. /package/src/{golden-core → golden-cores/full-stack-app}/tsconfig.base.json +0 -0
  114. /package/src/{golden-core → golden-cores/full-stack-app}/tsconfig.json +0 -0
  115. /package/src/{golden-core → golden-cores/full-stack-app}/vitest.workspace.ts +0 -0
@@ -2,8 +2,10 @@
2
2
  Hedgehog project CLAUDE.md template.
3
3
 
4
4
  This file is copied into a consuming project's repo root at install
5
- time. Placeholders wrapped in {{ }} are filled in once, at planning
6
- intake, by the `planner` agent (or by hand). Everything outside the
5
+ time, with the core-section marker below filled in from this
6
+ project's chosen core's own CLAUDE.core.<name>.md (src/templates/).
7
+ Placeholders wrapped in {{ }} are filled in once, at planning intake,
8
+ by the `planner` agent (or by hand). Everything outside the
7
9
  placeholders is a constant of the Hedgehog discipline and should be
8
10
  left as-is.
9
11
 
@@ -14,25 +16,24 @@
14
16
 
15
17
  {{PROJECT_SUMMARY — 2–4 sentences the `planner` writes at planning
16
18
  intake: what this project is, who it's for, and what it does. State
17
- current intent, not history. Keep it tight — the full product narrative,
18
- scope boundary, and domain vocabulary live in `.hedgehog/BMAD/` (the
19
- planning documents) and `TODO.md`, not here.}}
19
+ current intent, not history. Keep it tight — the full product narrative
20
+ lives in this core's own planning-intake output and `TODO.md`, not
21
+ here.}}
20
22
 
21
- This project is built with **Hedgehog**: a backend-first, one-step-at-a-time
22
- build discipline. The rules below aren't project preferences — they're how
23
- the build stays mechanically correct. Follow them exactly.
23
+ This project is built with **Hedgehog**: a one-step-at-a-time build
24
+ discipline. The rules below aren't project preferences — they're how the
25
+ build stays mechanically correct. Follow them exactly.
24
26
 
25
27
  ## First message in a fresh install
26
28
 
27
29
  If `{{PROJECT_SUMMARY}}` above is still an unfilled placeholder, this is a
28
30
  brand-new install and nothing has been built yet. Open with something
29
31
  short and warm — 🦔 plus one line asking what the user wants to build —
30
- then hand straight to `planner`, which runs planning intake on
31
- BMAD-METHOD (brainstorming brief PRD UX spec), then mines that
32
- output into Hedgehog's own scope boundary and `## Add-ons` decision.
33
- Don't re-explain the discipline or summarize this file; the greeting is
34
- one line, not a tour. Skip this entirely once the placeholder is filled
35
- in — every later session starts with `TODO.md`, not a greeting.
32
+ then hand straight to `planner`, which decides which Hedgehog core
33
+ applies and runs that core's planning intake. Don't re-explain the
34
+ discipline or summarize this file; the greeting is one line, not a tour.
35
+ Skip this entirely once the placeholder is filled in every later
36
+ session starts with `TODO.md`, not a greeting.
36
37
 
37
38
  ## How to work here
38
39
 
@@ -40,197 +41,67 @@ The build is a loop of small, gated, committed steps. You never hold the
40
41
  whole plan in context — the plan lives in the structure:
41
42
 
42
43
  - **`TODO.md`** is the live checklist and the source of truth for what's
43
- next, including the `## Add-ons` block (Auth/Queue/Mobile, each on or
44
- off). Read it at the start of every session. Its only state is
45
- checked/unchecked.
46
- - **`.hedgehog/BMAD/`** is the archival record of planning intake —
47
- BMAD-METHOD's brainstorming, brief, PRD, and UX spec output, written
48
- once by `planner` and never edited after. It's historical record, the
49
- same relationship the commit log has to a merged PR — nothing in the
50
- day-to-day build reads it live.
44
+ next. Read it at the start of every session. Its only state is
45
+ checked/unchecked (or skipped-and-confirmed, wherever this core's own
46
+ optional steps allow it).
51
47
  - **The commit log** is the record of what's built and why. Conventional
52
- commits (`feat(<module>): schema`, `feat(<module>): api`, …) are how
53
- progress is read, not a conversation summary.
54
- - **The architecture is fixed and opinionated** the same on every
55
- Hedgehog project. Where a service lives, what it may import, the module
56
- shape, the phase order: all of it is inferable from this file and the
57
- skills *without reading a line of code*. You don't discover the
58
- patterns; you already know them.
59
- - **The codebase carries the project-specific instances** which modules
60
- exist, what a given schema's columns are, what's already wired. That,
61
- you re-read from the code when you need it, rather than remembering it.
48
+ commits are how progress is read, not a conversation summary.
49
+ - **The architecture is fixed and opinionated for this project's core**
50
+ the same on every Hedgehog project running that core. Where a piece
51
+ lives, what it may depend on, the build order: all of it is inferable
52
+ from this file and the skills *without reading a line of code*. You
53
+ don't discover the patterns; you already know them.
54
+ - **The codebase carries the project-specific instances** — what's
55
+ actually been built, what a given piece's shape is, what's already
56
+ wired. That, you re-read from the code when you need it, rather than
57
+ remembering it.
62
58
 
63
59
  Because state lives in those places and not in the conversation, a fresh
64
60
  context loses nothing: the architecture is known a priori, and the
65
61
  project's specifics are re-read on demand. Use that (see **Managing
66
62
  context** below).
67
63
 
68
- ### The skills — invoke these, don't improvise
69
-
70
- The discipline is packaged as skills. Use them; don't reconstruct their
71
- steps from memory:
72
-
73
- - **`hedgehog-loop`** — every unit of work once bootstrapped: pick the
74
- next step from `TODO.md`, build exactly one, gate it, commit it, check
75
- it off. Also holds the Correction Protocol for fixing a wrong upstream
76
- step. Invoke it at the start of any build session and for "what's next".
77
- - **`hedgehog-bootstrap`** — run **once**, at project start, to scaffold
78
- the core stack, the enforcement config, and whichever add-ons (Auth,
79
- Queue, Mobile) planning intake turned on. Skip if `nx.json` already
80
- exists.
81
- - **`conventional-commits`** — when a change spans several steps in one
82
- working-tree pass and needs splitting back into per-step commits (mainly
83
- Correction Protocol cleanups).
84
-
85
- ### The agents — delegate the judgment calls
86
-
87
- - **`planner`** — planning intake (whether Hedgehog applies at all, then
88
- `hedgehog-planning-intake`'s BMAD-METHOD brainstorming/brief/PRD/UX-spec
89
- shelf, mined into scope boundary, the Add-ons decision, and domain
90
- vocabulary) at project start, and module scoping when new scope enters
91
- play. Writes `TODO.md` (including its `## Add-ons` block),
92
- `.hedgehog/BMAD/`, and `docs/design/<module>-notes.md`. On first run,
93
- hands off to the `bootstrap` agent once Confirm & Lock holds.
94
- - **`bootstrap`** — runs `hedgehog-bootstrap`'s core steps (always) plus
95
- whichever add-on steps planning intake turned on. Triggered
96
- automatically by `planner` after its first run; skip if `nx.json`
97
- already exists.
98
- - **`backend-eng`** — builds each module's Phase A steps (schema →
99
- contract → repository → service → controller → queue?), one step at a
100
- time, gated and committed in its own context.
101
- - **`ux-planner`** — once per module in Phase B, after the hook exists and
102
- before the screen: writes `docs/design/<module>.md`.
103
- - **`front-end-eng`** — builds each module's Phase B steps (hook, screen)
104
- from the ux-planner rationale, one step at a time, in its own context.
105
- - **`reviewer`** — phase-transition and Correction Protocol checks the
106
- mechanical gate can't make (port discipline, FK-by-ID discipline,
107
- contract shape).
108
-
109
- ## The constants (do not deviate)
110
-
111
- ### Stack: core (locked, every project) + add-ons (this project's picks below)
112
-
113
- **Core** — applies regardless of project size or which add-ons are on:
114
- Nx monorepo · pnpm · **NestJS** (all domain logic + DB access) · **Drizzle**
115
- (+ `drizzle-zod`) · **PostgreSQL** · **Docker Compose** (local Postgres,
116
- every host OS) · Railway · **ts-rest** contracts · **Zod** validation ·
117
- **TanStack Query** hooks · **Next.js** + ShadCN + Tailwind (web, UI only) ·
118
- Pino logging · Vitest + Playwright (tests) · Conventional Commits +
119
- commitlint + lefthook · Sentry.
120
-
121
- **Add-ons** — each on or off per project, decided at planning intake and
122
- recorded in `TODO.md`'s `## Add-ons` block; check that block for this
123
- project's actual picks rather than assuming any of these are present:
124
-
125
- | Add-on | Adds |
126
- | --- | --- |
127
- | Auth | Better Auth, `packages/auth`, a global auth guard on `apps/api` |
128
- | Queue | BullMQ + Redis, `apps/worker`, a `Queue` port/adapter seam |
129
- | Mobile | Expo + React Native Reusables + NativeWind, `apps/mobile` |
130
-
131
- An add-on that's off means the corresponding piece of infra genuinely
132
- isn't in this codebase — don't write code assuming `packages/auth`,
133
- `apps/worker`, or `apps/mobile` exist without checking `TODO.md`'s
134
- `## Add-ons` block first.
135
-
136
- Don't substitute libraries, in core or in whichever add-ons are on. If a
137
- package or generator name changed upstream, verify against current docs
138
- before running — don't swap in a different library.
139
-
140
- ### Layout
141
-
142
- ```
143
- docker-compose.yml local Postgres (+ Redis if Queue add-on is on) — every host OS, no native install
144
- apps/
145
- web Next.js — UI only
146
- mobile Expo — only if Mobile add-on is on
147
- api NestJS — owns all domain logic + DB access
148
- worker BullMQ consumers — only if Queue add-on is on
149
- packages/
150
- db Drizzle schema + client
151
- contracts ts-rest + Zod contracts
152
- hooks TanStack Query — shared web + mobile
153
- jobs typed job registry / queue definitions — only if Queue add-on is on
154
- auth Better Auth config — only if Auth add-on is on
155
- config locked ESLint/Prettier/tsconfig/env schema
156
- shared cross-cutting types + utils
157
- libs/
158
- <module>/port · <module>/repository · <module>/service (one triplet per table)
159
- .hedgehog/
160
- BMAD/ archival planning intake output (brief, PRD, UX spec, research) — write-once, from planner
161
- docs/
162
- design <module>-notes.md (planner, sourced from BMAD's UX spec) and <module>.md (ux-planner)
163
- ```
164
-
165
- Check `TODO.md`'s `## Add-ons` block before assuming any "only if" line
166
- above is actually present in this codebase.
167
-
168
- ### Core rules
169
-
170
- - **One table = one domain module.** Each carries the full step sequence.
171
- - **Cross-module references are FK-by-ID only.** A service imports only
172
- its own ports — never another module's adapter. (Enforced by Nx module
173
- boundaries; building out of order fails `nx lint`.)
174
- - **Backend before frontend.** Phase A (schema → contract → repository →
175
- service → controller → queue?) closes for a module before Phase B
176
- (hooks → screen) opens. Enforced by the CI phase gate.
177
- - **Sequential within a phase.** A step starts only once the previous one
178
- compiles and passes tests.
179
- - **One step = one commit**, in the exact Conventional Commit format from
180
- `hedgehog-loop`. A commit that fails typecheck/lint/test does not happen
181
- (lefthook gate).
182
- - **Fix wrong steps at the source** via the Correction Protocol — never a
183
- downstream workaround.
184
- - **Local Postgres always runs through `docker-compose.yml`**, on every
185
- host OS, regardless of add-ons; Redis joins it only if the Queue add-on
186
- is on. Never a natively-installed Postgres or Redis, even to match a
187
- contributor's existing local setup.
188
- - **`packages/config` is the single source** for shared config. A per-app
189
- override request means fix the base config, not add an override.
64
+ {{CORE_SECTION}}
190
65
 
191
66
  ## Consuming TODO.md
192
67
 
193
- `TODO.md` at repo root is a thin checklist mirroring the phase/step
194
- structure. To work from it:
68
+ `TODO.md` at repo root is a thin checklist mirroring this core's phase/
69
+ step structure. To work from it:
195
70
 
196
71
  1. Read it. Find the first unchecked step whose gate (the step before it)
197
72
  is satisfied.
198
- 2. Confirm the phase: a module with a `feat(<module>): api` commit is in
199
- Phase B; otherwise Phase A.
200
- 3. Build that one step via `hedgehog-loop`.
201
- 4. Check the line off after the commit lands. Checked/unchecked is the
73
+ 2. Build that one step via this core's loop skill (named in the section
74
+ above).
75
+ 3. Check the line off after the commit lands. Checked/unchecked is the
202
76
  only state — no notes, no rationale (that's the commit log's job).
203
77
 
204
- `planner` owns writing and extending `TODO.md`; the loop only checks boxes
205
- off. Keep it thin.
78
+ `planner` owns writing and extending `TODO.md`; the loop only checks
79
+ boxes off. Keep it thin.
206
80
 
207
- **When the build is done:** once every module in scope has both phases
208
- checked, the build session is complete. **Delete `TODO.md`** — a finished
209
- checklist is noise, and the commit log is the durable record of what was
210
- built. **`.hedgehog/BMAD/` stays** — it's the archival planning record,
211
- not a checklist.
81
+ **When the build is done:** once every item in scope is checked, the
82
+ build session is complete. **Delete `TODO.md`** — a finished checklist is
83
+ noise, and the commit log is the durable record of what was built. Any
84
+ archival planning-intake output this core produces stays — it's
85
+ historical record, not a checklist.
212
86
 
213
87
  ## Managing context
214
88
 
215
89
  Hedgehog is designed so the conversation is disposable. Keep the working
216
90
  context small:
217
91
 
218
- - **Clear context at module boundaries.** After a module's Phase A (or a
219
- whole module) is done and committed, `/clear` and start freshre-read
220
- `TODO.md` and continue. Nothing is lost, because the checklist, commits,
221
- and code hold all the state. Prefer this over letting one session
222
- accumulate the entire project.
92
+ - **Clear context at natural boundaries** a module's Phase A, a
93
+ landing page section, whatever this core's own unit boundary isonce
94
+ that unit is done and committed. `/clear` and start fresh, then
95
+ re-read `TODO.md` and continue. Nothing is lost, because the
96
+ checklist, commits, and code hold all the state. Prefer this over
97
+ letting one session accumulate the entire project.
223
98
  - **A cleared or new session recovers by reading `TODO.md` and the
224
- commit log**, never by needing the prior conversation. `.hedgehog/BMAD/`
225
- is available if the product narrative itself needs re-reading, but
226
- day-to-day recovery doesn't need it.
227
- - **Delegate heavy work to agents.** The project scaffold (`bootstrap`),
228
- planning intake (`planner`), every Phase A step (`backend-eng`), every
229
- Phase B step (`front-end-eng`), and reviews (`reviewer`) each run in
230
- their own isolated context — so that work doesn't pile up in the main
231
- thread.
99
+ commit log**, never by needing the prior conversation.
100
+ - **Delegate heavy work to agents.** Planning intake, scaffolding, and
101
+ every build step each run in their own isolated context — so that work
102
+ doesn't pile up in the main thread.
232
103
  - **Don't paste large context back in.** If you find yourself
233
104
  re-explaining the architecture, stop — it's fixed and stated in this
234
- file, not something to reconstruct. If you need a project specific, read
235
- it from the code. That's the self-documenting design working as
236
- intended.
105
+ file's core section, not something to reconstruct. If you need a
106
+ project specific, read it from the code. That's the self-documenting
107
+ design working as intended.
@@ -0,0 +1,46 @@
1
+ ## Add-ons
2
+
3
+ <!-- Written by planner at planning intake. Each line: on/off + the
4
+ one-line reason. An absent block reads as "never decided," not "off". -->
5
+
6
+ - Auth: (fill in: on/off — reason)
7
+ - Queue: (fill in: on/off — reason)
8
+ - Mobile: (fill in: on/off — reason)
9
+
10
+ ## Bootstrap
11
+
12
+ <!-- Add-on steps (planner marks each on/skipped at planning intake, per
13
+ the ## Add-ons block above) run live, one at a time, after core. A
14
+ skipped add-on gets checked off as skipped, not left unchecked. -->
15
+
16
+ - [x] Nx workspace + `packages/config` (incl. `docker-compose.yml` for local Postgres) — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-full-stack-app-core`
17
+ - [x] `packages/db` — Drizzle client — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-full-stack-app-core`
18
+ - [x] `apps/api` — Nest shell, Pino — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-full-stack-app-core`
19
+ - [x] `apps/web` — Next shell, TanStack Query provider — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-full-stack-app-core`
20
+ - [ ] `packages/auth` — Better Auth config + global guard on `apps/api` — Auth add-on (fill in: on / skipped, not in scope)
21
+ - [ ] `apps/worker` — BullMQ seam, Redis (no consumers yet) — Queue add-on (fill in: on / skipped, not in scope)
22
+ - [ ] `apps/mobile` — Expo shell — Mobile add-on (fill in: on / skipped, not in scope)
23
+ ## Phase A — Backend
24
+
25
+ <!-- One subsection per module in scope. Do not add hooks/screens here —
26
+ that's Phase B, and doesn't start until every module below is checked. -->
27
+
28
+ ### <module-name>
29
+
30
+ - [ ] schema
31
+ - [ ] contract
32
+ - [ ] repository
33
+ - [ ] service
34
+ - [ ] api (controller)
35
+ - [ ] queue (only if this operation genuinely needs async)
36
+ ## Phase B — Frontend
37
+
38
+ <!-- Do not touch this section until every module above has "api" checked. -->
39
+
40
+ ### <module-name>
41
+
42
+ - [ ] hooks
43
+ - [ ] ux-planner — writes docs/design/<module-name>.md; ask for a
44
+ mockup/screenshot/Stitch or Figma export here if one exists
45
+ - [ ] screen-web
46
+ - [ ] screen-mobile (only if building for mobile)
@@ -0,0 +1,24 @@
1
+ ## Brief
2
+
3
+ <!-- Written by planner at planning intake: the subject statement,
4
+ audience, and the page's single job — full detail in
5
+ .hedgehog/chain/00-brief.md. -->
6
+
7
+ - Subject: (fill in)
8
+ - Audience: (fill in)
9
+ - Page job: (fill in)
10
+
11
+ ## Bootstrap
12
+
13
+ - [x] Astro workspace + Tailwind token layer — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-landing-page-core`
14
+
15
+ ## Chain
16
+
17
+ <!-- The Chain Method, one phase at a time, in strict order except where
18
+ noted. Do not start a phase until the one above it is checked. -->
19
+
20
+ - [ ] strategy — subject/audience/job + awareness/sophistication diagnosis + narrative arc + objection map + adjective pairs + visceral/behavioral/reflective sort + note timing — `landing-strategist`
21
+ - [ ] systems — dial table + voice spec (parallel) → token system → signature motif — `landing-systems`
22
+ - [ ] sequence — per-section transitions, weight, spacing, beat structure — `landing-sequencer`
23
+ - [ ] audit — traceability/distinctiveness + usability, reconciled to a pass — `landing-critic`
24
+ - [ ] build — the artifact, in Astro — `landing-builder`
@@ -1,56 +1,12 @@
1
1
  # TODO
2
2
 
3
- <!-- 2-3 sentences: what is this project. Full product narrative, scope
4
- boundary, and domain vocabulary live in .hedgehog/BMAD/04-prd.md — every
5
- project has one, written by planner from BMAD-METHOD's planning shelf. -->
3
+ <!-- 2-3 sentences: what is this project. Full detail lives in this
4
+ core's own archival planning-intake output see CLAUDE.md's core
5
+ section for where. -->
6
6
 
7
7
  ## Context
8
8
 
9
- (fill in per project — see .hedgehog/BMAD/04-prd.md for the full picture)
9
+ (fill in per project — see this core's archival planning output for the
10
+ full picture)
10
11
 
11
- ## Add-ons
12
-
13
- <!-- Written by planner at planning intake. Each line: on/off + the
14
- one-line reason. An absent block reads as "never decided," not "off". -->
15
-
16
- - Auth: (fill in: on/off — reason)
17
- - Queue: (fill in: on/off — reason)
18
- - Mobile: (fill in: on/off — reason)
19
-
20
- ## Bootstrap
21
-
22
- <!-- Add-on steps (planner marks each on/skipped at planning intake, per
23
- the ## Add-ons block above) run live, one at a time, after core. A
24
- skipped add-on gets checked off as skipped, not left unchecked. -->
25
-
26
- - [x] Nx workspace + `packages/config` (incl. `docker-compose.yml` for local Postgres) — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-core`
27
- - [x] `packages/db` — Drizzle client — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-core`
28
- - [x] `apps/api` — Nest shell, Pino — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-core`
29
- - [x] `apps/web` — Next shell, TanStack Query provider — core, landed via `hedgehog init`, verified via `hedgehog-bootstrap-core`
30
- - [ ] `packages/auth` — Better Auth config + global guard on `apps/api` — Auth add-on (fill in: on / skipped, not in scope)
31
- - [ ] `apps/worker` — BullMQ seam, Redis (no consumers yet) — Queue add-on (fill in: on / skipped, not in scope)
32
- - [ ] `apps/mobile` — Expo shell — Mobile add-on (fill in: on / skipped, not in scope)
33
- ## Phase A — Backend
34
-
35
- <!-- One subsection per module in scope. Do not add hooks/screens here —
36
- that's Phase B, and doesn't start until every module below is checked. -->
37
-
38
- ### <module-name>
39
-
40
- - [ ] schema
41
- - [ ] contract
42
- - [ ] repository
43
- - [ ] service
44
- - [ ] api (controller)
45
- - [ ] queue (only if this operation genuinely needs async)
46
- ## Phase B — Frontend
47
-
48
- <!-- Do not touch this section until every module above has "api" checked. -->
49
-
50
- ### <module-name>
51
-
52
- - [ ] hooks
53
- - [ ] ux-planner — writes docs/design/<module-name>.md; ask for a
54
- mockup/screenshot/Stitch or Figma export here if one exists
55
- - [ ] screen-web
56
- - [ ] screen-mobile (only if building for mobile)
12
+ {{CORE_SECTION}}