Appearance
Make it yours
The kit ships as the fictional product Acme Tasks so every screen has coherent copy. Making it yours is a short, documented list — the full version lives in the repository (docs/CUSTOMIZING.md); this page is the map.
The one-hour rebrand
- Name — three documented places:
web/src/config.ts(the SPA),web/index.html(the title),APP_NAMEin.env(emails, sender). - Landing —
web/src/views/HomeView.vueis deliberately plain: a heading, a way in, the legal links. Replace thelanding.*i18n keys or the whole view; the e2e asserts structure, not copy, so your rebrand does not break the suite. - Colors & logo — Tailwind theme in
web/src/assets/, favicon inweb/public/. - Legal pages — structured placeholders with
[BRACKETED]fields to fill; honest about not being legal advice. - Emails — plain-text templates in
internal/email/templates/{en,fr}/. A parity test fails the build if a locale misses one.
Plans and pricing
Plans are configuration, not database rows: the BILLING_PLANS JSON maps your Stripe price IDs to named plans, and one endpoint feeds every pricing surface. Empty means the deployment sells nothing — no dead buttons. Details: Stripe.
Adding your own business resource
Read the ten-minute tour first — it walks the exact chain on a live request. Then, in build order:
- a migration with
organization_id … REFERENCES organizations (id) ON DELETE CASCADE, portable SQL only; - queries in
internal/db/queries/that all filter by organization —make sqlc; - a handler: decode, validate, delegate, map errors;
- routes under the org router,
RequireOrgRoleon what only admins do; - a Pinia store and a view;
- integration tests asserting CRUD, RBAC and a cross-tenant 404.
Step 6 is not optional: row-level tenancy holds because every query filters by organization, and the test is what keeps it true after the next edit.
Tenancy flavour
ORG_MODE=multi (B2B teams, the default) or ORG_MODE=solo (B2C: one personal organization per user, created at signup; team UI hidden, org creation and invitations refused server-side). Pick at launch — switching later is not retroactive.