←︎ Back to work Product Design · Full-Stack Web

Client Portal

A fully custom client management system: portal, admin, payments, contracts, and files, all built from scratch.

Year 2026 · Role Designer + Developer · Tools Next.js, TypeScript, Prisma, PostgreSQL, Stripe, Cloudflare R2, Resend, Railway
Client Portal preview
Client Portal preview
Client Portal preview

The project

Most freelancers cobble together five different tools to run their business, and it shows. I built one thing that does all of it. The TRS Client Portal is a full-stack web app with two sides. A client-facing portal where every client has their own private space to track project status, sign contracts, pay invoices, access files, and message the studio. And a full admin panel where I manage clients, leads, quotes, projects, approvals, and settings. Built on Next.js with Prisma and PostgreSQL, Stripe for payments, Cloudflare R2 for file storage, and Resend for transactional email. Fully branded, fully self-hosted on Railway.

The challenge

Most freelancers run their business on five disconnected tools, and clients feel every seam. The goal was one place where a client tracks a project, signs, pays, and grabs files, and where the studio runs leads, quotes, projects, and approvals behind it.

Client Portal preview
Client Portal preview
Client Portal preview

The approach

Two sides, one system. A client-facing portal where every client has a private space, and a full admin CRM behind it. Role-based access so clients only ever see their own data, Stripe for payment inside the portal, Cloudflare R2 for secure file handoff, all self-hosted so there are no per-seat fees to anyone.

What I built

  • Client portal: dashboard, project status tracker, contracts, invoices, files, messages, and approvals
  • Admin panel: full CRM with leads, clients, quotes, projects, contracts, invoices, and settings
  • Stripe integration for direct invoice payment from inside the portal
  • Cloudflare R2 file storage for secure deliverable handoff and shared assets
  • NextAuth v5 with role-based access, so clients only ever see their own data
  • Resend for transactional emails: invites, invoice notifications, and approvals
  • Fully responsive, pixel-perfect on desktop and mobile
  • Deployed on Railway with PostgreSQL. Zero per-seat fees, full ownership

Results

Client portal and admin CRM in one full-stack app
Invoices paid inside the portal via Stripe
Self-hosted on Railway, zero per-seat fees
Next case study
Pulse

Pulse

Product Design · Internal Tool