AWS Builder Center

Building Dossier: A Client Portal SaaS with Amazon RDS PostgreSQL and Vercel

How I built a white-label client portal for freelancers using Next.js 15, Amazon RDS PostgreSQL, Amazon S3, and Vercel — submitted for the H0 Hackathon.

Building Dossier: A Client Portal SaaS with Amazon RDS PostgreSQL and Vercel

This article was created for the purposes of entering the #H0Hackathon.

The Problem

Freelancers and small agencies use 5+ disconnected tools to manage clients — Notion for projects, Stripe for invoices, email for updates, Dropbox for files. Clients get frustrated constantly asking "what's the status?" and providers waste hours context-switching between apps.
I built Dossier — a white-label client portal that consolidates project management, invoicing, file delivery, and communication into one branded experience.

Why Amazon RDS PostgreSQL?

Dossier has 15 database models with complex relationships: organizations, users, clients, projects, milestones, deliverables, invoices, messages, and activity logs. I needed:
  • Relational integrity — foreign keys between projects → milestones → deliverables
  • Full-text search — GIN indexes for searching across clients, projects, and messages
  • Multi-tenancy isolation — every query scoped by organizationId
  • Reliability at scale — automated backups, point-in-time recovery
Amazon RDS PostgreSQL gave me all of this with managed infrastructure. I didn't want to worry about patching, backups, or failover during a hackathon — RDS handles it. The connection from Vercel's serverless functions works seamlessly with connection pooling via Prisma.

Architecture

Vercel (Next.js 15)
│
├── Server Actions (mutations)
├── API Routes (Stripe webhooks)
├── Edge Middleware (auth + routing)
│
▼
Amazon RDS PostgreSQL ←── Prisma ORM (15 models)
│
├── Organizations, Users, Clients
├── Projects, Milestones, Deliverables
├── Invoices, Messages, Activity Logs
└── Auth tables (Sessions, Accounts, OTP)
Amazon S3 ←── Presigned URLs for file uploads
Stripe ←── Subscriptions + Invoice payments
Anthropic Claude ←── AI project summaries
Resend ←── Transactional emails
The AWS pieces:
  1. Amazon RDS PostgreSQL — All application data. 15 models, full-text search with GIN indexes, multi-tenant isolation.
  2. Amazon S3 — Deliverable file storage. Presigned URLs for secure upload/download without exposing credentials to the client.

How Vercel connects to RDS:

Next.js Server Actions and API Routes connect to RDS through Prisma ORM. Prisma handles connection pooling critical for serverless environments where each invocation could otherwise exhaust database connections.

Try It

Any opinions in this article are those of the individual author and may not reflect the opinions of AWS.
Enjoyed reading this content? Let the author know!

Your likes, comments, shares, and saves help creators reach more builders.

Loading recommendations

Loading article