Investor relations for a seed or Series A raise.
Next.js · Supabase · Vercel · MIT
Live demo · Onboarding · Deploy · Vercel + Supabase
A partner opens this between board meetings. They scan the numbers, open
the room, download what they need. You see the session in /admin.
Fork it. Put your name, domain, and documents in. Deploy. Sample pages are templates — fill them from your books.
New here? docs/ONBOARDING.md is the full checklist (brand, fonts, Supabase, Google login, Vercel).
git clone https://github.com/emal-avala/data-room.git
cd data-room
./scripts/onboard.sh
bun install && bun dev # http://localhost:3000Live demo: data-room-coral.vercel.app — the Next.js app on Vercel (mock auth when Supabase is unset).
| Step | What to do |
|---|---|
| 1 | Supabase project. SQL Editor: supabase/migrations/001_schema.sql, then supabase/seed.sql. |
| 2 | Auth → Google and/or Azure. Redirect https://<project>.supabase.co/auth/v1/callback. Site URL = your Vercel URL. App redirect = https://<app>.vercel.app/auth/callback. |
| 3 | Vercel env from .env.example. SUPERADMIN_EMAIL is the address you sign in with. |
| 4 | Deploy. Sign in. Open /admin. Sync documents. Approve the rest of the team on /admin/access. |
docs/deploy/vercel-supabase.md · docs/deploy/environment-variables.md
| Route | What it is |
|---|---|
/ |
Acme overview: metrics, why-now, recognized revenue, contracted yards. |
/roadmap |
Path, next ship, competitive matrix. |
/financials |
Books hub — P&L, forecast, pipeline, revenue by customer. |
/docs, /docs/[slug] |
Data room. Registry: src/lib/documents.ts. |
/company, /contact |
Founders, offices, risks, IR contact. |
/login |
Google + Microsoft. New emails go to /pending-approval. |
/admin |
Access queue, viewers, rooms, analytics. |
How a viewer gets in:
- Middleware refreshes the Supabase session.
- Verified email on your domain, an env allowlist, an admin row, or an approved waitlist row.
- Each viewer maps to one fund and one room (core or full). A broken room shows zero documents.
- Decks and PDFs are stamped with their email. Files live in
content/documents/, notpublic/.
| Job | File |
|---|---|
| Name, domain, accent | .env.local / src/config/site.ts |
| Font | src/app/layout.tsx |
| Colors | src/app/globals.css + DESIGN.md |
| Copy | docs/guides/branding.md |
| Documents | docs/guides/add-document.md |
| Rooms | docs/guides/dataroom-variants.md |
| Guide | |
|---|---|
| Onboarding | Brand → Supabase → Vercel |
| Vercel + Supabase | Production |
| Environment variables | Every key |
| Local development | Supabase CLI |
| GitHub Pages (retired) | Do not republish demo/ |
| Branding | Name, color, font, copy |
| Deck theme | Ten-slide HTML deck + restyle |
| Add a document | Registry + gating |
| Room variants | Core vs full |
| Analytics | Events, digest |
| Database | Tables + RLS |
| Auth flow | Login → room |
Coding agents: AGENTS.md.
src/app/ Pages, admin, API
src/lib/ Auth, documents, rooms, analytics
src/config/ Company defaults
content/documents/ Decks and PDFs (not public/)
supabase/ Schema + seed
docs/ Onboarding and how-to
demo/ Local HTML snapshot (not a public host)
scripts/onboard.sh Copy .env.example