Multi-tenant wedding planner SaaS
One platform, many planning agencies — each with their own brand, domain, and tenant boundary enforced at the database row.
Capabilities
Workspace tenancy
Every wedding, vendor, contract, and telemetry log is scoped to a workspace and enforced by row-level security in Postgres.
White-label branding
Upload a logo, pick an accent color, provision a subdomain — the client-facing portal renders in the planner's brand with invisible attribution.
Per-tenant client portals
A public portal route resolves the planner's brand server-side and renders a data-safe view of the couple's wedding state.
Proof points
- RLS on every public-schema table
- Workspace-scoped storage buckets with signed URL access
- Service-role isolation — admin client never reaches the browser
Frequently asked
How is tenant isolation enforced?
Every row carries a workspace_id and every policy gates access via is_workspace_member(workspace_id, auth.uid()) — a security-definer function that bypasses recursive RLS and prevents cross-tenant reads.
Can each planning agency use its own domain?
Yes. White-label management lets a planner provision a custom subdomain or domain; the public portal resolves branding server-side from the request host.
Is the white-label badge removable?
Agencies on the Pro tier can toggle 'Powered by WeddingVerse' attribution on or off per workspace.