Dive: A Multi-Tenant Workspace for Boards, Chat and Notes
Project management for small teams: boards, project chat and notes in one workspace. Designed and built solo, live in alpha.

The problem
Small teams split their work across a board tool, a chat app and a docs tool, and the context gets lost between them. Dive puts boards, project chat and notes in one workspace.
What I built
I designed and built it end to end, solo, on Next.js (App Router, server actions), TypeScript and Supabase (Postgres, Auth, Realtime, Storage).
- Multi-tenant by default. Every table is scoped to an organisation, and row-level security checks the signed-in user's org through a single
get_auth_org_id()helper, so teams only ever see their own data. - Boards that stay cheap. Drag-and-drop boards use fractional positions, so moving a card updates one row instead of re-ordering the whole column.
- Invites without email. One-time tokens, with admin roles to view and revoke them.
- Realtime chat for each project on Supabase Realtime, with file attachments in Storage.
- Notes in a TipTap editor, stored as Markdown, with version restore. Any note can be viewed as a mind map.
How it fits together
The browser calls Next.js server actions, which read and write Supabase Postgres with RLS on every table. Chat messages stream back through Supabase Realtime, and attachments live in a Storage bucket. A database trigger creates a profile for each new user, and roles on that profile decide who can manage invites and delete projects.
Status
Live in alpha at projectdive.app. Tickets, timesheets and integrations (GitHub, Stripe, Zapier) are next, along with usability work on boards and notes.