9b6684c653
Mount plugin routes via the router (todo §2); match method+path under /<id>, resolve :params, permission gate, RouteResult→response
lilleman2026-06-16 12:22:15 +02:00
ca3f6ba8ce
Discover plugins at boot (todo §2); scan plugins/, import + validate each plugin.ts default export, fail loud on bad plugin/conflict
lilleman2026-06-16 12:11:04 +02:00
0ebe8144c2
Document how plugins get into the container (README); bind-mount to /app/plugins/<id> or bake in, front-and-center under Building a plugin
lilleman2026-06-16 11:58:28 +02:00
09d616ddd3
Loosen plugin id rule (todo §2); allow digits and dashes anywhere (^[a-z0-9-]+$)
lilleman2026-06-16 11:53:14 +02:00
1623a81ddc
Refine plugin contract (todo §2); derive id/mount from folder (isValidPluginId), apiVersion literal not HOST_API_VERSION, nav icon = Lucide, drop redundant basePath
lilleman2026-06-16 10:58:29 +02:00
a0d39ef624
Make checkApiVersion semver-based (todo §2); strict parseSemver via official semver regex (no dep), major/minor compatibility rules
lilleman2026-06-16 10:46:02 +02:00
3be67ff8e4
Specify the plugin contract (todo §2); typed manifest + version/conflict rules in src/plugin.ts, authoritative docs/plugin-contract.md
lilleman2026-06-15 17:07:55 +02:00
6f590148af
Add dockerized Playwright E2E (todo §1); screenshot live pages + foundation mockups, assert shared design-system styles match
lilleman2026-06-15 16:37:21 +02:00
947851b4ff
Replace placeholder index with the app-shell People dashboard (todo §1); wire parseListQuery/paginate/composeNav + partials into a real zero-JS list page
lilleman2026-06-15 15:57:42 +02:00
c06429e4d5
Add paginate helper (todo §1); page model with row window + ellipsis sequence for pagination.ejs, clamped/guarded inputs
lilleman2026-06-15 13:50:15 +02:00
20f49c1df7
Add parseListQuery helper (todo §1); read a list URL into { q, filters, sort, page, pageSize }, defaults+clamp, zero-throw
lilleman2026-06-15 13:38:34 +02:00
c2bcce9845
Add composeNav helper (todo §1); merge plugin nav fragments + central override (rename/group/order/hide), role-filter to a nav-tree model
lilleman2026-06-15 13:33:54 +02:00