Package Graph
Every @uploz/* workspace package and the workspace:* edges between them, transcribed from the manifests. An arrow points from a package to the dependency it relies on, so the graph flows foundation → domain / platform → apps. Columns are placed by the validation-engine's topologicalOrder — same engine the platform uses to order event dependencies.
13
Workspace packages
29
Internal edges
10
Libraries
3
Deployable apps
Dependency flow
Layered left to right by longest prerequisite chain. Leaf foundation packages sit on the left; the apps that consume everything sit on the right.
Package roster
@uploz/config is the most-depended-on package (12 internal dependents) — change it and the blast radius is widest.
Shared tsconfig / lint / build config. The root every package extends.
12 internal dependents.
Canonical enums + DB-mirroring types. The contract the whole tree shares.
9 internal dependents.
Pure, zero-IO gate / readiness / critical-path engine.
1 internal dependent.
Zod request/response schemas at the API boundary.
No internal dependents (leaf consumer).
Design-system primitives + signature components (this graph reuses them).
2 internal dependents.
Typed Supabase client + generated row types.
2 internal dependents.
Prisma client (types-only; Supabase CLI owns the schema, R5).
No internal dependents (leaf consumer).
Email + Web Push delivery adapters.
1 internal dependent.
Structured logging / tracing helpers.
2 internal dependents.
Shared test fixtures + builders.
No internal dependents (leaf consumer).
The operator-facing Next.js app (mission control).
No internal dependents (leaf consumer).
pg-boss background worker (escalation timers, notifications).
No internal dependents (leaf consumer).
This cockpit — internal project-tracking dashboard.
No internal dependents (leaf consumer).
Illustrative dataset transcribed from each package.json (third-party deps omitted). The layered layout is derived live by the engine's topologicalOrder; if the workspace ever introduced a cycle, this view would say so instead of drawing an undefined layout.