platform-main — project dependency graph

5 Helpdesk projects, and exactly which modules each one uses — read from every import, not guessed.

The Helpdesk app is where the 13 modules do real work together. This page shows how its five projects depend on each other and on the modules: only the Angular app reaches into NgRx, it shares only a contract of types and rules with the API (its in-browser demo also reuses the back end's services), and the end-to-end suite stands on top of both. Every edge below was counted from the projects' own import statements on 2026-10-10. The module dependency graph shows how the modules depend on each other.

Dependency Diagram

helpdesk-e2ePlaywright · imports the contract · Nx runs it after the app and the API
↓ drives both in a real browser
Front end helpdeskAngular app · ECharts · PGlite for the demo
Back end helpdesk-apiNestJS · JWT · pg ↓ uses its services helpdesk-serverservices · Drizzle schema · seed
↓ all four import the shared contract
helpdesk-contracttypes and rules both sides share · imports nothing
The NgRx modules below are imported only by helpdesk, the front end above, not by the contract or the back end: 10 runtime modules in its code, 2 tooling modules without an import
store signals operators component component-store effects entity router-store store-devtools data eslint-plugin schematics
Module colors follow their tier in the module dependency graph · dashed: used without an import

Exactly Who Imports What

Dependency helpdesk helpdesk-api helpdesk-server helpdesk-contract helpdesk-e2e
Helpdesk projects
@helpdesk/contract ✓ ✓ ✓ — ✓
@helpdesk/server demo only ✓ — — —
NgRx runtime modules
@ngrx/store ✓ + testing in specs — — — —
@ngrx/effects ✓ + testing in specs — — — —
@ngrx/signals ✓ + rxjs-interop, entities — — — —
@ngrx/operators ✓ — — — —
@ngrx/data ✓ — — — —
@ngrx/component ✓ — — — —
@ngrx/store-devtools ✓ — — — —
@ngrx/router-store ✓ — — — —
@ngrx/entity ✓ — — — —
@ngrx/component-store ✓ — — — —
NgRx tooling, used without an import
@ngrx/eslint-plugin lint config — — — —
@ngrx/schematics generated code — — — —

What Each Project Is

helpdesk

  • The Angular app: a page per role, reports, live updates, sounds
  • The only project that imports NgRx: a signal store per page, the NgRx store and effects for the session, landing page and router state
  • Its in-browser demo imports helpdesk-server's real services and runs them against PGlite, with no server at all

helpdesk-api

  • NestJS: sign-in with a JWT cookie and role guards
  • One module per feature; each controller hands the work to helpdesk-server
  • Shares nothing with the app except the contract

helpdesk-server

  • The services, the Drizzle schema and migrations, and the seed data
  • No HTTP of its own, which is why the same code also runs in the browser for the demo

helpdesk-contract

  • Tickets, roles, the ticket workflow, live events and report shapes
  • Imports nothing at all, so every other project can depend on it without pulling anything else in

helpdesk-e2e

  • Playwright tests against the real Docker Compose stack, run on every pull request
  • Imports only the contract's types; Nx's implicit dependencies make it run after helpdesk and helpdesk-api
How these edges were found: every @ngrx/* and @helpdesk/* import in each project's source, with specs counted separately (that is where store/testing and effects/testing appear). The two tooling modules show up nowhere in the code: eslint-plugin is loaded by the app's eslint.config.mjs, and schematics generated the landing page's state once (nx g @ngrx/schematics:entity). Three pieces planned for the app were never needed and aren't imported: concatLatestFrom, router-store/data-persistence and signals events.