Hackathon submission for FlytBase — Inbound BDR / AI-Native Qualifier track.
FlyQualify AI ingests a raw inbound lead (email / contact form text) and, through a visible six-agent AI pipeline, produces an AE-ready opportunity record: parsed facts, an intelligence brief on the company, an explainable BANT + MEDDPICC score, the closest FlytBase reference deployment, a personalised 3-email outreach sequence + LinkedIn + meeting invite, and a Salesforce-grade AE handoff card — all in ~20 seconds.
It is designed to look and feel like real internal enterprise software (Linear / Attio / Salesforce Einstein), not a chatbot.
flowchart LR
U[Inbound email / form text] --> A1
subgraph Pipeline[FastAPI /api/qualify-lead]
A1[Agent 1<br/>Lead Parser] --> A2[Agent 2<br/>Company Research]
A2 --> A3[Agent 3<br/>Qualification<br/>BANT + MEDDPICC]
A3 --> A4[Agent 4<br/>Case Study Match<br/>+ GTM Motion]
A4 --> A5[Agent 5<br/>Outreach Generator]
A5 --> A6[Agent 6<br/>AE Handoff]
end
A6 --> Mongo[(MongoDB — fq_leads)]
A6 --> UI[React dashboard<br/>Sidebar-navigated results]
Every agent is its own Python module in backend/agents/ with:
- its own system prompt,
- a strict JSON output schema enforced in the prompt,
- a deterministic fallback so the app never breaks if the LLM key is absent or rate-limited.
Runs are persisted to MongoDB so the History page reads a real record, not local state.
- Frontend — React 19 + React Router, Tailwind, shadcn/ui, Framer Motion, Recharts, lucide-react, sonner.
- Backend — FastAPI (Python 3.11), Motor (async MongoDB driver).
- AI — OpenAI GPT-4o-mini via the Emergent Universal LLM Key (
emergentintegrations). Model + provider are single env vars so they can be swapped instantly. - Web research — LLM-estimated intelligence (by design — no external search dependency required for the demo). The agent output is honest about being an estimate.
- Storage — MongoDB collection
fq_leadswith a UUID string_id.
| Var | Purpose | Fallback if absent |
|---|---|---|
MONGO_URL |
MongoDB connection string | required |
DB_NAME |
Mongo database | required |
CORS_ORIGINS |
Comma-separated allowlist | * |
EMERGENT_LLM_KEY |
Universal LLM key | App still works — every agent falls back to a deterministic estimate |
LLM_PROVIDER |
openai | anthropic | gemini |
openai |
LLM_MODEL |
Model name | gpt-4o-mini |
REACT_APP_BACKEND_URL |
Frontend → backend base URL | required |
Zero-key demo path: with
EMERGENT_LLM_KEYunset, every one of the six agents falls back to a fully-populated deterministic result. The full UI works end-to-end with no keys configured.
# Backend
cd backend
pip install -r requirements.txt
uvicorn server:app --reload --host 0.0.0.0 --port 8001
# Frontend
cd frontend
yarn install
yarn startThen open http://localhost:3000, load a sample lead, and click Run AI qualification.
| Method | Path | Description |
|---|---|---|
GET |
/api/sample-leads |
3 built-in inbound lead samples |
GET |
/api/case-studies |
Case study library used by Agent 4 |
POST |
/api/qualify-lead |
Runs the 6-agent pipeline. Body: { "raw_text": "…" } |
GET |
/api/leads |
List of historical runs (summary) |
GET |
/api/leads/{id} |
Full run detail |
The app is provisioned on the Emergent platform (FastAPI + MongoDB + React, /api prefix ingress) and is one-click deployable via the Emergent deploy button. The same code can also be shipped to Vercel (frontend) + Render/Railway (backend) since it is a standard FastAPI + React project.
- Home / input
- Live pipeline (six agents animating sequentially)
- Research view
- Qualification (BANT + MEDDPICC)
- Case Study & GTM motion
- Outreach (email tabs + LinkedIn + meeting invite)
- AE Handoff (Salesforce-style)
- History