Authentication
With the template
Better Auth and Clerk arrive pre-configured. Database sessions work in minutes.
From scratch
A day or two lost to endpoints, JWTs, cookie flags, middleware and user tables.
Auth, database, AI, translations and tests come wired. You start on your product, not on groundwork.
npx @edd_remonts/create-edd-app my-productSign-in flows, folder structure, test runners, Docker. None of it makes your product different, and all of it can go wrong. Here is what the template takes off your plate.
With the template
Better Auth and Clerk arrive pre-configured. Database sessions work in minutes.
From scratch
A day or two lost to endpoints, JWTs, cookie flags, middleware and user tables.
With the template
Self-contained modules behind one barrel import. New features can't tangle with old ones.
From scratch
A folder layout improvised under deadline, refactored painfully six months in.
With the template
Vitest and Playwright run out of the box, with smoke tests covering real routes.
From scratch
Hours of config files, runners, database seeding and CI before the first useful test.
With the template
Server-sent events and a chat UI are already built, with five providers to choose from.
From scratch
Hand-rolling chunk parsing, retry logic and streaming state for every provider.
With the template
Multi-profile Docker Compose for the app, Postgres and ChromaDB, ready for any VPS.
From scratch
Writing Dockerfiles and compose files by hand, then debugging them in production.
Not an empty folder. A typed monolith with twelve modules, migrations and CI hooks, named after your product.
$ npx @edd_remonts/create-edd-app my-product
✔ Scaffolding my-product
├─ src/modules 12 modules
├─ drizzle/ migrations ready
├─ e2e/ playwright configured
└─ .env.example 34 variables documented
✔ Done in 58s. Run pnpm dev to start
Theme, sidebar navigation, dialogs and responsive layout.
Users, settings, dashboard widgets and a streaming AI chat. Each one isolated.
Better Auth, Drizzle ORM, Playwright and Vitest, configured and talking to each other.
Before the hour is out you are clicking through your own app: real sign-in, a live dashboard, an AI chat answering over SSE. The screens below are the template, untouched.
Sign in to the app you scaffolded an hour ago.
Six pieces you would otherwise build yourself, already wired together.
This very page: hero, scenes, contact form and footer, all behind translation keys.
Collapsible sidebar, topbar, theming and toasts, responsive from the start.
Better Auth with database sessions, plus optional Clerk SSO.
Drizzle ORM over Postgres, with typed schemas and one-command migrations.
Five providers, one client: OpenAI, Anthropic, Ollama, LM Studio and llama.cpp, with RAG via ChromaDB.
Type checks, ESLint, Prettier, i18n parity and tests behind a single validate command.
A realistic path, not a countdown. Each day has a goal, a handful of tasks and the exact command to run. Tick them off as you go.
Launch readiness
0 of 15 tasks done (0%)
Clone the repository, copy the example env file and check that the dev server boots.
Checklist
$ pnpm install && pnpm dev.env.exampleMake it yours: colors, logo and navigation.
Checklist
src/shared/styles/globals.cssWire your credentials and shape the database.
Checklist
$ pnpm db:generate && pnpm db:migratedrizzle.config.tsThe fun part: routes, widgets and AI for your actual domain.
Checklist
$ pnpm routes:inventorysrc/routes/Prove it works, then put it in front of people.
Checklist
$ pnpm test:e2e && pnpm builddocker-compose.yml01Structure
Every feature lives in its own module, behind one import.
Twelve modules ship today. Deleting one doesn't break the others.
02Security
Auth, roles and configuration are decided before your first feature, not after your first incident.
Better Auth sessions, RBAC and typed env access come wired.
03Longevity
Swap the brand, the modules and the copy. The architecture is built to outlive them.
This landing is itself a module you could replace this afternoon.
Write to us about the template: a setup problem, a missing feature, an architectural doubt. Your message lands in the same contact-messages module that ships with the starter.
We usually answer within a couple of days.
Async by default
No calls, no meetings. Write when it suits you; we answer the same way.
Low-volume updates
Release notes land in your inbox at most once a month.