Build guide

The Client Portal That Makes My Agency Look Like a SaaS

A branded client portal with Google sign-in, live campaign data, and 30-minute syncs, bolted onto an existing site.

Claude CodeSupabaseNetlify
Jun 22, 2026
Optimized for

What you'll build

A branded client portal bolted onto your existing agency website. Clients hit "Sign in with Google" and land on their own dashboard - live campaign data, billing, filters - synced every 30 minutes. Admins see every client; each client sees only their own data. I built this for AI Waterside in a couple of hours with Claude Code, and it replaced the messy stream of Google Docs, Sheets, screenshots, and meeting notes we used to send. It's the difference between looking like a freelancer and looking like a real software company - and it's the portal I now show on every sales call.

What you'll need

Step 1: Add the portal and auth to your existing site

Start with the foundation: a new "Client Portal" section on your site with Google sign-in through Supabase auth. Two roles matter - admins (you and your team) land in an admin console where you can see all clients and onboard new ones; clients get routed to their own branded dashboard. From the admin console, hit edit on a client, click invite user, pick the role (team member or client), add their email, and they have authentication rights to enter.

Step 2: Wire your data sources into Supabase

Supabase is where everything lands. For Synaptic Recall (a medical-student education platform we run influencer outreach for), the two sources were:

Hey, how many emails did we send out today? Which emails are positive?

Instantly's UI is nice, but it gets messy fast once you have multiple campaigns running. This fixes that.

Step 3: Sync it every 30 minutes

Netlify serverless functions push fresh data from Instantly and the Sheet through Supabase into the dashboard every 30 minutes. Clients log in and the numbers are live - no more "let me send you an update" messages.

Step 4: Build the client-facing tabs by iterating with Claude

The entire dashboard is built by Claude. All I'm doing is taking what I think would be useful, putting it into words, and reiterating. The Synaptic Recall portal ended up with three tabs:

The filter buttons, the logo touches, the colorways, the live-campaign indicator - those were all just reiterations I gave Claude and it enacted them.

Step 5: Lock each client to their own data

Row-level security in Supabase means a client literally cannot see another client's data. Pair that with multi-tenant branding - every client gets their own colors and logo the moment they log in - and each client's portal feels like it was built just for them.

Step 6: Onboard the next client in 30 seconds

It's multi-client by design. New client: type the name, pick a brand color, drop a logo. Then whatever they care about, you just ask:

Build out a tab for this, and streamline this information through whatever - a Google Doc, a Google Sheet, even screenshots.

If it's a clinic you built a voice agent for, give them a tab for calls answered, cost, and what's flowing through the agent. Whatever data they want to see, create an automation that flows it into their dashboard.

That's it. One click for the client, live data on sign-in, and both sides stop drowning in update messages. Good luck and happy building.

Resources

Some links in this guide are affiliate links. They cost you nothing and support the free guides.

← Back to the library Good luck and happy building