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

Asmar SyedAsmar Syed
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

Asmar Syed
Asmar Syed