尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
AI Intake & Operations für Energieberater. Von der ersten Kundenanfrage zum vollständig vorbereiteten Beratungsfall – automatisch. FallFlow ist kein CRM und kein allgemeiner Chatbot. Es übernimmt genau den Teil zwischen Anfrage und Beratung: Kundenanfrage → KI erkennt Angaben → fragt nur Fehlendes → sammelt Dokumente → prüft Vollständigkeit → fasst nach → legt die Fallakte an → Berater übernimmt. Next.js 16 (App Router, proxy.ts), React 19, TypeScript strict, Tailwind CSS 4, Supabase (Auth + Postgres + RLS + Storage), Zod. KI über eine OpenAI-kompatible API, ausschließlich serverseitig.檢視完整 README ↗
AI Intake & Operations für Energieberater. Von der ersten Kundenanfrage zum vollständig vorbereiteten Beratungsfall – automatisch.
FallFlow ist kein CRM und kein allgemeiner Chatbot. Es übernimmt genau den Teil zwischen Anfrage und Beratung:
Kundenanfrage → KI erkennt Angaben → fragt nur Fehlendes → sammelt Dokumente → prüft Vollständigkeit → fasst nach → legt die Fallakte an → Berater übernimmt.
Next.js 16 (App Router, proxy.ts), React 19, TypeScript strict, Tailwind CSS 4, Supabase (Auth + Postgres + RLS + Storage), Zod. KI über eine OpenAI-kompatible API, ausschließlich serverseitig.
npm install
npm run dev # http://localhost:3000
Ohne Supabase-Variablen läuft die App im Demo-Modus (Daten im Arbeitsspeicher, Seed „BA Engineering & Consulting“ mit 7 Fällen). Ohne AI_API_KEY extrahiert ein regelbasierter Mock Angaben aus Freitext. Nützliche URLs: /demo (komplette Demo, läuft im Browser), /dashboard, /dashboard/intake, /dashboard/inbox, /widget/demo (echter Website-Chat gegen die API), /upload/demo-upload-weber (Kunden-Upload).
| Konzept | Umsetzung |
|---|---|
| Intake-Status | NEW → QUALIFYING → WAITING_FOR_CUSTOMER → COMPLETE → READY_FOR_REVIEW → CONVERTED (types.ts, Logik in checklist.ts) |
| Completeness Score | Anteil erfüllter Pflichtpunkte in % = Pflichtangaben (Fragen-Builder) + Pflichtdokumente. Dynamisch aus den Falldaten berechnet, nie manuell gesetzt. |
| Dokumentenbedarf | Grundriss immer; Energieausweis bei Beratungsleistungen (nicht beim Energieausweis selbst); Fotos optional (documentRequirements). |
| Lead-Readiness | Reiner Prozessstatus: Unvollständig / Fast vollständig (≤ 2 fehlen) / Vollständig (100 %) / Bereit zur Bearbeitung. Keine Kaufwahrscheinlichkeit. |
| Statusregeln | COMPLETE = alle Pflichtangaben da, Pflichtdokumente fehlen noch oder wurden erst angefordert. READY_FOR_REVIEW = Angaben da und alle Pflichtdokumente tatsächlich hochgeladen. Ein laufendes Gespräch ohne Aktivität > 30 Min. wird als WAITING_FOR_CUSTOMER angezeigt (abgeleitet, nicht gespeichert). |
| Dynamischer Frage-Flow | conversation.ts: jede Nachricht wird ausgewertet (KI oder Regeln), bekannte Angaben übernommen, nur relevante fehlende erfragt (isRelevant). Keine Beratung, nichts erfunden. |
| Automatik | case-ops.ts refreshCase: Score, Status, Zusammenfassung, automatische Dokumentenanforderung, Follow-up-Planung nach jeder Änderung. |
Siehe .env.example.
| Variable | Zweck |
|---|---|
NEXT_PUBLIC_APP_URL | Öffentliche URL (Upload-Links, OAuth-Redirects, Widget-Snippet) – in Produktion nicht localhost |
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase; wenn gesetzt → Produktivmodus |
SUPABASE_SERVICE_ROLE_KEY | Nur serverseitig: Widget, Kunden-Upload, Datei-Speicher, Cron |
AI_API_KEY, AI_MODEL, AI_BASE_URL | OpenAI-kompatibles Modell (optional; Extraktion und Zusammenfassung) |
CRON_SECRET | Schützt /api/cron/follow-ups (Vercel-Cron, siehe vercel.json) |
GOOGLE_*, MICROSOFT_* | E-Mail-OAuth (vorbereitet) |
STRIPE_* | Abrechnung (vorbereitet) |
case_documents, follow_ups, Kanal-Metadaten, privater Bucket case-documents, neue Standardfragen; migriert bestehende Daten).NEXT_PUBLIC_APP_URL, Redirect URL …/auth/callback.Sicherheit: RLS auf allen Tabellen (is_member/has_role). Kundendateien liegen in einem privaten Bucket ohne Policies für anon/authenticated – Zugriff nur per Service Role: Upload über /api/upload/[token], Download nur angemeldet über /api/documents/[id] (Company-gefiltert, Content-Disposition: attachment, nosniff).
src/lib/data/ – Store-Interface mit memory.ts (Demo) und supabase.ts (RLS).src/lib/intake/ – checklist.ts (rein, auch im Browser), engine.ts (Kundennachricht → Fall), case-ops.ts (Refresh, Dokumentenanforderung, Follow-ups), router.ts + identity.ts (eingehende Nachrichten Kunde/Fall zuordnen), follow-ups.ts, notes.ts, attention.ts, messages.ts.src/lib/ai/ – Gesprächslogik, Zod-validierte Extraktion und Zusammenfassung mit regelbasiertem Fallback.src/lib/integrations/ – E-Mail-Adapter; outbound.ts liefert nur delivered: true, wenn wirklich versendet wurde.src/lib/documents/storage.ts – Upload-Validierung (Magic Bytes, 10 MB, PDF/JPG/PNG/WebP) und Speicher.npm run lint
npm run typecheck
npm run build && npm start