A full-stack starter template built with modern tools.
| Layer | Technology |
|---|---|
| Runtime | Bun |
| Monorepo | Turborepo |
| Frontend | React 19, Vite, TanStack Router (file-based), TanStack Query |
| UI | shadcn/ui, Radix UI, Tailwind CSS v4, HugeIcons |
| Backend | Hono, Pino (structured logging) |
| Auth | Better Auth (email/password, OAuth-ready) |
| Database | PostgreSQL, Drizzle ORM |
├── apps/
│ ├── client/ # React frontend (Vite)
│ └── server/ # Hono API server (Bun)
├── packages/
│ └── config/ # Shared ESLint, Prettier, TypeScript config
├── turbo.json # Turborepo pipeline
└── package.json # Workspace root
- Bun (v1.3.4+)
- PostgreSQL (running locally or remote)
-
Install dependencies:
bun install
-
Configure environment variables:
cp apps/server/.env.example apps/server/.env cp apps/client/.env.example apps/client/.env
Generate a secret for Better Auth:
openssl rand -hex 32
-
Create the database and run migrations:
# Create your PostgreSQL database first, then: bun run db:generate bun run db:migrate -
Start development:
bun run dev
- Client: http://localhost:5173
- Server: http://localhost:3000
- Health check: http://localhost:3000/health
- Auth flow - Login, signup, session management, logout with protected route guards
- App shell - Collapsible sidebar, theme toggle (light/dark), user dropdown menu
- Database - Drizzle ORM with PostgreSQL, migration workflow
- Logging - Structured Pino logging with request IDs
- Health check -
/healthendpoint with DB connectivity check - Code quality - ESLint, Prettier, TypeScript strict mode
| Script | Description |
|---|---|
bun run dev |
Start all apps in development mode |
bun run build |
Build all apps |
bun run lint |
Lint all apps |
bun run format |
Format all files with Prettier |
bun run db:generate |
Generate Drizzle migrations |
bun run db:migrate |
Run database migrations |
bun run db:studio |
Open Drizzle Studio |