Django 5 + DRF
5 apps · 8 models · webhook endpoints for Vapi & Twilio · service layer for Claude + OpenAI Vision. Migrations included.
apps/{core,leads,calls,quotes,ai}Hearthline is open source. Same dashboard you saw on the home page, same AI pipeline, the same code we ship in the YouTube build-alongs — yours under MIT.
What's in the repo
Every box below is wired up in code. No "coming soon" labels. Empty fields just mean you haven't filled in your API keys yet.
5 apps · 8 models · webhook endpoints for Vapi & Twilio · service layer for Claude + OpenAI Vision. Migrations included.
apps/{core,leads,calls,quotes,ai}App Router, server components, real-time dashboard with KPIs, lead detail, quote line items, customers, settings.
app/dashboard/{leads,calls,quotes,…}POST /api/calls/webhooks/vapi/ persists the transcript, kicks off Claude extraction, creates a Lead with structured fields.
apps/calls/views.pyTranscript → structured lead JSON. Customer photo → drafted quote with line items, tax, and PDF-ready notes.
apps/ai/services.pySingle docker volume. Seed command included — one shell command and you have 8 leads, 5 calls, 4 quotes to play with.
manage.py seed_demo --wipeThree services: db, backend, frontend. Hot-reload mounted on both apps. No build tooling, no Vercel config, no AWS.
docker-compose.ymlThe pipeline
Six stages, each one a single function or webhook in the codebase. Trace it with your IDE in five minutes.
VapiCaller is greeted by the configured AI persona. Vapi handles STT + TTS.
POST /api/calls/webhooks/vapi/Django persists Call row with transcript, summary, and raw payload.
extract_lead_from_transcript()Strict-JSON pull of customer name, trade, urgency, value, follow-ups.
Lead.objects.create(...)Customer is linked or created. Conversation + Message rows are written.
POST /api/quotes/from-photo/Vision pipeline drafts line items, subtotal, tax, total, customer-facing notes.
GET /api/leads/Server component re-fetches, action pill flips to Quote Sent / Booked / Won.
Get it running
# 1 — clone
git clone https://github.com/codewithmuh/hearthline.git
cd hearthline
# 2 — copy the env template (works without API keys)
cp .env.example .env
# 3 — bring it up
docker compose up --build
# you now have:
# http://localhost:3000 Next.js dashboard
# http://localhost:8000/admin Django admin
# http://localhost:8000/api REST APIRun the seed command and the dashboard fills with believable rows.
docker compose exec backend \ python manage.py seed_demo --wipeDrop your Vapi key in .env and point the assistant webhook at:
https://<ngrok>/api/calls/webhooks/vapi/ Read the READMEBuilt in public
Pull requests welcome. Each line below is a real GitHub issue.
Built by
I make AI build-along videos for developers. Hearthline is one of the projects I'm shipping live — the codebase here is the same one in the videos. If you're learning to ship AI agents end-to-end, the channel walks through every line.
MIT-licensed. No attribution required. The dashboard you've been scrolling through is the one you'll get.