Skip to content

Database

PreviousNext

One Prisma schema with two kinds of data — content and operations.

Two kinds of data

Content is what the public site renders. Each row is written in one language, recorded in lang ("ar" or "en").

ModelHolds
EventEvents, with speakers and registration
ProgramPrograms and their modules
OpportunityJobs, grants, fellowships and tenders
StoryEditorial stories
PersonCommunity member profiles
CompanyCommunity company profiles
PartnerPartners and sponsors

Operations is what visitors submit and staff act on.

ModelHolds
BookingRequestBooking requests with a reference code
EventRegistrationRegistrations for events
ProgramApplicationApplications to programs
EnquiryContact-form enquiries

Time

Everything is stored in UTC and displayed in Africa/Khartoum (UTC+2, no DST). Form dates and times are interpreted as Port Sudan wall time in src/lib/time.ts.

Two runtimes, one client

src/lib/db.ts exports a single db:

  • Cloudflare Workers — Neon's serverless driver, one client per request.
  • Node (local development, scripts) — one pooled node-postgres client.
pnpm db:migrate   # create and apply a migration
pnpm db:deploy    # apply migrations in production
pnpm db:studio    # browse the data