@skyf0xx/hedgehog-core-full-stack-app 1.0.13 → 1.1.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 +47 -70
- package/package.json +1 -1
- package/skills/hedgehog-bootstrap/SKILL.md +67 -8
- package/skills/hedgehog-loop/SKILL.md +34 -12
- package/workspace/addon-versions.json +39 -0
- package/workspace/apps/api/package.json +14 -2
- package/workspace/apps/api/vitest.config.mts +1 -1
- package/workspace/apps/api-e2e/vitest.config.mts +1 -1
- package/workspace/apps/web/AGENTS.md +9 -0
- package/workspace/apps/web/CLAUDE.md +1 -0
- package/workspace/apps/web/next-env.d.ts +2 -2
- package/workspace/apps/web/vitest.config.mts +1 -1
- package/workspace/package.json +19 -14
- package/workspace/packages/config/vitest.config.mts +1 -1
- package/workspace/packages/db/vitest.config.mts +1 -1
- package/workspace/pnpm-lock.yaml +928 -251
package/README.md
CHANGED
|
@@ -1,80 +1,57 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Hedgehog Full-Stack App Core ⭐
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
workspace (NestJS + Drizzle + PostgreSQL on the backend, Next.js +
|
|
5
|
-
ShadCN + Tailwind on the frontend, ts-rest contracts, TanStack Query
|
|
6
|
-
hooks) plus the agents, skills, and manifest that drive a Hedgehog
|
|
7
|
-
project built on it.
|
|
3
|
+
### For: Well Architechted Full Stack Apps
|
|
8
4
|
|
|
9
|
-
|
|
5
|
+
Every AI coding tool can scaffold an app. Most let the backend rot as it
|
|
6
|
+
grows: auth logic scattered across routes, contracts drifting from the
|
|
7
|
+
client, schema changes nobody tested.
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
(lefthook, commitlint, the CI phase gate).
|
|
15
|
-
- `agents/` — `backend-eng`, `ux-planner`, `front-end-eng`.
|
|
16
|
-
- `skills/` — `hedgehog-loop`, `hedgehog-bootstrap`,
|
|
17
|
-
`hedgehog-bootstrap-full-stack-app-core`, and the Nx tooling skills
|
|
18
|
-
(`nx-generate`, `nx-run-tasks`, `nx-workspace`,
|
|
19
|
-
`link-workspace-packages`).
|
|
20
|
-
- `vendor-skills/GSAP` — the vendored asset set `hedgehog-loop`'s
|
|
21
|
-
build steps reference.
|
|
22
|
-
- `CLAUDE.core.md` — fills a Hedgehog project's root `CLAUDE.md`
|
|
23
|
-
`{{CORE_SECTION}}` placeholder for this core.
|
|
24
|
-
- `hedgehog-core.yaml` — this package's manifest: name, flag, the
|
|
25
|
-
selection prose the Hedgehog planner matches a project description
|
|
26
|
-
against, and which agents/skills/vendor skills it carries.
|
|
27
|
-
- `scripts/regenerate-full-stack-app-core.sh` — the deterministic
|
|
28
|
-
generator that regenerates `workspace/` from scratch. Run by hand
|
|
29
|
-
when a workspace dependency needs bumping; not part of any install
|
|
30
|
-
path.
|
|
31
|
-
- `repro/` — reproductions that drive `workspace/`'s real lefthook
|
|
32
|
-
configuration and pinned lefthook binary against a real `git commit`,
|
|
33
|
-
proving the commit gate runs on a fresh install and fails closed when
|
|
34
|
-
its tooling is missing.
|
|
9
|
+
This core gives Hedgehog a backend that stays honest as it grows: one
|
|
10
|
+
opinionated stack, one enforced build order, and a phase gate that
|
|
11
|
+
blocks the next layer until the current one passes.
|
|
35
12
|
|
|
36
|
-
|
|
13
|
+
```mermaid
|
|
14
|
+
flowchart LR
|
|
15
|
+
A[Schema] --> B[Contract]
|
|
16
|
+
B --> C[Repository]
|
|
17
|
+
C --> D[Service]
|
|
18
|
+
D --> E[Controller]
|
|
19
|
+
E --> F[Hook]
|
|
20
|
+
F --> G[Screen]
|
|
21
|
+
```
|
|
37
22
|
|
|
38
|
-
|
|
39
|
-
core rather than carrying its content directly. See the Hedgehog engine
|
|
40
|
-
(`@skyf0xx/hedgehog`) for the installer and build-graph tooling that
|
|
41
|
-
consumes it.
|
|
23
|
+
## What you get
|
|
42
24
|
|
|
43
|
-
|
|
25
|
+
- **NestJS + Drizzle + PostgreSQL** on the backend, **Next.js + ShadCN +
|
|
26
|
+
Tailwind** on the frontend, locked in once so every feature reuses the
|
|
27
|
+
same stack.
|
|
28
|
+
- **ts-rest contracts** so the client can't drift from the API: one
|
|
29
|
+
shared type definition feeds both sides.
|
|
30
|
+
- **TanStack Query hooks**, generated straight from the contracts.
|
|
31
|
+
- **A commit gate** (lefthook + commitlint) that blocks a broken build
|
|
32
|
+
from ever reaching your history.
|
|
44
33
|
|
|
45
|
-
|
|
46
|
-
by name, carrying `full-stack-app`'s own agents, skills, a pre-built
|
|
47
|
-
workspace, and the `hedgehog-core.yaml` manifest that names all three to
|
|
48
|
-
the engine. See the engine repo
|
|
49
|
-
([`skyf0xx/hedgehog`](https://github.com/skyf0xx/hedgehog)) and its
|
|
50
|
-
[`ARCHITECTURE.md`](https://github.com/skyf0xx/hedgehog/blob/master/ARCHITECTURE.md)
|
|
51
|
-
for how `init` resolves and fetches a core package — that mechanism lives
|
|
52
|
-
there, not here.
|
|
34
|
+
## Built for production backend work
|
|
53
35
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
on this package itself, bleeding project-build context into a repo where
|
|
59
|
-
no Hedgehog build ever runs — build guidance for a project using this
|
|
60
|
-
core lives in that project's own generated `CLAUDE.md`, never here.
|
|
36
|
+
Reach for this core when the project needs authorization beyond
|
|
37
|
+
per-object rules, background jobs, scheduled work, webhooks, or
|
|
38
|
+
server-rendered pages. These are the features that turn "add a database"
|
|
39
|
+
into an ongoing maintenance job.
|
|
61
40
|
|
|
62
|
-
|
|
63
|
-
scaffold a Hedgehog install copies into a project's repo root), an agent
|
|
64
|
-
under `agents/`, a skill under `skills/`, or the vendored asset set under
|
|
65
|
-
`vendor-skills/GSAP`. `scripts/regenerate-full-stack-app-core.sh` is the
|
|
66
|
-
deterministic generator that rebuilds `workspace/` from scratch — run it
|
|
67
|
-
by hand after bumping a workspace dependency, then diff the result before
|
|
68
|
-
committing. A change here is a release of this package, not of the
|
|
69
|
-
engine: bump `package.json`'s version, commit, and merge to `main` — this
|
|
70
|
-
repo's own `publish.yml` tags and publishes from there.
|
|
41
|
+
## Easy to install and use
|
|
71
42
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
43
|
+
Ask your agent:
|
|
44
|
+
*"Install Hedgehog and build me a [your app idea]"*
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary>For your agent</summary>
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
npx @skyf0xx/hedgehog init
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
npx @skyf0xx/hedgehog init --ts-full-stack-app
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Technical details: [ARCHITECTURE.md](ARCHITECTURE.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skyf0xx/hedgehog-core-full-stack-app",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Hedgehog's full-stack-app core: an Nx/pnpm/NestJS/Next.js workspace, backend-first domain module build discipline, and the agents and skills that drive it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -163,9 +163,14 @@ write — same treatment as an out-of-scope `apps/mobile`.
|
|
|
163
163
|
|
|
164
164
|
```bash
|
|
165
165
|
npx nx g @nx/js:lib packages/auth --bundler=none --unitTestRunner=vitest
|
|
166
|
-
pnpm add better-auth @thallesp/nestjs-better-auth
|
|
167
166
|
```
|
|
168
167
|
|
|
168
|
+
`better-auth` and `@thallesp/nestjs-better-auth` are already declared in
|
|
169
|
+
root `package.json` and resolved by `pnpm-lock.yaml` — the core ships
|
|
170
|
+
them, so there is nothing to install here. Don't run `pnpm add` for
|
|
171
|
+
either: an add resolves against npm at whatever is latest today, which
|
|
172
|
+
is the drift this core pins them to avoid.
|
|
173
|
+
|
|
169
174
|
Configure the Drizzle adapter against `packages/db`. Add
|
|
170
175
|
`BETTER_AUTH_SECRET: z.string().min(32)` to `packages/config/env.schema.ts`
|
|
171
176
|
now (it doesn't exist in the core schema `hedgehog-bootstrap-full-stack-app-core`
|
|
@@ -175,9 +180,10 @@ line reproduces the exact `loadEnv()` crash-on-boot that
|
|
|
175
180
|
`hedgehog-bootstrap-full-stack-app-core`'s `DATABASE_URL` entry exists to prevent, just
|
|
176
181
|
for this var instead. Tag: `scope:auth`, `type:adapter`.
|
|
177
182
|
|
|
178
|
-
Also wire the global auth guard on `apps/api`:
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
Also wire the global auth guard on `apps/api`: register the guard
|
|
184
|
+
(secure-by-default) against `packages/auth` — the root declaration
|
|
185
|
+
already resolves `@thallesp/nestjs-better-auth` for every project in the
|
|
186
|
+
workspace, so `apps/api` needs no add of its own. `apps/api`'s
|
|
181
187
|
`depConstraints` entry needs `scope:auth` added to its allowed
|
|
182
188
|
dependencies now — the one deliberate exception to "api reaches things
|
|
183
189
|
only through ports," since auth is cross-cutting infra, not a domain
|
|
@@ -195,9 +201,12 @@ skipped, say so plainly and move on — same treatment as an out-of-scope
|
|
|
195
201
|
|
|
196
202
|
```bash
|
|
197
203
|
npx nx g @nx/node:app apps/worker
|
|
198
|
-
pnpm add bullmq ioredis
|
|
199
204
|
```
|
|
200
205
|
|
|
206
|
+
`bullmq` and `ioredis` are already declared in root `package.json` and
|
|
207
|
+
resolved by `pnpm-lock.yaml` — same as Auth's packages above. Nothing to
|
|
208
|
+
install here; don't run `pnpm add` for either.
|
|
209
|
+
|
|
201
210
|
Add a `redis` service to the root `docker-compose.yml` that
|
|
202
211
|
`hedgehog-bootstrap-full-stack-app-core` landed (Postgres-only) and
|
|
203
212
|
`REDIS_URL: z.string().url()` to `packages/config/env.schema.ts` (it
|
|
@@ -235,12 +244,49 @@ Skip this step entirely if Mobile isn't on for this project (check
|
|
|
235
244
|
say so plainly and move on — same pattern as Auth (step 1) and Queue
|
|
236
245
|
(step 2) when their add-on is off.
|
|
237
246
|
|
|
247
|
+
Mobile's packages are pinned in `addon-versions.json` at the workspace
|
|
248
|
+
root, not named inline here and not declared in root `package.json` —
|
|
249
|
+
Expo pulls a native build matrix that has no business in a project that
|
|
250
|
+
never scaffolds `apps/mobile`. Read every version from that file rather
|
|
251
|
+
than typing one, so this step installs what the core was last gated
|
|
252
|
+
against:
|
|
253
|
+
|
|
238
254
|
```bash
|
|
255
|
+
NX_EXPO=$(node -p "require('./addon-versions.json').mobile['@nx/expo']")
|
|
256
|
+
NATIVEWIND=$(node -p "require('./addon-versions.json').mobile.nativewind")
|
|
257
|
+
RNR=$(node -p "require('./addon-versions.json').mobile['@react-native-reusables/cli']")
|
|
258
|
+
|
|
259
|
+
pnpm add -w -D "@nx/expo@$NX_EXPO"
|
|
260
|
+
pnpm add -w "nativewind@$NATIVEWIND"
|
|
261
|
+
|
|
239
262
|
npx nx g @nx/expo:app apps/mobile --unitTestRunner=jest
|
|
240
|
-
|
|
241
|
-
npx @react-native-reusables/cli
|
|
263
|
+
|
|
264
|
+
npx "@react-native-reusables/cli@$RNR" init
|
|
265
|
+
npx "@react-native-reusables/cli@$RNR" add button text
|
|
242
266
|
```
|
|
243
267
|
|
|
268
|
+
`-w` is required: this is a pnpm workspace, and an add without it fails
|
|
269
|
+
with `ERR_PNPM_ADDING_TO_ROOT` rather than installing.
|
|
270
|
+
|
|
271
|
+
`@nx/expo:app` generates `apps/mobile/src/test-setup.ts` with an untyped
|
|
272
|
+
`defineGlobal` helper, which is a `TS7006` error under the core's
|
|
273
|
+
`strict: true` base tsconfig — `mobile:typecheck` fails on a fresh
|
|
274
|
+
scaffold until it is annotated:
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
const defineGlobal = (name: string, value: unknown) => {
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Make that edit before the step's commit. `nx-migrate.yml`'s add-on gate
|
|
281
|
+
applies the same annotation, so the day `@nx/expo` ships the types both
|
|
282
|
+
stop being needed together.
|
|
283
|
+
|
|
284
|
+
`@nx/expo`'s pin is byte-identical to every other `@nx/*` entry in root
|
|
285
|
+
`package.json` — Nx requires its plugin matrix to be version-identical,
|
|
286
|
+
and a mismatch fails at generator time with a resolution error rather
|
|
287
|
+
than at install. If the pin and the `@nx/*` entries have drifted apart,
|
|
288
|
+
stop and fix `addon-versions.json` rather than installing anyway.
|
|
289
|
+
|
|
244
290
|
`@nx/expo:app`'s own default for `--unitTestRunner` is `none` — pass it
|
|
245
291
|
explicitly, or `apps/mobile` has no `test` target at all and the `screen`
|
|
246
292
|
layer's verify command below fails on a missing target rather than a
|
|
@@ -253,7 +299,7 @@ NativeWind and the `@/*` path alias into `apps/mobile/tsconfig.json`
|
|
|
253
299
|
named components' source into `apps/mobile/src/components/ui/`. `button`
|
|
254
300
|
and `text` are the two the `screen` generator's mobile output imports —
|
|
255
301
|
add any further components `front-end-eng` needs the same way, per
|
|
256
|
-
module, as it builds.
|
|
302
|
+
module, as it builds, at the same pinned CLI version.
|
|
257
303
|
|
|
258
304
|
Edit `init`'s generated theme (`tailwind.config.js` colors, light/dark)
|
|
259
305
|
to match `apps/web`'s base theme (landed by
|
|
@@ -355,6 +401,19 @@ time via `hedgehog next`/`hedgehog verify`, each its own commit.
|
|
|
355
401
|
(written by `planner` at planning intake) turns that add-on on — say so
|
|
356
402
|
plainly and skip otherwise, don't leave it ambiguous whether the step
|
|
357
403
|
was considered.
|
|
404
|
+
- A skipped Auth or Queue step leaves that add-on's packages declared but
|
|
405
|
+
unused, since the core ships them in root `package.json`. Delete the
|
|
406
|
+
skipped add-on's entries (`better-auth` and
|
|
407
|
+
`@thallesp/nestjs-better-auth` for Auth; `bullmq` and `ioredis` for
|
|
408
|
+
Queue) and re-run `pnpm install` so the lockfile drops them. Do this in
|
|
409
|
+
the same commit that records the skip. Mobile needs nothing — its
|
|
410
|
+
packages were never in the install to begin with.
|
|
411
|
+
- Never write a version number into a command in this file. Auth and
|
|
412
|
+
Queue versions come from root `package.json`; Mobile's come from
|
|
413
|
+
`addon-versions.json`. A version typed into a step is invisible to
|
|
414
|
+
`nx migrate`, to `pnpm outdated`, and to CI's add-on gate, so it drifts
|
|
415
|
+
silently in whichever direction the day's npm resolution happens to
|
|
416
|
+
take it.
|
|
358
417
|
- Don't add domain schema, contracts, or any `libs/<module>/*` content —
|
|
359
418
|
that's Phase A, started after Bootstrap, one module at a time.
|
|
360
419
|
- Don't deviate from the package/library choices above, for whichever
|
|
@@ -153,20 +153,42 @@ writes `docs/design/<module>.md`, not its own compiled layer — the
|
|
|
153
153
|
zero. `hedgehog ready` previews the same decision without claiming
|
|
154
154
|
anything — CLAIMABLE vs HELD BACK, with the reason for each holdback —
|
|
155
155
|
useful for understanding the scheduler before committing to a claim.
|
|
156
|
-
2. **
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
156
|
+
2. **For each claimed packet, decide inline vs. dispatch, then act.**
|
|
157
|
+
Default to dispatching to its own subagent — `backend-eng` (Phase A)
|
|
158
|
+
or `front-end-eng` (Phase B), matching the packet's ALLOWED SCOPE —
|
|
159
|
+
in ONE message with parallel tool calls, not one agent call after
|
|
160
|
+
another. This is a Claude session orchestrating via the Agent tool's
|
|
161
|
+
parallel-call mechanism: N claimed tasks dispatched this way means N
|
|
162
|
+
Agent calls in the same message. Build or confirm the packet
|
|
163
|
+
directly instead, with no subagent, only when the packet clears one
|
|
164
|
+
of these from the packet alone:
|
|
165
|
+
- **ALLOWED SCOPE** names a small, bounded set of files the
|
|
166
|
+
orchestrator can read directly without ballooning its own context.
|
|
167
|
+
- **RELEVANT RULES or the module name** make the layer's irrelevance
|
|
168
|
+
checkable in one read — the task's own rules describe a concern
|
|
169
|
+
that plainly doesn't touch this layer's area.
|
|
170
|
+
- The change, once its shape is known, is small and mechanical — a
|
|
171
|
+
rename, an import fix, a one-line registration — rather than
|
|
172
|
+
something needing a subagent's isolated, fresh-context judgment.
|
|
173
|
+
|
|
174
|
+
Escalate to a full `backend-eng`/`front-end-eng` dispatch mid-layer
|
|
175
|
+
the moment any of these turns out false — a "quick check" that
|
|
176
|
+
surfaces real cross-file reasoning, an unclear scope, or a diff
|
|
177
|
+
bigger than expected. Never lock in "inline" once guessed. Either
|
|
178
|
+
way, the layer's own VERIFICATION command and ALLOWED SCOPE gate
|
|
179
|
+
apply identically in step 4 — this choice changes who reads, writes,
|
|
180
|
+
and checks, never what gets checked before it's accepted. A no-op
|
|
181
|
+
found inline is still reported per the packet's HONESTY rules, never
|
|
182
|
+
assumed. If a dispatch by name reports the agent as not found —
|
|
183
|
+
expected right after `init`/`update` installed it this same
|
|
163
184
|
session — see root CLAUDE.md's "Delegating on this host" note rather
|
|
164
185
|
than treating it as fatal.
|
|
165
|
-
3.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
186
|
+
3. Whoever built the packet — the dispatched agent, or the orchestrator
|
|
187
|
+
itself when it went inline — **runs typecheck/lint/test on that
|
|
188
|
+
work** (mirrors lefthook, wired at bootstrap) as a sanity check
|
|
189
|
+
before reporting back — necessary, not sufficient. Per task: the
|
|
190
|
+
work is reported as done; the task is not moved and nothing is
|
|
191
|
+
committed yet.
|
|
170
192
|
4. **As each report arrives, verify it — one at a time, serially.** Run
|
|
171
193
|
`hedgehog verify <task-id> --owner <owner>` (the same owner that
|
|
172
194
|
claimed it; verify requires the lease owner). Building happens in
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": [
|
|
3
|
+
"Pinned versions for the Mobile add-on's packages, which are NOT declared in",
|
|
4
|
+
"workspace/package.json. Expo pulls a native build matrix (Metro, the",
|
|
5
|
+
"React Native toolchain, the @react-native-reusables CLI's own tree) that",
|
|
6
|
+
"every consuming project would otherwise install whether or not it ever",
|
|
7
|
+
"scaffolds apps/mobile. Declaring them here keeps the version a tracked,",
|
|
8
|
+
"tool-visible fact — nx-migrate.yml's add-on gate scaffolds against these",
|
|
9
|
+
"pins every Monday, and a bump is a reviewable diff — without putting the",
|
|
10
|
+
"matrix in the default install.",
|
|
11
|
+
"",
|
|
12
|
+
"Auth and Queue packages are NOT here: they are plain Node dependencies with",
|
|
13
|
+
"no native matrix, so they are declared in workspace/package.json and",
|
|
14
|
+
"resolved by pnpm-lock.yaml like every other core dependency.",
|
|
15
|
+
"",
|
|
16
|
+
"@nx/expo must stay byte-identical to every other @nx/* entry in",
|
|
17
|
+
"workspace/package.json — Nx requires its plugin matrix to be version-",
|
|
18
|
+
"identical, and a mismatch fails at generator time, not install time.",
|
|
19
|
+
"nx-migrate.yml's add-on gate asserts that equality before it scaffolds.",
|
|
20
|
+
"",
|
|
21
|
+
"nativewind stays on 4.x: 5.x, the line that targets Tailwind v4, is still",
|
|
22
|
+
"a preview release. 4.x declares a `tailwindcss@~3` peer (through",
|
|
23
|
+
"react-native-css-interop) against the v4 that apps/web pins, which the",
|
|
24
|
+
"`react-native-css-interop>tailwindcss` peerDependencyRules entry in",
|
|
25
|
+
"package.json accepts — apps/mobile carries its own NativeWind-side Tailwind",
|
|
26
|
+
"config, written by the @react-native-reusables CLI's init, so the two",
|
|
27
|
+
"never share a config. Revisit both when nativewind 5 goes stable.",
|
|
28
|
+
"",
|
|
29
|
+
"@react-native-reusables/cli is a scaffolder, not a runtime dependency — it",
|
|
30
|
+
"copies component source into apps/mobile and is never installed. Pinning it",
|
|
31
|
+
"is what stops `npx @react-native-reusables/cli@latest` from resolving to a",
|
|
32
|
+
"different generator on every Bootstrap run."
|
|
33
|
+
],
|
|
34
|
+
"mobile": {
|
|
35
|
+
"@nx/expo": "23.1.2",
|
|
36
|
+
"nativewind": "4.2.6",
|
|
37
|
+
"@react-native-reusables/cli": "0.7.1"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -46,11 +46,23 @@
|
|
|
46
46
|
"executor": "@nx/js:prune-lockfile",
|
|
47
47
|
"outputs": [
|
|
48
48
|
"{workspaceRoot}/apps/api/dist/package.json",
|
|
49
|
-
"{workspaceRoot}/apps/api/dist/pnpm-lock.yaml"
|
|
49
|
+
"{workspaceRoot}/apps/api/dist/pnpm-lock.yaml",
|
|
50
|
+
"{workspaceRoot}/apps/api/dist/pnpm-workspace.yaml",
|
|
51
|
+
"{workspaceRoot}/apps/api/dist/patches",
|
|
52
|
+
"{workspaceRoot}/apps/api/dist/local_path_modules"
|
|
50
53
|
],
|
|
51
54
|
"options": {
|
|
52
55
|
"buildTarget": "build"
|
|
53
|
-
}
|
|
56
|
+
},
|
|
57
|
+
"inputs": [
|
|
58
|
+
"default",
|
|
59
|
+
"^default",
|
|
60
|
+
"{workspaceRoot}/pnpm-workspace.yaml",
|
|
61
|
+
"{workspaceRoot}/package.json",
|
|
62
|
+
{
|
|
63
|
+
"runtime": "node -e \"try{console.log('pnpm major '+require('child_process').execSync('pnpm --version',{stdio:['ignore','pipe','ignore']}).toString().trim().split('.')[0])}catch{console.log('pnpm major unavailable')}\""
|
|
64
|
+
}
|
|
65
|
+
]
|
|
54
66
|
},
|
|
55
67
|
"copy-workspace-modules": {
|
|
56
68
|
"dependsOn": [
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- BEGIN:nextjs-agent-rules -->
|
|
2
|
+
|
|
3
|
+
# This is NOT the Next.js you know
|
|
4
|
+
|
|
5
|
+
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.
|
|
6
|
+
|
|
7
|
+
This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
|
|
8
|
+
|
|
9
|
+
<!-- END:nextjs-agent-rules -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="next" />
|
|
2
2
|
/// <reference types="next/image-types/global" />
|
|
3
|
-
import "./.next/types/routes.d.ts";
|
|
4
|
-
import "./.next/types/root-params.d.ts";
|
|
3
|
+
import "./.next/dev/types/routes.d.ts";
|
|
4
|
+
import "./.next/dev/types/root-params.d.ts";
|
|
5
5
|
|
|
6
6
|
// NOTE: This file should not be edited
|
|
7
7
|
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
package/workspace/package.json
CHANGED
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
"@nestjs/schematics": "^11.0.0",
|
|
15
15
|
"@nestjs/testing": "^11.0.0",
|
|
16
16
|
"@next/eslint-plugin-next": "^16.1.6",
|
|
17
|
-
"@nx/devkit": "23.
|
|
18
|
-
"@nx/eslint": "23.
|
|
19
|
-
"@nx/eslint-plugin": "23.
|
|
20
|
-
"@nx/js": "23.
|
|
21
|
-
"@nx/nest": "23.
|
|
22
|
-
"@nx/next": "23.
|
|
23
|
-
"@nx/node": "23.
|
|
24
|
-
"@nx/playwright": "23.
|
|
25
|
-
"@nx/vitest": "23.
|
|
26
|
-
"@nx/web": "23.
|
|
27
|
-
"@nx/webpack": "23.
|
|
17
|
+
"@nx/devkit": "23.2.0",
|
|
18
|
+
"@nx/eslint": "23.2.0",
|
|
19
|
+
"@nx/eslint-plugin": "23.2.0",
|
|
20
|
+
"@nx/js": "23.2.0",
|
|
21
|
+
"@nx/nest": "23.2.0",
|
|
22
|
+
"@nx/next": "23.2.0",
|
|
23
|
+
"@nx/node": "23.2.0",
|
|
24
|
+
"@nx/playwright": "23.2.0",
|
|
25
|
+
"@nx/vitest": "23.2.0",
|
|
26
|
+
"@nx/web": "23.2.0",
|
|
27
|
+
"@nx/webpack": "23.2.0",
|
|
28
28
|
"@playwright/test": "^1.37.0",
|
|
29
29
|
"@swc-node/register": "~1.11.1",
|
|
30
30
|
"@swc/cli": "~0.8.1",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
53
53
|
"jsdom": "^30.0.1",
|
|
54
54
|
"lefthook": "^2.1.10",
|
|
55
|
-
"nx": "23.
|
|
55
|
+
"nx": "23.2.0",
|
|
56
56
|
"prettier": "~3.6.2",
|
|
57
57
|
"tslib": "^2.3.0",
|
|
58
58
|
"typescript": "~6.0.3",
|
|
@@ -67,8 +67,12 @@
|
|
|
67
67
|
"@nestjs/common": "^11.0.0",
|
|
68
68
|
"@nestjs/core": "^11.0.0",
|
|
69
69
|
"@nestjs/platform-express": "^11.0.0",
|
|
70
|
+
"@thallesp/nestjs-better-auth": "^2.7.0",
|
|
70
71
|
"axios": "^1.18.0",
|
|
72
|
+
"better-auth": "^1.7.2",
|
|
73
|
+
"bullmq": "^6.3.4",
|
|
71
74
|
"drizzle-orm": "^0.45.2",
|
|
75
|
+
"ioredis": "^6.0.0",
|
|
72
76
|
"nestjs-pino": "^4.6.1",
|
|
73
77
|
"next": "~16.3.0",
|
|
74
78
|
"pg": "^8.22.0",
|
|
@@ -88,11 +92,12 @@
|
|
|
88
92
|
"eslint-plugin-import>eslint": "10",
|
|
89
93
|
"eslint-plugin-jsx-a11y>eslint": "10",
|
|
90
94
|
"eslint-plugin-react>eslint": "10",
|
|
91
|
-
"@exodus/bytes>@noble/hashes": "1"
|
|
95
|
+
"@exodus/bytes>@noble/hashes": "1",
|
|
96
|
+
"react-native-css-interop>tailwindcss": "4"
|
|
92
97
|
}
|
|
93
98
|
},
|
|
94
99
|
"overrides": {
|
|
95
|
-
"@nx/module-federation": "23.
|
|
100
|
+
"@nx/module-federation": "23.2.0",
|
|
96
101
|
"esbuild": "0.25.12",
|
|
97
102
|
"axios": "^1.18.0",
|
|
98
103
|
"brace-expansion@1": "^1.1.18",
|