Problem
Most project management tools are either too bloated or too simple. I wanted to build something that felt genuinely production-ready: multi-tenant workspaces, role-based access, real-time updates, a subscription model, and the kind of performance that doesn't embarrass you in a Lighthouse audit.
The goal was also educational, to push myself through the full complexity of a modern SaaS product: authentication, payments, real-time infrastructure, database design, and end-to-end testing. Not a tutorial clone, but something that surfaces the hard parts.
What it does
- Multi-tenant workspaces — each workspace has its own members, projects, and role hierarchy (owner / admin / member)
- Kanban board — drag-and-drop reordering via @dnd-kit, with live SSE updates so collaborators see changes in real time
- Three task views — Board, List, Table — switchable without losing scroll position
- Real-time notifications via Server-Sent Events (no polling)
- In-project WebRTC video calls via simple-peer
- Global command palette (⌘K) across tasks and projects
- Stripe billing with Free / Pro tiers and server-enforced limits
- Email invite system with tokenized, expiring links
Stack
Architecture
The entire dashboard uses RSC by default — pages fetch via Drizzle directly, no intermediate API layer. Client components are isolated to where interactivity is needed: the kanban board, forms, search palette, video UI.
Session fetching uses React's cache() to deduplicate across nested layouts within a single request — so a page with three nested layouts calls the DB once, not three times. Critically this uses React's per-request cache, not unstable_cache, so session data never leaks between users.
Real-time uses SSE over WebSockets: no persistent server state, HTTP/2-efficient, and automatic browser reconnection. Each event triggers TanStack Query cache invalidation, re-fetching only the affected data while keeping optimistic updates intact.
Outcome
A fully functional SaaS with real-time collaborative boards, multi-tenant workspaces, Stripe billing with server-enforced limits, and WebRTC video calls. Covered by a Playwright E2E suite for auth and workspace flows, with production monitoring via Sentry and Vercel Speed Insights.
