"Close more deals — wherever your conversations happen."
DealPulse is an AI-powered sales agent built for both Western and emerging markets. It connects HubSpot, WhatsApp, Facebook Messenger, and Instagram, automatically builds your pipeline from real conversations, detects stalled deals, researches prospects, and drafts culturally-aware follow-ups with human-in-the-loop approval.
- Multi-channel pipeline — Sync deals from HubSpot, auto-create deals from WhatsApp/Messenger/Instagram conversations
- Stalled & cold deal detection — Surface deals with no activity for 7+ days (stalled) or 14+ days (cold)
- AI-powered drafting — Claude drafts formal emails or casual, culturally-aware WhatsApp messages
- Airia orchestration — Hackathon-ready integration with Airia for AI agent workflows
- Prospect research — Context-aware research before drafting
- HITL approval — Review and edit drafts before sending via the dashboard
- Source of truth — Log agent activity back to HubSpot when deals originate there
- WhatsApp templates — Send business-initiated template messages via Twilio
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), React, Tailwind CSS |
| Backend | Next.js API Routes |
| Database | Supabase (PostgreSQL) |
| AI | Claude (Anthropic), Airia |
| Twilio | |
| CRM | HubSpot |
| Deployment | Vercel |
git clone https://github.com/Ekfuingei/DealPulse.git
cd DealPulse
npm install --legacy-peer-depsCopy the example and fill in your credentials:
cp .env.local.example .env.localRequired variables:
| Variable | Description |
|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Supabase anon key |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key |
ANTHROPIC_API_KEY |
Claude API key |
TWILIO_ACCOUNT_SID |
Twilio account SID |
TWILIO_AUTH_TOKEN |
Twilio auth token |
TWILIO_WHATSAPP_NUMBER |
Your Twilio WhatsApp number (e.g. whatsapp:+14155238886) |
HUBSPOT_ACCESS_TOKEN |
HubSpot private app token |
AIRIA_API_KEY |
Airia API key (for hackathon) |
AIRIA_AGENT_URL |
Airia agent execution URL |
NEXT_PUBLIC_APP_URL |
Your app URL (e.g. http://localhost:3000 or ngrok URL) |
Run the migration in Supabase:
- Go to Supabase Dashboard → SQL Editor
- Paste contents of
supabase/migrations/001_init.sql - Run
npm run devOpen http://localhost:3000.
- Join the Twilio WhatsApp Sandbox — send
join <code>to the sandbox number - Set webhook URL:
https://YOUR_NGROK_URL/api/whatsapp/webhook(POST) - For local dev, use ngrok:
ngrok http 3000 - Set
NEXT_PUBLIC_APP_URLto your ngrok URL
Point the Twilio webhook to your deployed app:
https://your-app.vercel.app/api/whatsapp/webhook
| Endpoint | Method | Description |
|---|---|---|
/api/deals |
GET | List all deals |
/api/deals |
POST | Create a deal |
/api/deals/stalled |
GET | Get stalled & cold deals |
/api/hubspot/sync |
POST | Sync deals from HubSpot |
/api/whatsapp/webhook |
GET/POST | Twilio webhook (incoming messages) |
/api/whatsapp/send-template |
POST | Send business-initiated template |
/api/agent-activities |
GET | List agent activities |
/api/agent-activities/[id]/approve |
POST | Approve & send pending draft |
curl -X POST http://localhost:3000/api/whatsapp/send-template \
-H "Content-Type: application/json" \
-d '{
"to": "whatsapp:+237655536083",
"contentSid": "HX_YOUR_TEMPLATE_SID",
"variables": { "1": "12/1", "2": "3pm" }
}'DealPulse/
├── src/
│ ├── app/
│ │ ├── page.tsx # Dashboard
│ │ ├── pipeline/page.tsx # Pipeline view
│ │ └── api/
│ │ ├── whatsapp/ # webhook, send-template
│ │ ├── hubspot/ # sync
│ │ ├── agent/ # run
│ │ ├── agent-activities/ # list, approve
│ │ ├── deals/ # CRUD, stalled
│ │ ├── messenger/ # webhook
│ │ └── instagram/ # webhook
│ ├── components/
│ │ ├── Pipeline.tsx
│ │ ├── DealCard.tsx
│ │ ├── AgentActivity.tsx
│ │ └── ApprovalModal.tsx
│ └── lib/
│ ├── supabase.ts
│ ├── anthropic.ts
│ ├── airia.ts
│ ├── whatsapp.ts
│ ├── hubspot.ts
│ └── research.ts
├── supabase/migrations/
└── .env.local.example
DealPulse deploys as a single app — frontend and API routes run together on Vercel.
- Push your code to GitHub
- Go to vercel.com → Add New → Project
- Import
Ekfuingei/DealPulsefrom GitHub - Environment Variables — Add each from
.env.local.example:NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEYANTHROPIC_API_KEYTWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKEN,TWILIO_WHATSAPP_NUMBERHUBSPOT_ACCESS_TOKENAIRIA_API_KEY,AIRIA_AGENT_URL,AIRIA_PIPELINE_IDWHATSAPP_VERIFY_TOKEN,MESSENGER_VERIFY_TOKEN,INSTAGRAM_VERIFY_TOKENAGENT_SEND_DIRECTLY(optional, default:false)
- Deploy — Vercel will build and deploy
- After deploy, set
NEXT_PUBLIC_APP_URLto your Vercel URL (e.g.https://dealpulse.vercel.app) - Update Twilio webhook to
https://your-app.vercel.app/api/whatsapp/webhook
npm i -g vercel
vercelFollow the prompts, then add environment variables in the Vercel dashboard.
MIT