Step-by-Step Guide: Configuring Prisma + NeonDB + Better Auth with Nuxt + Netlify!

2 min read

✅ Stack Overview:
Nuxt.js (Frontend & API routes)
Prisma ORM
PostgreSQL (NeonDB or local)
Better Auth (authentication)
Netlify (deployment)
1. Install Prisma
npm install prisma --save-dev
npm install @prisma/client
2. Setup schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
3. Set your .env
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public
If you don’t have a DB locally, install:
Then create:
A new server in pgAdmin
A new database
Your connection URL like:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public
4. Setup Better Auth
npm install better-auth
.env
BETTER_AUTH_SECRET=your_secret_key
BETTER_AUTH_URL=http://localhost:3000
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public
Generate your secret: Better Auth Docs
5. Configure Auth
lib/auth.ts
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export const auth = betterAuth({
database: prismaAdapter(prisma, { provider: "postgresql" }),
emailAndPassword: {
enabled: true,
},
});
6. Add Prisma client singleton
lib/prisma.ts
import { PrismaClient } from "@prisma/client";
const prismaClientSingleton = () => new PrismaClient();
declare const globalThis: {
prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;
export const prisma = globalThis.prismaGlobal ?? prismaClientSingleton();
if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = prisma;
7. Generate DB schema
npx @better-auth/cli generate
8. Auth route handler
/server/api/auth/[...all].ts
import { auth } from "~/lib/auth";
export default defineEventHandler((event) => {
return auth.handler(toWebRequest(event));
});
9. Setup client auth
lib/auth-client.ts
import { createAuthClient } from "better-auth/vue";
export const authClient = createAuthClient({
baseURL: process.env.BETTER_AUTH_URL,
});
export const { signIn, signUp, signOut, useSession } = authClient;
10. Migrate database
npx prisma migrate dev
npx prisma generate
☁️ Deploy with Netlify + NeonDB
11. Create accounts
12. Create a NeonDB database
Create project
Choose cloud provider + region
Click "Connect" and copy the connection URL
13. Deploy on Netlify
Connect your GitHub project
In build settings:
Build command: npm run build && prisma generate && prisma migrate deploy
Publish directory: dist
14. Set environment variables
In Netlify > Site Settings > Environment Variables, add:
DATABASE_URL=... # from Neon
BETTER_AUTH_SECRET=... #same from your code
BETTER_AUTH_URL=https://your-netlify-app.netlify.app
15. Final step
Redeploy your app:
Go to "Deploys"
Click "Retry with latest branch"
✅ You’re done!
0
Subscribe to my newsletter
Read articles from Asmar Syed directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
