// Case Study · SaaS · Multi-tenant

CrewBoard

A multi-tenant team task board where every workspace is strictly isolated in the database and the board syncs in real time. Built full-stack on Supabase + Next.js — auth, a relational schema, Row Level Security and Realtime.

Next.js · SupabaseMulti-tenantRealtimeRLS-isolated
crewboard · multi-tenant team board
CrewBoard — multi-tenant team kanban SaaS built with Supabase (Auth, RLS, Realtime)
5
relational tables
3
roles (owner/admin/member)
RLS
on every table
realtime
cross-session sync
01

The problem

Teams want one shared board that every member sees update the moment someone moves a card — no refresh, no stale state. That's the easy half.

The hard half is isolation: in a multi-tenant SaaS, each team's data must be walled off at the database, not just hidden in the interface. Get that wrong and one workspace can read another's data. CrewBoard was built to get both right — realtime and tenant-isolation, enforced where it counts.

02

What I built

A full SaaS on a clean relational schema — organizations, members, projects, tasks and comments — with auth, live collaboration and role-based access from day one.

01

Multi-tenant workspaces

Every team is its own organization with members, projects, tasks and comments — isolated end to end.

02

Kanban board

Todo / Doing / Done columns with ordered, positionable cards, assignees and per-task comments.

03

Realtime sync

Move a card and every teammate's board updates instantly — no refresh, across sessions.

04

Role-based access

Owner, admin and member roles — admins manage projects and members, everyone works the board.

03

Under the hood

Database-level isolation (RLS)

Row Level Security is enabled on all five tables, so a workspace's data is walled off in Postgres itself — not just hidden in the UI. Policies key every read/write to membership via SECURITY DEFINER helpers (is_member / is_admin) that sidestep policy recursion.

Realtime board

The tasks table is added to Supabase's realtime publication, so card moves broadcast to every open session instantly.

Zero-setup onboarding

A signup trigger seeds each new user a private workspace, a “Getting Started” project and a starter board — click sign-up and you're already working.

Atomic org creation

Creating a workspace (organization + owner membership) runs in a single create_org RPC, so a team is never left half-created.

Server-first Next.js

Next.js App Router with server components fetches the board using the user's own session (@supabase/ssr), so RLS applies on the server too — no leaky client queries.

Try it in one click

Sign-up auto-seeds a live demo board, so you can click straight in and open a second tab to watch realtime sync.

04

Stack

Frontend

  • Next.js 14
  • React 18
  • TypeScript
  • Tailwind
  • Motion

Backend & Data

  • Supabase
  • PostgreSQL
  • Row Level Security
  • Realtime

Auth

  • Supabase Auth
  • @supabase/ssr (server session)
  • Role-based access
05

Outcome

A working multi-tenant SaaS: sign up, get a private workspace, invite teammates, and collaborate on a live board.
Tenant isolation enforced in the database (RLS), not bolted on in the UI — the safe way to build SaaS.
Realtime collaboration that feels instant, with an onboarding that seeds value on the first click.
Live demo with a seeded account — click in and try it without signing up.
// let's build

Building a SaaS product?

Whether it's a new MVP or improving an existing product — I ship the auth, the data model and the UX, safely.