Documentation Index
Fetch the complete documentation index at: https://grantmaster.dev/llms.txt
Use this file to discover all available pages before exploring further.
GrantMaster — Launch Demo Script (15 min)
A scripted, runnable walkthrough that exercises every launch-critical capability on the Acme NGO fixture. Follow this verbatim until it’s muscle memory, then improvise. Every click path is deliberate: it showcases the integrated lifecycle without once asking “can I re-enter the budget?” or “did that approval go somewhere?”Before the demo
- Terminal 1:
npm run emulators - Terminal 2:
npm run seed:launch-fixture - Terminal 3:
npm run dev:vite - Browser:
http://localhost:3000/login— have the tab open - Login shortcut: “Enter local workspace access” auto-logs in as SuperAdmin.
- (Optional) second browser profile / incognito window ready for the grantor portal at
http://localhost:3001.
The story arc
“You are Maria, Operations Director at a Dutch NGO called Acme that runs 6 projects funded by 2 active grants and a pipeline of 10 opportunities. Today is a normal Tuesday. Let me show you what GrantMaster does across your day.”
Act 1 (3 min) — the cockpit
Click:/admin/overview
Say:
“This is where Maria starts her day. Four tiles, all live data — not mock. Pending approvals across expenses, journals, applications, and portal responses. Upcoming reporting deadlines. Compliance alerts tied to specific grants. At-risk budgets ranked by tier.”Show:
- Hover the Approvals tile → each row is clickable → drills to the filtered list.
- Click
admin-approval-row-expense→ lands on/admin/approvals?type=expense. - Back to cockpit.
Act 2 (3 min) — from grant to project, in one click
Navigate:/grant/tracker (pipeline view)
Say:
“Here’s Acme’s pipeline. 10 opportunities at various stages. Maria worked a Dutch RVO grant through the pipeline — it got awarded last week. Watch what happens when she moves it to ‘active’.”Click:
- Open a pipeline entry in a late stage.
- Navigate to
/grant-control(Grant Control / post-award). - Select the won grant.
- The
Relatedpanel at the bottom of the grant detail (this is the lifecycle drilldown spine).- Upstream: Application → Pipeline → Grantor.
- Downstream: Linked project(s) + reports.
- “Every item on this panel is clickable — click the project, land on the project; click the grantor, land on the grantor page. No sidebar navigation required.”
“Maria didn’t re-enter a single budget line, a single milestone, or a single reporting deadline. The grant terms flowed through to the project. Zero data re-entry across the entire handoff.”
Act 3 (3 min) — execution: approvals + effort tracking
Switch tab → simulate a manager Navigate:/finance/expenses
Say:
“Maria’s team is now executing against the grant. Here’s the expense list. One of Maria’s project leads just approved a travel expense.”Click:
- Approve a pending expense row (use the row-level approve button).
- Watch the toast fire.
- Open the detail modal on an approved expense.
- The
Relatedpanel at the bottom of the expense detail modal.- Upstream: project → active grant.
- Peers: other expenses on the same project.
- Click the project link → the project drawer auto-opens (URL auto-open pattern).
- “This is the drilldown spine in action: expense → project → grant, back to expense. Everything connected.”
/overview
Show:
- The bell badge in the header ticks. Click it.
- Notification panel opens: “Your expense of €42 has been approved by Manager.”
- “The workflow engine isn’t silent. Every state transition produces a visible signal — bell badge for the next session, in-app toast if you’re live.”
Act 4 (3 min) — compliance, trust, and the grantor portal
Navigate:/compliance
Say:
“Acme operates under Dutch ANBI regulations plus grant-specific compliance policies. 119 platform policies + ~20 tenant-specific. When a grant is at 85% spend with a report due in 7 days AND a required document missing, that becomes a specific alert tied to that grant.”Show:
- Active alerts list (if seeded).
- Click one → drills to the grant.
http://localhost:3001/<token>)
Say:
“Meanwhile, Acme’s grantor — Oranje Fonds — has a secure tokenized link. No GrantMaster account. Read-only view of their grant’s project dashboard, submitted reports, linked documents.”Show:
- Load
http://localhost:3001/pt-1-oranje-p0-001. - Sandra de Vries (Oranje Fonds) sees the project dashboard.
- Budget, milestones, compliance, reports.
- “If Maria had authored a Q2 report here, Sandra could acknowledge it right from this portal. That acknowledgement pings Maria’s bell back in the main app.”
Act 5 (2 min) — audit: the evidence chain never breaks
Switch back to the main app, log in as Auditor Navigate:/audit-dashboard
Say:
“Auditors get a time-boxed access grant. They can traverse the entire evidence chain for any grant — application → approvals → expenses → journals → documents → submitted report → grantor acknowledgement. Every step resolves to real data; nothing is an empty state.”Show:
- Pick a grant.
- Walk: application → approvals → expenses (open one, show related panel linking up to project and grant) → journals → documents → reports.
- Attempt to click “New expense” — absent. “The UI hides write actions; the Firestore rules layer independently denies them. Two layers of defense.”
Act 6 (1 min) — the pitch
Return to the admin cockpit. Say:“That’s GrantMaster end-to-end: one product that follows Maria’s team across discovery → pipeline → application → award → project → execution → reporting → audit. No spreadsheet. No re-entered data. No ‘did that save?’ moment. We are launching July 1, 2026. Acme NGO is the demo — your pilot fits here with one click.”
Troubleshooting mid-demo
| Symptom | Fix |
|---|---|
| Admin cockpit shows “Loading…” > 5 seconds | Fixture not seeded. Run npm run seed:launch-fixture in a separate terminal. |
| Portal URL shows “Portal Access Required” | Portal dev server isn’t running. cd portal && npm run dev in terminal 4. |
| Bell badge doesn’t tick after approval | EventBus subscriber may not be wired. Confirm initEventNotificationSubscriber is being called in DomainProviders.tsx. |
| Drilldown panel is empty on a record | Fixture lacks FK for that record — expected for unseeded edges. Pick a different record. |
| Related link clicks but modal doesn’t open on the target | The auto-open URL pattern isn’t wired for that surface yet. Known gap on journals; expenses, projects, grants all work. |
Fallback 30-second version
If you have exactly 30 seconds to convey the product:“GrantMaster is one operating system for an NGO’s entire grant lifecycle. A grants manager discovers an opportunity, works it through pipeline to award, clicks once to create a project with the budget and reporting calendar pre-filled. Her team logs expenses and journals against the grant; approvals route automatically; the grantor gets a secure portal for evidence and acknowledgement; an auditor traverses the whole chain read-only. No spreadsheet. No re-entered data. No gaps between discovery and reporting.”
Regression smoke version (non-narrative)
For use as a checkout smoke before a deploy — ignore narration, just click the path:/admin/overview— 4 tiles render real data within 5 sec./grant-control— select a grant, Related panel visible below the tab content./finance/expenses— click a row to open detail modal, Related panel present.- Navigate via a Related link (e.g. project) — target drawer auto-opens.
/overview— bell badge present (may be 0); clicking opens NotificationCenter.http://localhost:3001/pt-1-oranje-p0-001— grantor portal loads a project dashboard.
tests/e2e/launch-demo.spec.ts — a non-gating smoke spec).