Skip to main content

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

  1. Terminal 1: npm run emulators
  2. Terminal 2: npm run seed:launch-fixture
  3. Terminal 3: npm run dev:vite
  4. Browser: http://localhost:3000/login — have the tab open
  5. Login shortcut: “Enter local workspace access” auto-logs in as SuperAdmin.
  6. (Optional) second browser profile / incognito window ready for the grantor portal at http://localhost:3001.
Verify the fixture is fresh by checking the admin cockpit loads real tiles (not “Loading…”) within 5 seconds of login.

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.
Why it matters: “One screen. Zero context switching. Every number is drillable to the record that produced it. This is Maria’s anchor for the entire day.”

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.
Show:
  • The Related panel 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.”
Say:
“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.
Show:
  • The Related panel 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.”
Switch tab → the submitter’s view Navigate: /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.
Switch to the portal tab (incognito window at 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

SymptomFix
Admin cockpit shows “Loading…” > 5 secondsFixture 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 approvalEventBus subscriber may not be wired. Confirm initEventNotificationSubscriber is being called in DomainProviders.tsx.
Drilldown panel is empty on a recordFixture lacks FK for that record — expected for unseeded edges. Pick a different record.
Related link clicks but modal doesn’t open on the targetThe 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:
  1. /admin/overview — 4 tiles render real data within 5 sec.
  2. /grant-control — select a grant, Related panel visible below the tab content.
  3. /finance/expenses — click a row to open detail modal, Related panel present.
  4. Navigate via a Related link (e.g. project) — target drawer auto-opens.
  5. /overview — bell badge present (may be 0); clicking opens NotificationCenter.
  6. http://localhost:3001/pt-1-oranje-p0-001 — grantor portal loads a project dashboard.
This is also the Playwright-automatable smoke (TODO: lands as tests/e2e/launch-demo.spec.ts — a non-gating smoke spec).