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