Skip to content

Phase 1: Prisma Postgres Setup

Goal

Create a clean Prisma Postgres environment for TendSocial with split connection settings for runtime traffic versus migrations/admin tooling. This phase creates and seeds the Prisma database. It does not migrate production data from Neon.

Why this matters

Prisma Postgres provides pooled and direct connection paths. Application traffic should use the pooled connection. Migrations, schema tools, Studio, dump/restore, and long-running/session-dependent work should use the direct connection. Prisma documents that the pooler uses PgBouncer in transaction mode, where session state does not persist between transactions; it also warns that using the direct hostname for application traffic can silently exhaust connections under load. Source: Prisma Postgres connection pooling.

Environments to create

Create at least:

text
tendsocial-prisma-dev
tendsocial-prisma-staging
tendsocial-prisma-benchmark

Recommended purpose:

EnvironmentPurpose
devLocal and developer smoke testing.
stagingProduction-like pre-release app testing.
benchmarkRepeatable destructive benchmark/seeding runs.

Required env vars

Use split URLs everywhere:

env
# Runtime traffic: API handlers, workers, serverless functions
DATABASE_URL="prisma-postgres-pooled-url"

# Admin traffic: Prisma CLI, migrations, Studio, dump/restore
DIRECT_DATABASE_URL="prisma-postgres-direct-url"

In Prisma 7, keep schema.prisma datasource free of deprecated url / directUrl fields:

prisma
datasource db {
  provider = "postgresql"
}

Configure Prisma CLI/admin datasource routing in apps/backend/prisma.config.ts:

ts
import "dotenv/config";
import { defineConfig } from "@prisma/config";

export default defineConfig({
  datasource: {
    url: process.env.DIRECT_DATABASE_URL,
  },
});

Runtime application code still passes process.env.DATABASE_URL to new PrismaPg({ connectionString }).

Runtime placement

Update:

text
backend/.env
backend/.env.local
backend/.env.test
backend/.env.benchmark
Cloud Run environment variables
CI/CD secrets
Vercel environment variables if any DB-connected route exists there

Rules:

ConsumerURL
Backend API runtimeDATABASE_URL pooled URL
Background workersDATABASE_URL pooled URL
Serverless functionsDATABASE_URL pooled URL
prisma migrate deployDIRECT_DATABASE_URL through prisma.config.ts
prisma db pushDIRECT_DATABASE_URL through prisma.config.ts
prisma db pullDIRECT_DATABASE_URL through prisma.config.ts
Prisma StudioDIRECT_DATABASE_URL through prisma.config.ts
pg_dump / pg_restoreDIRECT_DATABASE_URL direct URL
Long-running maintenance queriesDIRECT_DATABASE_URL direct URL

Schema creation

Preferred production-like path:

bash
npx prisma migrate deploy

Disposable benchmark path only:

bash
npx prisma db push

Then generate the client:

bash
npx prisma generate

Initial seed

Create or update:

text
prisma/seed.ts

Seed enough data to reproduce TendSocial behavior:

Data groupMinimum seed
Users3-5
Workspaces2-3
Workspace members3-10
Brands2 per workspace
Social accountsPlaceholder Google, Instagram, LinkedIn, TikTok, Facebook
Campaigns5-10
Short-form content records100-500
Blog posts25-50
Calendar/scheduled posts60-180
AI draft records100+
Publishing jobs50+
Activity/audit rowsEnough to test current behavior

Run:

bash
npx prisma db seed

Suggested seed profile

Create two profiles:

text
seed:small      realistic solo/dev
seed:benchmark 50-user equivalent content volume

Example scripts:

json
{
  "scripts": {
    "db:setup:prisma": "prisma migrate deploy && prisma generate && prisma db seed",
    "db:seed:small": "SEED_PROFILE=small prisma db seed",
    "db:seed:benchmark": "SEED_PROFILE=benchmark prisma db seed"
  }
}

Smoke tests

Run these after setup:

bash
pnpm test:smoke
pnpm test:db
pnpm dev

Manual smoke flow:

  1. Start backend against Prisma Postgres.
  2. Start frontend.
  3. Log in with Supabase auth.
  4. Load workspace.
  5. Open dashboard.
  6. Open content list.
  7. Open editor.
  8. Save a draft.
  9. Open calendar.
  10. Schedule a post.

Acceptance criteria

ItemTarget
Prisma Postgres DBs createdDev, staging, benchmark
Runtime traffic uses pooled URLYes
CLI/admin traffic uses direct URLYes
Schema can be created from repoYes
Seed is repeatableYes
App boots against Prisma PostgresYes
Smoke tests passYes
No production data migration requiredConfirmed

Sources

TendSocial Documentation