A modern todo application with authentication and category management built with Next.js.
- Frontend: Next.js 15 (App Router), React 19
- Backend: Next.js API Routes with Hono.js
- Authentication: Better Auth
- Database: PostgreSQL (Supabase)
- ORM: Drizzle ORM
- API Client: Hono RPC client with type inference
- Data Fetching: SWR
- UI: TailwindCSS + shadcn/ui components
- Validation: Zod
Copy the environment variables:
cp .env.sample .envUpdate the .env file with your values:
# Database (PostgreSQL)
DATABASE_URL="postgresql://postgres:postgres@127.0.0.1:54322/postgres"
# BetterAuth
BETTER_AUTH_SECRET="your-super-secret-key-change-this-in-production"
BETTER_AUTH_URL="http://localhost:3000"
# Next.js public env
NEXT_PUBLIC_BETTER_AUTH_URL="http://localhost:3000"Start Supabase locally:
supabase startGenerate and run migrations:
npm run db:generate
npm run db:migrateTo stop the local Supabase instance when done:
supabase stopnpm install
npm run devOpen http://localhost:3000 to view the application.
npm run dev- Start development server with Turbopacknpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLintnpm run db:generate- Generate Drizzle migrationsnpm run db:migrate- Run Drizzle migrationsnpm run db:push- Push schema changes to databasenpm run db:studio- Open Drizzle Studio
- User authentication with email/password
- Todo management with categories
- Real-time updates with SWR
- Type-safe API with Hono RPC
- Responsive design with TailwindCSS