web-app

A web app template

Start from a full stack that already works.

A TypeScript monorepo — an Express API, a SvelteKit app and the types they share — with accounts, a database and tests already wired together. Build your features where the showcase is.

What's inside

One shared contract

Every payload is a zod schema in shared/: the API validates requests with it, the UI parses responses with it.

An API in layers

Express 5 with a folder per feature — router, controller, service, repository — one response envelope and typed error codes.

A real database

Postgres through Drizzle, with migrations and cursor pagination.

A server-rendered UI

SvelteKit 3 and Svelte 5 with shadcn-svelte components, several themes and light or dark mode — try the buttons above.

Accounts

Sign-up and sessions through better-auth; what someone creates belongs to them alone.

Tests at every level

Vitest for the API and the UI, components tested in a real browser, Playwright end to end.

The showcase: todo lists

Todo lists are the example feature: small enough to read in one sitting, yet they touch every layer — a shared schema, an API feature with its own tables, owner checks, paginated lists, and pages with dialogs, empty states and error handling. Read them to see how a feature is built, then replace them with your own.

  1. Sign up for an account.
  2. Create a list.
  3. Add todos, tick them off, delete them.