@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
@@ -0,0 +1,9 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
2
+ <path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
3
+ <style>
4
+ path { fill: #000; }
5
+ @media (prefers-color-scheme: dark) {
6
+ path { fill: #FFF; }
7
+ }
8
+ </style>
9
+ </svg>
@@ -0,0 +1,24 @@
1
+ ---
2
+ import '../styles/global.css';
3
+ ---
4
+
5
+ <html lang="en">
6
+ <head>
7
+ <meta charset="utf-8" />
8
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
9
+ <link rel="icon" href="/favicon.ico" />
10
+ <meta name="viewport" content="width=device-width" />
11
+ <meta name="generator" content={Astro.generator} />
12
+ <title>landing-page core</title>
13
+ </head>
14
+ <body class="bg-paper font-body text-ink">
15
+ <!--
16
+ landing-builder replaces this file at the Chain Method's build
17
+ phase. Until then this placeholder proves the Astro + Tailwind
18
+ pipeline (dev server, build, token layer) works end to end.
19
+ -->
20
+ <main class="flex min-h-screen items-center justify-center">
21
+ <h1 class="font-display text-2xl">landing-page core — ready to build</h1>
22
+ </main>
23
+ </body>
24
+ </html>
@@ -0,0 +1,18 @@
1
+ @import 'tailwindcss';
2
+
3
+ /* The token layer — Step 5 (Systems Designer) of the Chain Method
4
+ overwrites every value below with the project's derived token system.
5
+ Nothing here is meant to ship as-is; this is the placeholder that
6
+ proves the pipeline (Tailwind v4's CSS-first @theme) is wired. */
7
+ @theme {
8
+ --color-ink: #18181b;
9
+ --color-paper: #fafafa;
10
+ --color-accent: #2563eb;
11
+
12
+ --font-display: 'system-ui', sans-serif;
13
+ --font-body: 'system-ui', sans-serif;
14
+
15
+ --spacing-unit: 0.25rem;
16
+
17
+ --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
18
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "include": [".astro/types.d.ts", "**/*"],
4
+ "exclude": ["dist"]
5
+ }
@@ -16,7 +16,7 @@ This skill touches no domain modules — no schema, no contract, nothing
16
16
  under `libs/<module>/`. That's Phase A, started fresh after Bootstrap
17
17
  closes.
18
18
 
19
- **Core lands via `hedgehog-bootstrap-core`, run first, unconditionally.**
19
+ **Core lands via `hedgehog-bootstrap-full-stack-app-core`, run first, unconditionally.**
20
20
  That skill copies a pre-built, pre-verified workspace (Nx, enforcement
21
21
  config, `packages/db`, `apps/api`, `apps/web`) rather than generating it
22
22
  live — core is identical on every project, so it's built once upstream
@@ -36,12 +36,12 @@ Hedgehog has one non-negotiable **core** — applied to every project that
36
36
  uses Hedgehog at all, regardless of size — plus a small set of named
37
37
  **add-ons**, each scaffolded only when planning intake's scope boundary
38
38
  (`planner`) actually calls for it. The core is not "the small version of
39
- the stack"; it's the fixed floor, landed by `hedgehog-bootstrap-core`.
39
+ the stack"; it's the fixed floor, landed by `hedgehog-bootstrap-full-stack-app-core`.
40
40
  Add-ons are not "extra polish"; each is standing infra with a real
41
41
  ongoing cost (a service to run, a secret to manage, a seam to keep
42
42
  idempotent) that a project without the matching need shouldn't carry.
43
43
 
44
- ### Core (every project, no exceptions — see `hedgehog-bootstrap-core`)
44
+ ### Core (every project, no exceptions — see `hedgehog-bootstrap-full-stack-app-core`)
45
45
 
46
46
  | Layer | Choice |
47
47
  |---|---|
@@ -65,7 +65,7 @@ idempotent) that a project without the matching need shouldn't carry.
65
65
  Constraint-contingent substitutions: Prisma for Drizzle when the team
66
66
  isn't SQL-comfortable; cloud + Pulumi/SST for Railway when full
67
67
  declarative IaC is a hard requirement; tRPC for ts-rest when the client is
68
- committed TypeScript-only. A substitution here means `src/golden-core`
68
+ committed TypeScript-only. A substitution here means `src/golden-cores/full-stack-app`
69
69
  itself needs regenerating against the substitute before this project's
70
70
  Bootstrap runs — not a per-project hand-edit after landing core.
71
71
 
@@ -85,7 +85,7 @@ stubbed or partially wired.
85
85
 
86
86
  A project with none of these on is still a full Hedgehog project — Nx,
87
87
  NestJS, Postgres, Docker, ts-rest, the phase discipline, and every gate
88
- still apply (all landed by `hedgehog-bootstrap-core`). What's cut is
88
+ still apply (all landed by `hedgehog-bootstrap-full-stack-app-core`). What's cut is
89
89
  infra with no consumer, not the discipline itself.
90
90
 
91
91
  If a project's whole description has no persistent domain data and no
@@ -100,18 +100,18 @@ something with no domain module in it.
100
100
 
101
101
  ```
102
102
  apps/
103
- web (Next.js — UI only) core, landed by hedgehog-bootstrap-core
103
+ web (Next.js — UI only) core, landed by hedgehog-bootstrap-full-stack-app-core
104
104
  mobile (Expo — only if the Mobile add-on is on)
105
- api (NestJS — owns all domain logic + DB access) core, landed by hedgehog-bootstrap-core
105
+ api (NestJS — owns all domain logic + DB access) core, landed by hedgehog-bootstrap-full-stack-app-core
106
106
  worker (BullMQ consumers — only if the Queue add-on is on)
107
107
 
108
108
  packages/
109
- db (Drizzle schema + client) core, landed by hedgehog-bootstrap-core
109
+ db (Drizzle schema + client) core, landed by hedgehog-bootstrap-full-stack-app-core
110
110
  contracts (ts-rest + Zod contracts)
111
111
  hooks (TanStack Query — shared web + mobile)
112
112
  jobs (typed job registry / queue definitions — only if Queue is on)
113
113
  auth (Better Auth config — only if Auth is on)
114
- config (locked ESLint/Prettier/tsconfig/env schema) core, landed by hedgehog-bootstrap-core
114
+ config (locked ESLint/Prettier/tsconfig/env schema) core, landed by hedgehog-bootstrap-full-stack-app-core
115
115
  shared (cross-cutting types + utils)
116
116
 
117
117
  docs/
@@ -144,7 +144,7 @@ recording which add-ons (Auth, Queue, Mobile) are on for this project. No
144
144
  scope boundary yet, or a `TODO.md` with no `## Add-ons` block: stop and
145
145
  point to `planner` rather than guessing which add-ons apply.
146
146
 
147
- Run `hedgehog-bootstrap-core` first, unconditionally, if it hasn't
147
+ Run `hedgehog-bootstrap-full-stack-app-core` first, unconditionally, if it hasn't
148
148
  already landed core (check `TODO.md`'s Bootstrap section, or `nx.json`
149
149
  at the repo root). That skill has its own re-run guard and Docker check
150
150
  — don't duplicate those here.
@@ -167,11 +167,11 @@ pnpm add better-auth @thallesp/nestjs-better-auth
167
167
 
168
168
  Configure the Drizzle adapter against `packages/db`. Add
169
169
  `BETTER_AUTH_SECRET: z.string().min(32)` to `packages/config/env.schema.ts`
170
- now (it doesn't exist in the core schema `hedgehog-bootstrap-core`
170
+ now (it doesn't exist in the core schema `hedgehog-bootstrap-full-stack-app-core`
171
171
  landed), and add a matching `BETTER_AUTH_SECRET=` line with a generated
172
172
  value to the root `.env.example` — a schema entry with no `.env.example`
173
173
  line reproduces the exact `loadEnv()` crash-on-boot that
174
- `hedgehog-bootstrap-core`'s `DATABASE_URL` entry exists to prevent, just
174
+ `hedgehog-bootstrap-full-stack-app-core`'s `DATABASE_URL` entry exists to prevent, just
175
175
  for this var instead. Tag: `scope:auth`, `type:adapter`.
176
176
 
177
177
  Also wire the global auth guard on `apps/api`: `pnpm add
@@ -198,7 +198,7 @@ pnpm add bullmq ioredis
198
198
  ```
199
199
 
200
200
  Add a `redis` service to the root `docker-compose.yml`
201
- `hedgehog-bootstrap-core` landed (Postgres-only until now) and
201
+ `hedgehog-bootstrap-full-stack-app-core` landed (Postgres-only until now) and
202
202
  `REDIS_URL: z.string().url()` to `packages/config/env.schema.ts` (it
203
203
  doesn't exist in the core schema), plus a matching `REDIS_URL=` line in
204
204
  the root `.env.example` pointing at that same `docker-compose.yml`
@@ -243,7 +243,7 @@ pnpm add react-native-reusables nativewind
243
243
  ```
244
244
 
245
245
  Configure NativeWind's theme (`tailwind.config.js` colors, light/dark) to
246
- match `apps/web`'s base theme (landed by `hedgehog-bootstrap-core`) — one
246
+ match `apps/web`'s base theme (landed by `hedgehog-bootstrap-full-stack-app-core`) — one
247
247
  visual identity across platforms, set once here rather than drifting
248
248
  per-screen. Tag: `scope:mobile`.
249
249
 
@@ -265,14 +265,14 @@ other).
265
265
  ## Locked format/lint config
266
266
 
267
267
  One shared config, extended everywhere — landed by
268
- `hedgehog-bootstrap-core`, referenced (not re-created) by every add-on
268
+ `hedgehog-bootstrap-full-stack-app-core`, referenced (not re-created) by every add-on
269
269
  step above:
270
270
 
271
271
  - `packages/config/eslint-base.js` — flat config, extended by every
272
272
  app/lib.
273
273
  - `packages/config/prettier.js` — the shared base, *without*
274
274
  `prettier-plugin-tailwindcss` (that's `apps/web`'s own config, already
275
- wired by `hedgehog-bootstrap-core`).
275
+ wired by `hedgehog-bootstrap-full-stack-app-core`).
276
276
 
277
277
  A per-app override request signals to fix the base config at the source.
278
278
 
@@ -280,7 +280,7 @@ A per-app override request signals to fix the base config at the source.
280
280
 
281
281
  Update `TODO.md`: check off every add-on line now built or explicitly
282
282
  skipped (core's four lines are already checked by
283
- `hedgehog-bootstrap-core`). Leave Phase A/B sections as-is (per-module,
283
+ `hedgehog-bootstrap-full-stack-app-core`). Leave Phase A/B sections as-is (per-module,
284
284
  filled in by `planner` during planning intake or when new scope enters play).
285
285
  Hand off to `hedgehog-loop` — from here, every domain module goes
286
286
  through Phase A steps 1–5(a) one at a time, gated by lefthook, each its
@@ -288,7 +288,7 @@ own commit.
288
288
 
289
289
  ## Constraints
290
290
 
291
- - Run `hedgehog-bootstrap-core` first, unconditionally, before any step
291
+ - Run `hedgehog-bootstrap-full-stack-app-core` first, unconditionally, before any step
292
292
  in this file — never scaffold an add-on against a core that hasn't
293
293
  landed and verified clean.
294
294
  - Add-on steps (Auth, Queue, Mobile) run only if `TODO.md`'s `## Add-ons`
@@ -307,5 +307,5 @@ own commit.
307
307
  discipline as every other step in the discipline, even though this is
308
308
  infra rather than a domain module.
309
309
  - Never substitute a natively-installed Postgres or Redis, even to match
310
- a contributor's existing local setup — see `hedgehog-bootstrap-core`'s
310
+ a contributor's existing local setup — see `hedgehog-bootstrap-full-stack-app-core`'s
311
311
  **Local infra: Docker, always**.
@@ -1,13 +1,13 @@
1
1
  ---
2
- name: hedgehog-bootstrap-core
3
- description: Use once, at the start of a new Hedgehog project, before hedgehog-bootstrap's add-on steps, to land the golden-core workspace (Nx, packages/config, packages/db, apps/api, apps/web, and every enforcement file) and verify it's green. Runs as the first move of the `bootstrap` agent, which `planner` invokes automatically after Confirm & Lock. No per-project decisions, no add-on awareness.
2
+ name: hedgehog-bootstrap-full-stack-app-core
3
+ description: Use once, at the start of a new Hedgehog project on the full-stack-app core, before hedgehog-bootstrap's add-on steps, to land the full-stack-app core workspace (Nx, packages/config, packages/db, apps/api, apps/web, and every enforcement file) and verify it's green. Runs as the first move of the `bootstrap` agent, which `planner` invokes automatically after Confirm & Lock. No per-project decisions, no add-on awareness.
4
4
  ---
5
5
 
6
- # Hedgehog Bootstrap — Core
6
+ # Hedgehog Bootstrap — full-stack-app Core
7
7
 
8
8
  Lands the always-on core of a Hedgehog project — the same four pieces on
9
9
  every project, regardless of size or which add-ons are on — by copying a
10
- pre-built, pre-verified workspace (`src/golden-core/` in the Hedgehog
10
+ pre-built, pre-verified workspace (`src/golden-cores/full-stack-app/` in the Hedgehog
11
11
  package) rather than generating it live: Nx workspace + enforcement
12
12
  config, `packages/db`, `apps/api`, `apps/web`. These pieces are
13
13
  deterministic — the same commands produce the same output on every
@@ -23,7 +23,7 @@ Hedgehog project.
23
23
 
24
24
  ## What lands
25
25
 
26
- Everything under `src/golden-core/` in the installed Hedgehog package,
26
+ Everything under `src/golden-cores/full-stack-app/` in the installed Hedgehog package,
27
27
  copied to the repo root:
28
28
 
29
29
  - Root: `nx.json`, `pnpm-workspace.yaml`, `package.json` (with the
@@ -84,14 +84,14 @@ alike. No Docker: stop and point to installing Docker Desktop
84
84
  (macOS/Windows) or Docker Engine (Linux) rather than falling back to a
85
85
  natively-installed Postgres. See **Local infra: Docker, always** below.
86
86
 
87
- ### 3. Land `src/golden-core/`
87
+ ### 3. Land `src/golden-cores/full-stack-app/`
88
88
 
89
89
  In the common case this is already done — `hedgehog init`'s installer
90
- copies `src/golden-core/` to the repo root at install time, the same way
90
+ copies `src/golden-cores/full-stack-app/` to the repo root at install time, the same way
91
91
  it copies `src/agents` to `.claude/agents`. Check whether the core files
92
92
  are already present (same check as step 1). If they're missing —
93
93
  `hedgehog init` ran against an older package version, or the files were
94
- deleted — copy `src/golden-core/`'s contents to the repo root now as a
94
+ deleted — copy `src/golden-cores/full-stack-app/`'s contents to the repo root now as a
95
95
  fallback. Either way, by the end of this step every file listed in "What
96
96
  lands" above should be on disk.
97
97
 
@@ -113,7 +113,7 @@ of one line here.
113
113
  `pnpm install` resolves against the committed `pnpm-lock.yaml` — this
114
114
  should be fast and produce no lockfile changes. A lockfile diff here
115
115
  means the shipped `pnpm-lock.yaml` doesn't match `package.json` — that's
116
- a packaging bug in `src/golden-core`, not something to patch locally
116
+ a packaging bug in `src/golden-cores/full-stack-app`, not something to patch locally
117
117
  (see **If verification fails**, below).
118
118
 
119
119
  ### 5. Verify
@@ -150,11 +150,12 @@ The four core Bootstrap lines ship pre-checked in the `TODO.md` template.
150
150
  If step 3's fallback copy ran, check them now. Leave every add-on line
151
151
  (Auth/Queue/Mobile) untouched; `hedgehog-bootstrap` owns those.
152
152
 
153
- ## Known issues baked into golden-core
153
+ ## Known issues baked into the full-stack-app core
154
154
 
155
155
  These are already fixed in the committed tree — listed here so anyone
156
- regenerating `src/golden-core` (see that skill's regeneration script)
157
- knows why the tree looks the way it does, and doesn't reintroduce the
156
+ regenerating `src/golden-cores/full-stack-app` (see
157
+ `scripts/regenerate-full-stack-app-core.sh`) knows why the tree looks the
158
+ way it does, and doesn't reintroduce the
158
159
  bug by "cleaning up" what looks like an unnecessary pin or directive.
159
160
 
160
161
  - **`apps/web-e2e/tsconfig.json` needs an explicit `"types": ["node"]`.**
@@ -224,14 +225,14 @@ bug by "cleaning up" what looks like an unnecessary pin or directive.
224
225
 
225
226
  ## If verification fails
226
227
 
227
- A clean copy of `src/golden-core` that fails typecheck/lint/test or
228
+ A clean copy of `src/golden-cores/full-stack-app` that fails typecheck/lint/test or
228
229
  needs a lockfile change means the shipped template itself is broken —
229
230
  not a per-project problem to hand-patch around. Stop and report exactly
230
231
  what failed (which target, which error). Fixing this means updating
231
- `src/golden-core` at its source (via
232
- `scripts/regenerate-golden-core.sh` in the Hedgehog repo itself) and
233
- shipping a new package version — never patch a consuming project's copy
234
- to route around a broken template and call core done.
232
+ `src/golden-cores/full-stack-app` at its source (via
233
+ `scripts/regenerate-full-stack-app-core.sh` in the Hedgehog repo itself)
234
+ and shipping a new package version — never patch a consuming project's
235
+ copy to route around a broken template and call core done.
235
236
 
236
237
  ## Local infra: Docker, always
237
238
 
@@ -253,7 +254,7 @@ not here.
253
254
  instead — this skill's whole point is being identical across every
254
255
  project.
255
256
  - Don't hand-edit any file this step lands to work around a verification
256
- failure. Fix `src/golden-core` at the source instead (see **If
257
+ failure. Fix `src/golden-cores/full-stack-app` at the source instead (see **If
257
258
  verification fails**).
258
259
  - Don't add domain schema, contracts, or any `libs/<module>/*` content —
259
260
  that's Phase A, after every Bootstrap box (core and whichever add-ons
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: hedgehog-bootstrap-landing-page-core
3
+ description: Use once, at the start of a new Hedgehog project on the landing-page core, to land the pre-verified Astro + Tailwind workspace and verify it's green. Runs as the only move of the `bootstrap` agent on this core — there are no add-on steps, unlike full-stack-app. Invoked automatically by `planner` after Confirm & Lock.
4
+ ---
5
+
6
+ # Hedgehog Bootstrap — landing-page Core
7
+
8
+ Lands the whole of a `landing-page` project's workspace — there's no
9
+ add-on layer to run after it, unlike `full-stack-app`'s
10
+ `hedgehog-bootstrap` — by copying a pre-built, pre-verified workspace
11
+ (`src/golden-cores/landing-page/` in the Hedgehog package) rather than
12
+ generating it live: Astro workspace, Tailwind token-layer config, the
13
+ library set this core is built on (GSAP, Lenis, SplitType, Paper.js).
14
+ This piece is deterministic — the same commands produce the same output
15
+ on every project — so the output is committed once, upstream, and copied
16
+ here instead of re-derived by an agent on every run.
17
+
18
+ This skill has no per-project decisions to make: no add-ons, no `TODO.md`
19
+ dependency beyond checking its own Bootstrap line, nothing to ask.
20
+ Landing-page's core is identical on every project running it.
21
+
22
+ ## What lands
23
+
24
+ Everything under `src/golden-cores/landing-page/` in the installed
25
+ Hedgehog package, copied to the repo root:
26
+
27
+ - Root: `astro.config.mjs`, `package.json` (with the `dev` script —
28
+ `astro dev` — and every library in the stack pinned), `tsconfig.json`,
29
+ `eslint.config.mjs`, `.prettierrc.js`, `.gitignore`, `pnpm-lock.yaml`.
30
+ - `tailwind.config.ts` — the token layer only: no component classes, no
31
+ plugin beyond the base. Ships with placeholder tokens (a neutral
32
+ starting palette, a system type stack, a 4px spacing unit) that
33
+ `landing-systems` overwrites at its own phase — this file existing and
34
+ being wired into the build is what core guarantees, not any specific
35
+ token values.
36
+ - `src/pages/index.astro` — a minimal placeholder page (proves the build
37
+ pipeline works end to end), replaced by `landing-builder`'s own output
38
+ at the build phase.
39
+ - `src/styles/global.css` — the Tailwind import and CSS custom-property
40
+ scaffold `landing-systems`'s token system writes into.
41
+ - `src/sections/`, `src/motifs/` — empty, with a `.gitkeep`; real content
42
+ starts at the systems and build phases.
43
+
44
+ `node_modules` is not part of the copy — `pnpm install` regenerates it
45
+ from the committed `pnpm-lock.yaml`.
46
+
47
+ ## Steps
48
+
49
+ ### 1. Confirm this hasn't already run
50
+
51
+ Check for `astro.config.mjs` at the repo root, or a prior
52
+ `feat(landing): workspace` commit
53
+ (`git log --grep="^feat(landing): workspace"`). Either means core already
54
+ landed — stop, don't re-copy. If something about the landed core seems
55
+ wrong, that's a Correction Protocol case (`hedgehog-landing-loop`), not a
56
+ re-copy: patch the specific file at its source.
57
+
58
+ ### 2. Land `src/golden-cores/landing-page/`
59
+
60
+ In the common case this is already done — `hedgehog init --core=landing-page`'s
61
+ installer copies `src/golden-cores/landing-page/` to the repo root at
62
+ install time, the same way it copies `src/agents` to `.claude/agents`.
63
+ Check whether the core files are already present (same check as step 1).
64
+ If they're missing — `hedgehog init` ran against an older package
65
+ version, or the files were deleted — copy
66
+ `src/golden-cores/landing-page/`'s contents to the repo root now as a
67
+ fallback. Either way, by the end of this step every file listed in "What
68
+ lands" above should be on disk.
69
+
70
+ ### 3. Install
71
+
72
+ ```bash
73
+ pnpm install
74
+ ```
75
+
76
+ Resolves against the committed `pnpm-lock.yaml` — this should be fast
77
+ and produce no lockfile changes. A lockfile diff here means the shipped
78
+ `pnpm-lock.yaml` doesn't match `package.json` — that's a packaging bug in
79
+ `src/golden-cores/landing-page`, not something to patch locally (see **If
80
+ verification fails**, below).
81
+
82
+ ### 4. Verify
83
+
84
+ ```bash
85
+ pnpm astro check
86
+ pnpm build
87
+ ```
88
+
89
+ Both must be clean: no type errors from the first command, a successful
90
+ build with no warnings from the second. This is the live check that
91
+ proves core isn't correct by trusting the copy, but by actually running
92
+ the same gate every phase in this core's loop runs.
93
+
94
+ ### 5. Commit
95
+
96
+ ```
97
+ feat(landing): workspace
98
+ ```
99
+
100
+ One commit for all of core, landed as a verified copy.
101
+
102
+ ### 6. `TODO.md`'s core line
103
+
104
+ The Bootstrap line ships pre-checked in the `landing-page` `TODO.md`
105
+ template. If step 2's fallback copy ran, check it now.
106
+
107
+ ## Known issues baked into the landing-page core
108
+
109
+ These are already fixed in the committed tree — listed here so anyone
110
+ regenerating `src/golden-cores/landing-page` (see
111
+ `scripts/regenerate-landing-page-core.sh`) knows why the tree looks the
112
+ way it does, and doesn't reintroduce the bug by "cleaning up" what looks
113
+ like an unnecessary pin.
114
+
115
+ - **`typescript` must stay pinned to the `^5` line, not `7.x`.**
116
+ `@astrojs/check` (which `astro check` calls into) relies on a
117
+ programmatic TypeScript API that the 7.x native compiler doesn't
118
+ expose yet — running `astro check` against TS 7 fails immediately with
119
+ "does not expose the programmatic API that `astro check` relies on"
120
+ (tracked at github.com/withastro/roadmap/discussions/1321). Re-check
121
+ this pin when bumping TypeScript; it may be resolved upstream by then.
122
+ - **`create-astro`'s scaffold ships its own `AGENTS.md`/`CLAUDE.md`
123
+ symlink, `README.md`, and `pnpm-workspace.yaml`**, as if this were a
124
+ standalone repo rather than a tree that lands at a Hedgehog project's
125
+ root. All four are stripped before syncing — they'd otherwise collide
126
+ with (or silently shadow) the project's real root `CLAUDE.md` and
127
+ Hedgehog's own workspace conventions.
128
+ - **MorphSVGPlugin ships inside the `gsap` package itself** — no
129
+ separate install, no Club GreenSock membership, no private registry.
130
+ GreenSock made every plugin free when GSAP joined Webflow in 2024.
131
+ Import it as `import { MorphSVGPlugin } from 'gsap/MorphSVGPlugin'`
132
+ directly from the `gsap` dependency already in `package.json`. Don't
133
+ reintroduce a separate paid-plugin workaround if this comes up again —
134
+ verify current licensing against gsap.com before assuming otherwise.
135
+
136
+ ## If verification fails
137
+
138
+ A clean copy of `src/golden-cores/landing-page` that fails `astro check`
139
+ or `pnpm build`, or needs a lockfile change, means the shipped template
140
+ itself is broken — not a per-project problem to hand-patch around. Stop
141
+ and report exactly what failed. Fixing this means updating
142
+ `src/golden-cores/landing-page` at its source (via
143
+ `scripts/regenerate-landing-page-core.sh` in the Hedgehog repo itself)
144
+ and shipping a new package version — never patch a consuming project's
145
+ copy to route around a broken template and call core done.
146
+
147
+ ## Constraints
148
+
149
+ - Run once per project, as the `bootstrap` agent's only move on this
150
+ core — never invoked on its own by a user.
151
+ - No add-on awareness, because this core has no add-ons. If a future
152
+ landing-page variation genuinely needs one (a CMS integration, a form
153
+ backend), that's a new core decision for `planner`'s Phase 0, not an
154
+ add-on bolted onto this one.
155
+ - Don't hand-edit any file this step lands to work around a verification
156
+ failure. Fix `src/golden-cores/landing-page` at the source instead (see
157
+ **If verification fails**).
158
+ - Don't write any Chain Method phase content (adjectives, tokens, motif,
159
+ sequence, or the built page) — that's `landing-strategist` through
160
+ `landing-builder`'s work, after this Bootstrap box is checked.