- AuthenticationFree + Full
- Email and password with verification, password reset, change email and account deletion. GitHub and Google sign-in switch on when their credentials are set, and a private deployment can close sign-up.
- Two-factor and passkeysFree + Full
- TOTP with backup codes, WebAuthn passkeys, and a session list users can revoke from.
- Getting-started checklistFree + Full
- The app's home page lists what a new account still needs: verify the email address, add a passkey or two-factor. A step ticks itself once it is true, and the list goes away when all are done. The full edition adds creating a workspace and inviting a teammate.
- Admin surfaceFree + Full
- Users, feature flags and a system page, behind a role the API enforces. Admins ban and unban accounts, revoke sessions, and can sign in as a user for an hour to help them.
- One typed APIFree + Full
- Hono and oRPC over Postgres and Drizzle. One contract is the source of truth for the RPC client, plain REST under /api/v1 and an OpenAPI 3.1 document, which the docs app renders as an interactive reference. TypeScript clients use its types without generated client code.
- Product files and migrationsFree + Full
- Your tables, contract, procedures, raw HTTP routes, emails, environment variables, messages, sidebar links, commands and settings sections go in product files the kit never changes, and your dependencies in packages of their own. Your migrations keep a history of their own, so a kit release that adds a migration no longer conflicts with yours. Your product keeps its own version number too.
- InternationalizationFree + Full
- English and German, compiled per message. Users switch language in Settings, and verification, password-reset, email-change and account-deletion emails arrive in the language the app shows.
- PWA and offlineFree + Full
- Installable, with a service worker and an offline fallback page.
- Desktop shell and mobile setupFree + Full
- Tauri 2 desktop shell and Android/iOS setup scripts around the same static build. A shell can ask which server to use, so one installer serves every deployment. Not finished yet. Inside the shells only email-and-password sign-in works: no GitHub or Google sign-in, no passkeys, and an account with two-factor turned on cannot sign in there yet. Stripe Checkout and the billing portal open in the system browser. The session token sits in webview storage rather than an OS keychain, and there is no auto-update. The desktop shell has been run by hand on Windows only, and installed builds are unverified. Mobile targets have never been initialized (that needs Android Studio or Xcode); signing and store publishing are your setup.
- Marketing site and docsFree + Full
- An Astro landing site and a Starlight documentation site, both static. They publish your product's release notes and docs, not the kit's; the kit's manual builds only when you ask for it.
- Self-hostingFree + Full
- Docker Compose for the whole stack, Caddy for TLS and subdomains, and backup and restore scripts with a restore drill. The deploy workflow is built to take a database backup before it migrates, check the server's SSH host key and clock, and smoke-test the result, and other GitHub Actions workflows to show server status and logs and run backups without a shell. The deploy and backup workflows have not yet run against a real server: the kit's tests exercise them with stand-in SSH and Docker commands, and back up and restore a real Postgres. Set a Sentry DSN and the web app's server and the API report their errors. Without Docker, one command serves the whole app from one machine, behind one origin you can publish to your own devices over Tailscale.
- Organizations, teams, workspacesFull edition
- The organization is the tenant. Workspaces hold the product data, and every query is scoped by a foreign key. Teams are access boundaries: a workspace scoped to a team reaches only its members and the organization's owners and admins. One middleware checks membership, role and team before every tenant procedure, and a test fails for a procedure that skips it.
- Roles and invitationsFull edition
- Owner, admin and member, plus roles of your own, defined in one file and enforced in the API. Invitations are emailed, in the inviter's language, as links that expire. Members delete only what they uploaded; owners and admins delete anyone's.
- Audit logFull edition
- Who did what, per organization, readable by owners and admins on a page of its own, with action and date filters and a CSV export. Platform admins see every organization's. An action taken by an admin signed in as a user records the admin too, and one taken with an API key names the key.
- Organization API keysFull edition
- Owners and admins create keys with scoped permissions (never more than their own role holds), an optional expiry and last-used tracking, and can revoke them. A key is shown once, stored only as a SHA-256 hash and rate-limited. The OpenAPI document says which operations accept one.
- Outbound webhooksFull edition
- HTTPS endpoints per organization for member, workspace, document, job and subscription events, and events of your own. Deliveries are signed the Standard Webhooks way and retried on the job queue, eight attempts over about 21 hours, with a delivery log, redelivery and secret rotation. Private, loopback and link-local addresses are refused, and redirects are never followed.
- BillingFull edition
- Stripe subscriptions per organization, per seat, with plan limits and plan features enforced server-side and a customer portal. Flat-priced plans can also bill yearly.
- Documents and storageFull edition
- Presigned uploads to S3, R2 or local disk, a storage quota per workspace, and a document model scoped to a workspace. Stored files hold your product's own uploads and exports, such as attachments, avatars and logos, scoped to a workspace, organization or user and deleted with the row that owns them.
- Background jobsFull edition
- A Postgres-backed queue and a job worker, scoped to the organization. Your product declares its own job kinds, with input checked before a job runs, and schedules that run once per tick across every worker. Jobs take priorities, a dedupe key, a time budget and progress, and a lease lets the sweep take back only a dead worker's jobs. The worker runs inside the API by default or as its own process.
- AI serviceFull edition
- FastAPI service managed with uv for text extraction, OCR, summaries and embeddings. The API stores the embeddings for pgvector semantic search and meters a credit ledger.