Files
ehoandClaude Sonnet 5 e7156c5132 feat(WP-67): merge behandelportal into this repo as a monorepo
Restructures into apps/ssp + apps/behandelportal (two Angular projects)
plus libs/shared + libs/beheer (cross-app libraries), replacing WP-61's
separate sibling repo. That split had already produced real drift: a
hand-vendored copy of the backend's OpenAPI doc, a shared/ui+layout tree
forked and silently diverging (7 files), and beheer + the styles.scss
token bridge duplicated byte-for-byte across both repos.

- git mv the SSP's src/app/* into apps/ssp/; fold shared/, beheer/,
  environments/, the Storybook docs/*.mdx, and styles.scss into
  libs/shared + libs/beheer (all confirmed identical between the two
  repos before merging). auth stays deliberately duplicated per
  ADR-0002 (actor-specific, expected to diverge) - amended there.
- One generated API client (libs/shared), no more vendored swagger.json.
- .dependency-cruiser split into a base factory + one config per app,
  and Storybook into .storybook-ssp/.storybook-behandelportal - both
  forced by the @auth/* alias resolving to different directories per app.
- SiteHeaderComponent/ShellComponent gained HEADER_NAV_ITEMS/
  HEADER_ADMIN_LINKS/DEBUG_PANEL injection tokens so each app supplies
  its own nav/admin-links/dev-panel instead of one being hardcoded.
- CLAUDE.md, ARCHITECTURE.md, dependencies.md, and ADR-0002 updated;
  WP-67 backlog entry documents the full decision trail.

npm run ci green (lint, dep:check x2, 360 tests across ssp/
behandelportal/shared/beheer, both localized builds, backend tests,
snippet + api-client drift); both dev servers, both Storybook
instances, and docker compose verified working.

The old sibling repo (/home/eho/repos/behandelportal) is left
untouched, not deleted.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 21:01:57 +02:00

5.2 KiB
Raw Permalink Blame History

Dependency graph

Generated by npm run dep:graph — do not edit by hand. Nodes are context × atomic layer (apps/<app>/src/app/<context>/<layer> or libs/<lib>/src/<layer>); edges are real imports. The allowed edges are enforced by npm run dep:check (dependency-cruiser, one config per app — see dependencies.md).

ssp

flowchart LR

subgraph 0["apps"]
subgraph 1["ssp"]
subgraph 2["src"]
subgraph 3["app"]
4["app.config.ts"]
5["app.routes.ts"]
6["app.ts"]
7["auth"]
8["brief"]
9["herregistratie"]
A["registratie"]
B["shell"]
C["showcase"]
end
D["main.ts"]
end
end
end
subgraph E["libs"]
subgraph F["beheer"]
subgraph G["src"]
H["application"]
I["contracts"]
J["domain"]
K["infrastructure"]
L["test-entry.ts"]
M["ui"]
end
end
subgraph N["shared"]
subgraph O["src"]
P["application"]
Q["domain"]
R["environments"]
S["infrastructure"]
T["kernel"]
U["layout"]
V["test-entry.ts"]
W["ui"]
X["upload"]
end
end
end
subgraph Y["node_modules"]
subgraph Z["@angular"]
subgraph 10["common"]
subgraph 11["fesm2022"]
12["common.mjs"]
13["http.mjs"]
end
subgraph 14["locales"]
15["en.js"]
16["nl.js"]
end
end
subgraph 17["core"]
subgraph 18["fesm2022"]
19["core.mjs"]
1A["rxjs-interop.mjs"]
1B["testing.mjs"]
end
end
subgraph 1C["forms"]
subgraph 1D["fesm2022"]
1E["forms.mjs"]
end
end
subgraph 1F["localize"]
subgraph 1G["fesm2022"]
1H["localize.mjs"]
end
end
subgraph 1I["platform-browser"]
subgraph 1J["fesm2022"]
1K["platform-browser.mjs"]
end
end
subgraph 1L["router"]
subgraph 1M["fesm2022"]
1N["router.mjs"]
end
end
end
subgraph 1O["@storybook"]
subgraph 1P["angular"]
subgraph 1Q["dist"]
1R["index.js"]
end
end
end
subgraph 1S["rxjs"]
subgraph 1T["dist"]
subgraph 1U["cjs"]
1V["index.js"]
subgraph 1W["operators"]
1X["index.js"]
end
end
end
end
subgraph 1Y["storybook"]
subgraph 1Z["dist"]
subgraph 20["test"]
21["index.js"]
end
end
end
subgraph 22["vitest"]
subgraph 23["dist"]
24["index.js"]
end
end
end
4-->5
4-->B
4-->12
4-->13
4-->15
4-->16
4-->19
4-->1N
4-->7
4-->P
4-->S
4-->U
5-->C
5-->1N
5-->7
5-->M
5-->8
5-->9
5-->A
5-->P
5-->U
6-->19
6-->1N
7-->19
7-->1N
7-->P
7-->Q
7-->T
7-->U
7-->W
7-->1E
7-->1B
7-->24
7-->1R
8-->19
8-->U
8-->W
8-->P
8-->T
8-->X
8-->S
8-->R
8-->1E
8-->12
8-->1B
8-->24
8-->1R
9-->19
9-->1E
9-->A
9-->P
9-->T
9-->U
9-->W
9-->X
9-->S
9-->24
9-->13
9-->1R
9-->1B
A-->T
A-->19
A-->P
A-->S
A-->1N
A-->12
A-->W
A-->U
A-->B
A-->Q
A-->1E
A-->X
A-->1B
A-->24
A-->1R
A-->13
B-->Q
B-->U
B-->12
B-->19
B-->7
B-->A
B-->P
B-->S
B-->T
B-->1R
C-->19
C-->1E
C-->9
C-->A
C-->T
C-->U
C-->W
C-->24
D-->6
D-->4
D-->1H
D-->1K
H-->19
H-->J
H-->K
H-->P
H-->1B
H-->T
H-->24
J-->T
J-->24
K-->19
K-->J
K-->S
K-->T
K-->P
K-->24
M-->12
M-->19
M-->H
M-->P
M-->U
M-->W
M-->J
M-->1R
P-->19
P-->T
P-->1N
P-->S
P-->1A
P-->Q
P-->1V
P-->24
P-->1B
S-->13
S-->19
S-->R
S-->1V
S-->Q
S-->T
S-->1X
S-->24
T-->24
U-->19
U-->1E
U-->W
U-->Q
U-->12
U-->1N
U-->1A
U-->1V
U-->P
U-->1X
U-->1R
U-->24
W-->19
W-->1E
W-->X
W-->12
W-->1N
W-->P
W-->T
W-->1R
W-->21
W-->24
X-->T
X-->19
X-->P
X-->S
X-->R
X-->24

behandelportal

flowchart LR

subgraph 0["apps"]
subgraph 1["behandelportal"]
subgraph 2["src"]
subgraph 3["app"]
4["app.config.ts"]
5["app.routes.ts"]
6["app.ts"]
7["auth"]
8["behandeling"]
9["shell"]
end
A["main.ts"]
end
end
end
subgraph B["libs"]
subgraph C["beheer"]
subgraph D["src"]
E["application"]
F["contracts"]
G["domain"]
H["infrastructure"]
I["test-entry.ts"]
J["ui"]
end
end
subgraph K["shared"]
subgraph L["src"]
M["application"]
N["domain"]
O["environments"]
P["infrastructure"]
Q["kernel"]
R["layout"]
S["test-entry.ts"]
T["ui"]
U["upload"]
end
end
end
subgraph V["node_modules"]
subgraph W["@angular"]
subgraph X["common"]
subgraph Y["fesm2022"]
Z["common.mjs"]
10["http.mjs"]
end
subgraph 11["locales"]
12["en.js"]
13["nl.js"]
end
end
subgraph 14["core"]
subgraph 15["fesm2022"]
16["core.mjs"]
17["rxjs-interop.mjs"]
18["testing.mjs"]
end
end
subgraph 19["forms"]
subgraph 1A["fesm2022"]
1B["forms.mjs"]
end
end
subgraph 1C["localize"]
subgraph 1D["fesm2022"]
1E["localize.mjs"]
end
end
subgraph 1F["platform-browser"]
subgraph 1G["fesm2022"]
1H["platform-browser.mjs"]
end
end
subgraph 1I["router"]
subgraph 1J["fesm2022"]
1K["router.mjs"]
end
end
end
subgraph 1L["@storybook"]
subgraph 1M["angular"]
subgraph 1N["dist"]
1O["index.js"]
end
end
end
subgraph 1P["rxjs"]
subgraph 1Q["dist"]
subgraph 1R["cjs"]
1S["index.js"]
subgraph 1T["operators"]
1U["index.js"]
end
end
end
end
subgraph 1V["storybook"]
subgraph 1W["dist"]
subgraph 1X["test"]
1Y["index.js"]
end
end
end
subgraph 1Z["vitest"]
subgraph 20["dist"]
21["index.js"]
end
end
end
4-->5
4-->9
4-->Z
4-->10
4-->12
4-->13
4-->16
4-->1K
4-->7
4-->M
4-->P
4-->R
5-->1K
5-->7
5-->8
5-->J
5-->R
6-->16
6-->1K
7-->16
7-->1K
7-->M
7-->N
7-->Q
7-->R
7-->T
7-->1B
7-->18
7-->21
7-->1O
8-->16
8-->R
9-->R
A-->6
A-->4
A-->1E
A-->1H
E-->16
E-->G
E-->H
E-->M
E-->18
E-->Q
E-->21
G-->Q
G-->21
H-->16
H-->G
H-->P
H-->Q
H-->M
H-->21
J-->Z
J-->16
J-->E
J-->M
J-->R
J-->T
J-->G
J-->1O
M-->16
M-->17
M-->N
M-->P
M-->1S
M-->Q
M-->1K
M-->21
M-->18
P-->16
P-->N
P-->Q
P-->10
P-->O
P-->1S
P-->1U
P-->21
Q-->21
R-->16
R-->T
R-->Z
R-->1K
R-->17
R-->1S
R-->M
R-->1U
R-->N
R-->1O
R-->21
R-->1B
T-->16
T-->1B
T-->Z
T-->1K
T-->M
T-->1O
T-->1Y
T-->Q
T-->21
T-->U
U-->Q
U-->16
U-->M
U-->P
U-->O
U-->21