Recurve AI — Project Story

Inspiration

We wanted an SDR that learns from its own mistakes and reacts to real-world events—not a static playbook. Recurve AI is that: it generates strategy from a product description, validates leads with live data, stores corrections in a graph, and refines itself—and can react to triggers like competitor outages.

What it does

You give it a product description (text or voice). It generates an ICP, keywords, and competitors (Tavily + SLM), stores strategy in Neo4j, and finds leads. Each lead is fact-checked and classified as Strike (pursue), Monitor (watch), or Disregard (skip). Disregards create Lesson nodes; the agent uses them to refine the next strategy. A scout can poll a status URL and, on change (e.g. outage), draft context-aware outreach for affected leads. The dashboard shows strategy, lead list, live activity feed, strategy timeline, and a knowledge graph of strategies, companies, evidence, and lessons.

How we built it

Frontend: React 19, TypeScript, Vite, Tailwind; WebSocket activity feed; react-force-graph-2d for the graph. Backend: FastAPI with REST + /api/ws/feed; background scout worker and async agent pipeline. Data: Neo4j for Strategy, Company, Evidence, Lesson and relationships. Services: Tavily (research + fact-check), Fastino Pioneer / Qwen3-8B (strategy, classification, pivot emails), Modulate (voice). Deployed on Render.

Challenges we ran into

Keeping SLM outputs and the agent loop consistent; making the UI feel live with one WebSocket feed and event-driven refresh; running the scout as a lifespan task and making the mock-outage demo reliable; designing the Neo4j schema for versioned strategies and lesson/evidence links.

Accomplishments that we're proud of

Self-improvement loop from product description → strategy → validation → lessons → refinement with no human in the loop. Graph as the brain: Neo4j powers a visible knowledge graph. Trigger-based pivots when the scout sees status changes. Voice input for product description. Clear split between API, agent logic, and dashboard.

What we learned

Storing corrections in a graph (Lesson/Evidence, EVOLVED_FROM) makes the agent auditable and gives a clean input for refinement. A single WebSocket feed plus event-driven refresh beats polling. Background workers in FastAPI need careful lifespan and error handling.

What's next for Recurve AI

Richer lead discovery from the ICP; more trigger types (funding, hiring, tech changes); sending drafted pivot emails; multi-product and strategy A/B tests; production hardening (rate limits, retries, observability).

Built With

Share this project:

Updates