@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
|
Binary file
|
|
@@ -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>
|
|
File without changes
|
|
@@ -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>
|
|
File without changes
|
|
@@ -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
|
+
}
|
|
@@ -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-
|
|
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**.
|
package/src/skills/{hedgehog-bootstrap-core → hedgehog-bootstrap-full-stack-app-core}/SKILL.md
RENAMED
|
@@ -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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
157
|
-
knows why the tree looks 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-
|
|
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-
|
|
232
|
-
`scripts/regenerate-
|
|
233
|
-
shipping a new package version — never patch a consuming project's
|
|
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-
|
|
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.
|