@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
package/src/templates/CLAUDE.md
CHANGED
|
@@ -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
|
|
6
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
44
|
-
|
|
45
|
-
|
|
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
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
199
|
-
|
|
200
|
-
3.
|
|
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
|
|
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
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
92
|
+
- **Clear context at natural boundaries** — a module's Phase A, a
|
|
93
|
+
landing page section, whatever this core's own unit boundary is — once
|
|
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.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
|
235
|
-
it from the code. That's the self-documenting
|
|
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`
|
package/src/templates/TODO.md
CHANGED
|
@@ -1,56 +1,12 @@
|
|
|
1
1
|
# TODO
|
|
2
2
|
|
|
3
|
-
<!-- 2-3 sentences: what is this project. Full
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
9
|
+
(fill in per project — see this core's archival planning output for the
|
|
10
|
+
full picture)
|
|
10
11
|
|
|
11
|
-
|
|
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}}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/apps/api/src/app/health.controller.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/global-setup.ts
RENAMED
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/apps/api-e2e/src/support/test-setup.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/theme-toggle.tsx
RENAMED
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/apps/web/src/components/ui/button.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/{golden-core → golden-cores/full-stack-app}/packages/config/src/env.schema.spec.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|