Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證AI phone receptionist for Aangan Studio
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Answers every call, qualifies the lead, books a consultation for good leads, and hands them to a designer with full context. Every call (qualified or not) is logged in the database (Neon Postgres), the dashboard and the CRM.
Live: https://aangan-receptionist-gamma.vercel.app · free voice demo at /talk
| Step | Component | Tool | What it does | Status |
|---|---|---|---|---|
| Trigger | Customer calls | Vaani (app.vaanivoice.ai) phone agent | Call starts, any hour | ✅ Agent created · ⏸ phone number not bought (paid) |
| Trigger (free) | Browser call | /talk page — Chrome Web Speech API + Gemini | Same agent script, spoken in the browser; free alternative to a phone number | ✅ Live |
| Input | Caller details | Vaani / /talk | Name, area, company, space type, size, budget, timeline, callback number, email, preferred slot | ✅ |
| Context | Seed data | seed/services.md, seed/qualified.md | Guide the agent and classifier. pricing.md does not exist and is refused by seed.ts | ✅ (placeholder content) |
| AI | Voice agent | Vaani (Cartesia voice, Gemini brain) | Consent notice first, qualifying questions, never quotes prices or commits | ✅ |
| Webhook | Post-call event | POST /api/webhooks/vaani?token=… | Receives call_postprocessing, stores raw event, recovers phone from call_started | ✅ Tested |
| Storage | Call log | Neon Postgres (replaced Supabase) | calls, bookings, crm_mock, webhook_events tables | ✅ |
| Processing | Classifier | Gemini (gemini-3.8-flash) | Tags qualified / unqualified + one-line reason + category, extracts fields, writes summary | ✅ |
| AI | Booking | Cal.com API v2 | Qualified + agreed: books the free slot nearest the caller's preference right after the call (Vaani can't call APIs mid-call) | ✅ Real booking tested |
| Output | Designer handoff | Resend | Email to the round-robin designer: summary, caller details, booking | ✅ (test sender → own inbox only) |
| Output | CRM | HubSpot (service key) | Every lead → contact; qualified → deal (stage: qualified / appointment scheduled) | ✅ Tested |
| Output | Dashboard | Next.js 16 on Vercel | Calls today/week/month, after-hours share, answer rate, lead quality, reasons, leads per designer, tool cost; no phone numbers or transcripts | ✅ |
| Code | Repo | GitHub (private) | Push to main → Vercel deploys | ✅ |
Phone call (Vaani) ─┐ ┌─ qualified ─→ Cal.com booking → Resend email → HubSpot deal
├─→ save to Neon → Gemini ┤
Browser call (/talk) ─┘ └─ unqualified → HubSpot contact (logged, never dropped)
↓
Dashboard (Vercel) reads Neon
Cost: ₹0 — every tool runs on a free tier. Only a real phone number would cost money (Vobiz via Vaani: ₹100 setup + ₹500/month, plus ≈₹5.60/min of Vaani call time).
seed/ services.md, qualified.md (placeholders — the ONLY files the agent/classifier may load)
samples/ 4 sample calls for the "Simulate call" button
db/schema.sql calls, bookings, crm_mock tables (Neon Postgres)
scripts/ print-agent-prompt.mts → paste output into Vaani's agent config
src/proxy.ts basic auth for dashboard + /api/test-call (DASHBOARD_PASSWORD)
src/app/page.tsx dashboard (no phone numbers or transcripts)
src/app/api/
webhooks/vaani/ post-call webhook (signature-verified in real mode)
test-call/ runs a sample through the whole flow synchronously
tools/availability/ mid-call tool: next Cal.com slots
tools/book-consultation/ mid-call tool: book a slot
src/lib/
voice/ adapter: vaani.ts (real) | mock.ts, chosen by VAANI_API_KEY
crm/ adapter: hubspot.ts (real) | mock.ts → crm_mock table, chosen by HUBSPOT_ACCESS_TOKEN
pipeline.ts save → classify → book/assign/email → CRM; each step's failure logged, call never dropped
classify.ts Gemini Flash, JSON schema output, cost from token usage
calcom.ts email.ts designers.ts seed.ts stats.ts time.ts env.ts db.ts
npm installdb/schema.sql.cp .env.example .env.local and fill in at least DATABASE_URL (Neon connection string) and GEMINI_API_KEY.npm run dev → open http://localhost:3000 → pick a sample → Simulate call.Anything left empty runs in mock/skip mode and shows as a badge on the dashboard:
Vaani → mock webhook, HubSpot → crm_mock table, Cal.com → fake bookings, Resend → logged only.
Adding the key to .env (and redeploying on Vercel) switches to the real integration; no code changes are needed.
This machine blocks Next's native compiler (Windows Application Control), so the scripts use
--webpack. That works the same on Vercel.
npm run agent-prompt → paste into the Vaani agent's system prompt. The first message is the recording-consent notice.https://<your-app>.vercel.app/api/webhooks/vaani, event call.completed. Put the signing secret in VAANI_WEBHOOK_SECRET.POST /api/tools/availability and POST /api/tools/book-consultation
(body { start, name, email, phone, call_id }), header x-tool-secret: $VAANI_TOOL_SECRET.call.completed field names, so src/lib/voice/vaani.ts reads several likely keys. Check the first real payload and adjust.| Rule | Where |
|---|---|
| Never quote prices | seed.ts allow-lists only services.md/qualified.md and refuses any pric* file; agent prompt forbids it; there is no pricing.md |
| No commitments / complaints | agent prompt (voice/agent-prompt.ts) |
| Recording consent | first line of the agent prompt (CONSENT_GREETING) |
| Unqualified leads never dropped | saveCall runs before anything else; classifier failure → needs_review; CRM sync runs for every status |
| No keys in code | everything comes from env.ts; .env* is gitignored |
DATABASE_URL + Gemini key → simulate all 4 samples, check the dashboard + crm_mockDASHBOARD_PASSWORDvaani.tsneeds_review, WhatsApp/web-form adapters producing NormalizedCall