RevOps · Quote-to-Cash Flow Inspector

Q2See

Signed contract. No invoice. Nobody's panicking yet. They will be.

Buyer & pain

Revenue Systems Engineer / Salesforce BSA / RevOps Architect — quote-to-cash is the highest-stakes RevOps seam. When it breaks, real dollars disappear: un-invoiced contracts, un-billed renewals, amount mismatches that got paid at the wrong number. Nobody renders the full chain — Opportunity → Quote → Contract → Invoice → Renewal — as a navigable, per-record graph where you can click a broken handoff and get a structured, system-attributed diagnosis.

Problem

Salesforce CPQ surfaces quote state. Ironclad surfaces signature state. Stripe surfaces invoice state. No native join confirms the contract-exec trigger fired into billing. Orphaned contracts are invisible. The failure manifests as: "we have 12 signed contracts that did not trigger invoicing — find them." That's a custom SOQL query + a CSV + a meeting. Q2See replaces that meeting.

Before

Crestline Digital signed on March 14. The Workato recipe was paused during a Stripe API key rotation and never resumed. 77 days later, $48,000 has not been collected. Nobody noticed because the payment didn't fail — it never happened.

After

One click on the red-glowing Contract node: CRITICAL — Invoice never created. System owner: Workato recipe cpq-to-stripe-prod. Status: PAUSED. Cause: recipe suspended during key rotation, never resumed. Fix: four numbered steps. Revenue recovered.

What the 30-second demo proves

  1. Object-level Q2C architecture — Contract, Quote, Invoice, and Renewal are modeled as distinct objects with their own owners, states, and linking keys. Not interchangeable nouns.
  2. Handoff-level diagnosis, not dashboard-level reporting — each broken edge names the owning system (CPQ / CLM / Workato / Zapier), the exact trigger that failed, and the step-numbered fix.
  3. System thinking, not record-tailing — the six planted breaks are the actual production failure modes: orphaned contract, amount mismatch from race condition, term gap, orphaned quote, currency mismatch, null renewal owner.
  4. Engineering, not configurationHandoffEdge is a first-class type; rules are pure functions; dagre layout + React Flow custom nodes. This is built, not clicked together.

How it works

  1. Flow graph — 40 synthetic opportunities threading through five node columns (Opportunity → Quote → Contract → Invoice → Renewal). Edges color-coded by handoff health: healthy muted green, warning amber, broken red-orange, at-risk orange. Graph centers on the most critical finding (B-01, Crestline Digital) on load.
  2. Inspector panel — clicking any node opens the inspector: object type, linked records, system owner, verbatim "What Broke / Which System Owns It / The Fix" structured finding for flagged nodes.
  3. Six planted handoff breaks — B-01 orphaned contract ($48k, Workato paused), B-02 amount mismatch ($2,400 delta, race condition), B-03 term gap (14-day billing window), B-04 orphaned quote (rep created two), B-05 currency mismatch (Canadian entity added mid-deal), B-06 null renewal owner (CSM departed, never reassigned).
  4. Findings rail — all active anomalies pinned to the bottom with "Jump to node" links that center the graph and open the inspector.

Integration surface

Static Astro site with a Preact island for the interactive graph. All data is synthetic JSON fixtures — no Salesforce OAuth, no Stripe API, no backend, no secrets. The "Connect Salesforce CPQ" and "Connect Stripe" flows are illustrative; the architecture for wiring them is documented in the spec. Deploys as a Cloudflare Pages subpath.

Skills proven

Roles this maps to

Try the live demo → dallascrilley.com