Product seams, one-machine serving and settings in a dialog
What the first product built on the kit asked for. More of the places your product plugs in are
files of its own, so code that used to edit a kit file stops conflicting with releases. Start with
Breaking in CHANGELOG.md: a development API listens on loopback alone, apps/api’s start
script reads no .env, settings pages lost their layouts, and the job registry’s exports are
functions. One migration, for the job queue.
- More product files. Raw HTTP routes and their body limits, environment variables, CSP sources, a step when a session ends, at shutdown and at sign-out, commands in the palette, sections of the settings dialog, copy for your contract’s refusals, your dependencies, licence notices, decisions, the API image’s Debian packages and seed data each have a file the kit never changes. So do worker loops, procedures a public demo refuses, organization roles of your own and which workspaces a member sees.
bun run serve. The whole app on one machine without Docker, behind one origin thattailscale servepublishes to your devices, and a desktop or mobile shell that asks which server to use, so one installer serves every deployment.- Visitors, not addresses. The procedure limiter counts people once it knows who is calling, and the web server signs each visitor’s address for the API, so rate limits and sign-in checks count the visitor rather than the web container.
- Deployments. Close sign-up (an invitee still gets in), run production with email in the API’s
log, answer sessions from a signed cookie, and cap teams per organization with
MAX_TEAMS. A deploy stops your own database writers while it migrates. - Database. Id lists that stay fast under stale statistics, transactions that retry after a
deadlock, indexes built without blocking writes,
db:generate --checkand--undo, time zones Postgres can read, and LISTEN that survives a dropped connection. - Jobs. Priorities, a dedupe key, bulk enqueue, a time budget per kind, progress, and leases that let the sweep take back only a dead worker’s jobs. A job queued anywhere wakes every worker, and a stopping worker gives its jobs back.
- The app. The sidebar holds the app and a dialog over the page holds its settings. The
organization’s name opens a menu that switches organizations, and its workspaces are listed under
the navigation.
@repo/uigains a slider, toggle groups, a context menu, resizable panes, a drawer a swipe closes and touch gestures. - Tests. Database suites claim their ids and sweep what an interrupted run left,
test:db:allruns every one,test:e2e:fullruns signed-in browser suites against the real API, component specs run in WebKit too, andsmoke:desktopruns the shell against a stub API. - Fixed.
- Images the API serves render on another origin, and no page reports a CSP violation.
- A first visit no longer offers an update, and a rate-limited session lookup no longer signs anyone out.
- An invitee without an account arrives at the invitation after signing up.
- An expired invitation stops holding a seat on a database that does not run UTC.
- Security and dependencies.
- vite 8.3.4 for three advisories in its editor launcher.
- Hono 4.13.13 and certifi 2026.10.19.
- Every other dependency moves to its newest release in range, Tauri 2.12 among them.