saasprokit
Database

Database Overview

Prisma client, adapters, and the migrate/seed workflow

@repo/database is a Prisma client over PostgreSQL. Local default is Docker Postgres (docker compose up -d postgres), not Neon. Neon is what you use on Cloudflare Workers (and optionally on Vercel).

There are 16 models. Better Auth owns most of them; four are app tables.

KindModels
Better Auth coreUser, Session, Account, Verification
Better Auth pluginsTwoFactor, Organization, Member, Invitation, Team, TeamMember, Subscription, RateLimit
App-specificInviteLink, File, WebhookEvent

InviteLink is not a Better Auth plugin. Field-by-field: Database Design. Schema: packages/database/prisma/schema.prisma.

Adapters

packages/database/index.ts picks the driver at runtime:

RuntimeAdapter
Node (local Docker, Vercel, Docker image)PrismaPg (TCP)
Cloudflare workerd (CF_BUILD / Workers UA)PrismaNeonDATABASE_URL must be a Neon pooled (-pooler) endpoint

Commands

Happy path from the repo root:

pnpm migrate                              # format + generate + db push
pnpm --filter @repo/database db:seed      # wipe (keeps RateLimit), then seed

pnpm migrate is not prisma migrate dev. Do not add versioned migrations unless you are changing the kit's workflow.

Seed is blocked when NODE_ENV=production. It does not delete RateLimit rows.

Client import

import { database } from "@repo/database";

On this page