The base/overlay model
How to maintain many apps without copy-pasting fixes across them.
If you ship one app, none of this matters. If you ship many — and every serious builder eventually does — you need a way to fix things once and propagate.
Three layers
Layer 1: `@workiq/*` packages. The shared runtime, API factory, access control, edge front-door, UI kit. You edit these once, every app inherits the fix.
Layer 2: base-overlay files. Per-app but base-owned — the app.ts factory, the worker entry, the Makefile. Listed in `.workiq/manifest.json`. Kept in sync via `make sync-pull` (pull upstream fixes) and `make sync-push` (promote a fix back).
Layer 3: app-owned files. Only these change day-to-day: schema, routes, pages, tests. Everything else you don't touch.
What this feels like
Building on top means editing Layer 3. Fixing something for all apps means editing Layer 1 or `sync-push`-ing from Layer 2. Maintaining the base means the packages plus the template.