All implementations

Next.js + Prisma + Postgres

structural

Next.js 15 (App Router) backed by Prisma/Postgres. Realtime delivered via Pusher Channels to avoid long-lived connections on serverless. Clerk for auth.

For spec: Slack-like Messaging App

Frontend
Next.js 15 (App Router)
Backend
Next.js route handlers
Database
Postgres (Neon)
ORM
Prisma
Auth
Clerk
Hosting
Vercel
realtime
Pusher Channels
6 tables5 routes3 modules6 packages7 env vars4 features uncovered

Packages

next^15
prisma^5
@prisma/client^5
@clerk/nextjs^6
pusherServer-side event publishing
pusher-jsClient subscription

Environment

DATABASE_URLrequired
CLERK_SECRET_KEYrequired
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYrequired
PUSHER_APP_IDrequired
PUSHER_KEYrequired
PUSHER_SECRETrequired

Feature implementations

File Storage

file-storage

Vercel Blob for uploads; Attachment row per file.

Tables

Attachment4 fields
  • idString
  • messageIdString
  • urlString
  • mimeString

Env vars

BLOB_READ_WRITE_TOKEN *

Messaging

messaging

Channels + DMs via a single Message model; Pusher events on write.

Tables

Message7 fields
  • idString
  • channelIdString?
  • recipientIdString?
  • senderIdString
  • contentString
  • parentIdString?
  • createdAtDateTime
Channel3 fields
  • idString
  • nameString
  • isPrivateBoolean

Routes

GET/c/[channelId]

app/c/[channelId]/page.tsx

POST/api/messages

app/api/messages/route.ts

Modules

  • lib/pusher/server.ts pusher.trigger(channel, event, data)
  • lib/pusher/client.ts useChannel hook

Notifications

notifications

Notifications piggy-back on Pusher private channels per user.

Tables

Notification5 fields
  • idString
  • userIdString
  • kindString
  • payloadJson
  • readAtDateTime?

Routes

GET/api/notifications

Search

search

Postgres tsvector column with a GIN index + a simple /search page.

Tables

Message

Extended with a content_tsv generated column

Routes

GET/search

User System & Auth

user-system

Clerk handles sessions + UI. Local User row mirrored via webhook.

Tables

User4 fields
  • idString
  • clerkIdString
  • emailString
  • nameString?

Routes

POST/api/webhooks/clerk

app/api/webhooks/clerk/route.ts

Modules

  • lib/auth.ts currentUser() wrapper + org helpers

Uncovered features

The spec includes features this implementation doesn't describe. Contributions welcome.

Roles & PermissionsAudit LoggingRate Limiting & Abuse PreventionOnboarding & Activation