A small full-stack app on top of a RocketRide pipeline. Place an AI phone call, the agent runs the conversation and captures the transcript into a vector store (RAG memory), every call is logged to a local DB, and you can query past calls from a web UI.
web UI ──► Node/Express ──► RocketRide pipeline (Bland call + Chroma RAG)
│
└──► SQLite (structured call records)
- SQLite (
data.db) — structured call records: who, when, task, status, result. - Chroma (inside the pipeline) — semantic memory for RAG question-answering.
pipeline/voice-call-rag.pipe— the RocketRide pipeline (agent + Bland + Chroma).
npm install
cp .env.example .env # defaults to MOCK_MODE=true — runs with no engine
npm start # → http://localhost:3000Out of the box it runs in mock mode (UI, DB, and flow all work without a live engine), so the app is always demo-safe.
- Have the RocketRide engine running and the pipeline's keys available.
- In
.envsetMOCK_MODE=false, pointROCKETRIDE_URIat your engine (local engine =http://localhost:5565), setROCKETRIDE_APIKEY, and fill theROCKETRIDE_*keys the pipeline references (Anthropic/Qwen + Bland). npm start. The status badge turns engine connected.
The pipeline references API keys as ${ROCKETRIDE_*} — the SDK substitutes them
from this app's .env before running, so keep secrets in .env (gitignored),
not in the .pipe.
- Place a call — phone (E.164) + a task ("ask whether order #4471 shipped").
- Ask the call memory — "What did the customer say?" → answered from RAG.
- Call records — every call logged with status + result.
- The killer demo move: swap the agent's LLM or the vector store inside
pipeline/voice-call-rag.pipe— same app, different substrate, no code change. data.dband.envare gitignored.