Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

369 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gtm_ops

voice intake · lead enrichment · LLM extraction · branded PDF · audit trail · ops console

Turn an inbound call into a branded PDF proposal

Demo | Features | Getting started | Architecture | Deploy

One click replays the full 11-step pipeline → synthetic fixtures, no backend, no signup, about 60 seconds.

❤️ Sponsor this project ❤️

CI License Last commit Contributors

GitHub stars Follow on GitHub


The gtm_ops console replaying the full proposal pipeline: brief parse through pricing, compliance, PDF render, and signed audit, ending on a draft ready for operator review

Voice-agent GTM runtime that turns an inbound call into a branded PDF proposal ready for operator review. An ElevenLabs agent takes the call, a provider waterfall enriches the lead, structured LLM extraction generates the proposal, every step writes audit logs, and operators review the result in the ops-console. One repo, one runnable thing, end-to-end against synthetic fixtures (DEMO_MODE) or a live backend.

flowchart LR
    A[Voice intake] --> B[Lead enrichment]
    B --> C[LLM extraction]
    C --> D[PDF render]
    D --> E[Ops console]
Loading

🧭 Features

  • 🧭 Voice intake: an ElevenLabs agent takes the call; the post-call webhook only processes payloads that pass HMAC-SHA256 signature verification.
  • 🧭 Lead enrichment: a provider waterfall adds context to each lead before extraction, falling through Clay (via an n8n webhook), People Data Labs, Abstract API, and Enrich.so until one answers. Fields you supply always win over enriched data.
  • 🧭 Structured LLM extraction: the transcript becomes typed proposal fields through an 11-step pipeline covering intake, extraction, enrichment, pricing, compliance, scope, PDF render, and audit.
  • 🧭 Branded PDF: PyMuPDF renders each proposal from branded HTML templates driven by the token system.
  • 🧭 Audit trail: every pipeline step writes an audit log the console surfaces.
  • 🧭 Ops console: React with no build step; the same UI runs static against bundled fixtures (DEMO_MODE) or a live backend, with the Agents route and the Evals regression lab mounting live ElevenLabs ConvAI playgrounds.
  • 🧭 Presales CLI: the same pipeline runs headless from the command line.

⚡ Try it in 60 seconds

Launch the canned proposal trace →

Click once. The Generate page auto-loads the HVAC sample brief and replays the 11-step pipeline (intake → extract → enrichment → pricing → compliance → scope → PDF render → audit). No backend, no signup, no operator interaction. Lands on a ready-to-review proposal in about 60 seconds.

app.wranngle.com is the canonical host; gtm-ops.pages.dev is the preview host, where DEMO_MODE activates. In DEMO_MODE the page intercepts /api/* and serves bundled fixtures, so the whole console stays interactive without a live backend. /console/?route=evals opens the native eval dashboard and /eval-runs/ serves the harness output.

Generate route Evals route Settings route

Generate, Evals, and Settings routes.

🔌 One vendor per leg

Voice
ElevenLabs conversational agent
Enrichment
Clay, People Data Labs, Abstract API, Enrich.so
Extraction
structured LLM output
PDF
PyMuPDF render
Review
ops console over audit logs

Enrichment chains these providers as fallbacks; every other leg is a single vendor.

🚀 Getting started

Live mode (full Express backend):

  1. Install dependencies, including PyMuPDF for PDF rendering:

    bun install
    python3 -m venv .venv
    .venv/bin/python -m pip install --require-hashes -r requirements.txt
  2. Start the server:

    bun run start   # Express on :3000

Static / DEMO_MODE (no backend, fixture-driven):

cd apps/ops-console
python3 -m http.server 4173   # then open http://localhost:4173/console/

Every /api/* call falls through to bundled JSON fixtures; the same UI runs in both modes. The ElevenLabs Sales Coach and Sarah Intake widgets mount live when the ConvAI embed script is reachable, and fall back to a deep link on elevenlabs.io otherwise. Append ?admin=1 to the console URL to reveal admin-only agents.

🧪 Tests

bun run typecheck         # tsc, no emit
bun run test:run          # 2901 vitest unit tests
bun run test:console      # 451 Playwright console UI tests
bun run test:e2e          # 327 Playwright PDF and report tests
bun run eval:harness      # run this repo through voice_ai_agent_evals

📐 Architecture

ARCHITECTURE.md covers the product layers (intake → enrichment → voice → post-call → presales → ops-console) and the two satellites:

eval-harness.manifest.json encodes the app-to-harness boundary: this repo owns fixtures and test semantics, the harness consumes the manifest and normalizes results.

🎨 Brand system

DESIGN.md is the canonical brand spec. tokens/ carries the machine-readable extracts (tokens.css, tokens.json, tokens.tailwind.js); vendor those into consumer repos rather than copying the long-form spec.

🚢 Deploy

apps/ops-console/ deploys to Cloudflare Pages. Pages Functions under functions/api/ serve a subset of /api/* (D1-backed where bindings exist, fixture fallback otherwise); /api/generate stays Express-only on a separate host.

bun run deploy            # production
bun run deploy:preview    # preview branch
bun run pages:dev         # local CF Pages emulator

Config lives in wrangler.toml, with security and cache headers in apps/ops-console/_headers and fixture fallbacks in apps/ops-console/_redirects.

⭐ Star history

GitHub stars

View the interactive star history, drawn live even while star-history's image API is down.

License

MIT. See LICENSE.

About

Voice-AI GTM runtime: lead intake, LLM extraction, priced PDF proposals, audit logs, and ops-console UI.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages