Guides
Demo & sales guide
How to run a compelling demo of OpsDash, switch tiers for sales calls, and use the built-in seed data.
The demo narrative
The most effective demo follows the profitability story:
- Open the Dashboard — show KPI cards: Pipeline Value, Won Revenue, Win Rate. Ask: “Do you know these numbers right now without opening a spreadsheet?”
- Open the Pipeline (CRM → Deals) — show a deal in Proposal stage. “This is the money in the funnel.”
- Click a won deal — show it's linked to a Project. “The moment a deal is Won, delivery starts. No re-entry.”
- Open the linked Project — show tasks, assignees, time tracking. “Your team logs time here.”
- Go to Dashboard — show Expected Revenue (weighted pipeline). “This is what you should expect this quarter based on probability.”
- Ask the question: “If your senior developer spends many hours on a fixed-price project, do you know labor cost vs. margin right now — not after close?” Pause. “OpsDash connects deal value and delivery work so you can see it.”
- Show Reports — Pipeline Velocity, Project Progress, Account Analytics. “This is the operating system for your entire business.”
Setting up demo data
Fastest path: supabase db reset — resets and re-seeds from supabase/seed.sql. The seed creates:
- 12 contacts with extended fields (lead source, company size, industry)
- 8 companies including several with renewal dates and upsell opportunities
- 15 deals across all pipeline stages (including Won deals spread across 12 months — gives Analytics realistic YoY shapes)
- 3 projects linked to won deals, with tasks, subtasks, and time entries
- 2 published forms with submissions
- 9 custom field definitions across all entity types
- Support tickets at various priority/category/status combinations
To connect your user to the demo org:
-- Find your user UUID
SELECT id, email FROM auth.users;
-- Link to demo org
INSERT INTO public.org_members (user_id, org_id, role)
VALUES ('<your-uuid>', '00000000-0000-0000-0000-000000000001', 'owner');
-- Switch to demo org
UPDATE public.users
SET current_org_id = '00000000-0000-0000-0000-000000000001'
WHERE id = '<your-uuid>';Switching plates for sales demos
To show what a higher plate unlocks during a demo, set the org's plate directly on its subscription. Gating is resolved solely from subscriptions.plan — when it holds a plate id (free | studio | sales | growth | full_loop | agency), that IS the plate; any other value (including the retired pro/business/enterprise strings) resolves to free. There is no sync_entitlements_from_plan RPC — setting the plan is all that's needed. In dev/demo you can also use the bottom-right plate switcher, which writes subscriptions.plan for you.
-- Switch demo org to the Full Loop plate (any plate id works)
UPDATE public.subscriptions
SET plan = 'full_loop', status = 'active'
WHERE org_id = '00000000-0000-0000-0000-000000000001';Reset to Free to demonstrate gating and upgrade prompts:
UPDATE public.subscriptions
SET plan = 'free', status = 'active'
WHERE org_id = '00000000-0000-0000-0000-000000000001';Key objections and responses
| Objection | Response |
|---|---|
| We already use HubSpot | HubSpot stops when the deal is won. OpsDash connects the sale to the delivery so you can see real margin — HubSpot cannot do that. |
| Is this a SaaS or software we own? | It's deployed on your own server. You own the data. You own the infrastructure. No per-user fees after setup. |
| What happens when you update the product? | Updates come as code changes — you control when to pull and deploy. No forced updates. |
| Is it secure? | All data is scoped by organization with Row-Level Security at the database level. Sessions are in HTTP-only cookies. Every mutation is audit-logged. |