Next.js 15 fullstack template with better-auth for authentication and drizzle-orm as the ORM.
Warning
This project uses Next.js 15-canary to support node runtime on middleware. This is not yet supported in stable version.
- Full-stack framework: Next.js 15-canary
- UI: Tailwind CSS v4
- Component library: Shadcn UI
- Authentication: better-auth
- Database: postgres
- ORM: drizzle-orm
- Authentication
- Social login
- Github
- Discord
- Social login
- Database
- Postgres (Neon)
- ORM: drizzle-orm
- Next.js API, server actions, and middleware
Clone the repository
git clone https://github.com/rudrodip/titan.git
Install dependencies
bun install
Create environment file
cp .env.example .env
Provide environment variables in .env
file
BETTER_AUTH_SECRET
: Secret key for Better Auth authentication generate one hereBETTER_AUTH_URL
: Better Auth URL (e.g.,http://localhost:3000
)DATABASE_URL
: PostgreSQL connection string provided from Neon (e.g.,postgresql://username:password@neon:5432/titan
)
Generate database schema
bun run db:generate
Migrate database
bun run db:migrate
Run the development server
bun dev
Open the browser and navigate to http://localhost:3000
Have Docker installed on your system. Before running the db:generate command from Getting Started, run the following command in the project directory to start a local database:
docker-compose up -d
Use the following environment variables in .env
file:
DATABASE_URL
:postgres://postgres:postgres@localhost:5432/titan
Add the pg
and @types/pg
dependencies to your project:
bun add pg
bun add -D @types/pg
Then, change the /src/lib/db/index.ts
file to use the drizzle-orm/node-postgres
and pg
package instead of @neondatabase/serverless
:
import * as schema from "@/lib/db/schema";
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
const sql = new Pool({
connectionString: process.env.DATABASE_URL,
});
export const db = drizzle(sql, { schema });
Continue steps from Getting Started e.g. generating the database schema, applying migrations, and running the dev server.
Open the browser and navigate to http://localhost:3000