Surface audit generations on dashboard audits
This commit is contained in:
381
v2_elemente/PitchFast_PRD_v3.md
Normal file
381
v2_elemente/PitchFast_PRD_v3.md
Normal file
@@ -0,0 +1,381 @@
|
||||
# Product Requirements Document: PitchFast.io
|
||||
### Lokaler Akquise-Agent für Webdesign — SaaS-Edition (Deutschland zuerst)
|
||||
|
||||
**Version:** 3.1 · **Stand:** Juni 2026 · **Status:** Planung
|
||||
**Vorgänger:** v1 (internes Tool, Playwright-self-hosted) → v2 (serverless, AppSumo-Vorbereitung) → v3 (Multi-Tenant-SaaS, DE-first, Compliance- und Unit-Economics-gehärtet) → **v3.1 (SaaS-Abo als primäres Geschäftsmodell durchgerechnet, LTD sekundär)**
|
||||
|
||||
> **Was sich gegenüber v2 ändert:** v2 hatte den *technischen* Stack auf serverlos umgestellt, aber Geschäftsmodell, Recht und Mandantenfähigkeit noch wie beim internen Tool behandelt. v3 schließt diese Lücken: echtes Multi-Tenant-Modell, ein durchgerechnetes Geschäftsmodell mit realen API-Kosten (**SaaS-Abo als primäres Modell mit ≥75 % Bruttomarge; LTD nur sekundär und BYO-only**), Compliance als Produktfeature statt als Disclaimer, sowie ein **BYO-Architekturprinzip** (eigene API-Keys + eigenes Postfach pro Kunde), das gleichzeitig das Unit-Economics-Problem *und* das Haftungsproblem löst.
|
||||
|
||||
---
|
||||
|
||||
## 1. Produktvision und Problemstellung
|
||||
|
||||
PitchFast.io ist eine deutsche B2B-SaaS-Plattform, die Webdesignern, kleinen Agenturen und SEO-Freelancern hochwertige lokale Akquise ermöglicht — ohne generische Massenmails. Das Tool findet lokale Unternehmen, führt ein nachvollziehbares Website-Mini-Audit durch (Struktur, Copy, Performance, visueller Eindruck) und bereitet daraus persönliche, datengestützte Erstkontakte vor, die der Nutzer manuell freigibt und versendet.
|
||||
|
||||
**Kernproblem:** Manuelle Website-Analyse und echte Personalisierung kosten pro Lead Stunden. Generischer Massen-Spam konvertiert nicht, schadet der Absender-Reputation und ist in Deutschland rechtlich riskant.
|
||||
|
||||
**Lösung:** PitchFast automatisiert Recherche und Audit über eine schlanke, serverlose Pipeline und befähigt Nutzer zu chirurgisch präzisem, „account-based" Outreach in kleiner Stückzahl. Qualität vor Menge ist nicht nur Positionierung, sondern reduziert zugleich Kosten- und Rechtsrisiko.
|
||||
|
||||
---
|
||||
|
||||
## 2. Strategische Leitplanken
|
||||
|
||||
Diese Prinzipien sind übergeordnet und entscheiden in Zweifelsfällen die Detailplanung:
|
||||
|
||||
1. **Deutschland zuerst — aber markt-konfigurierbar, nicht markt-hartkodiert.** Deutschland ist eine der strengsten Anti-Spam-Zonen (UWG). Wir bauen compliant-by-default für DE. Internationale Expansion ist *kein* Gratis-Carry-over (CASL/Kanada ist auf der Consent-Achse strenger, CAN-SPAM/USA laxer-aber-kompetitiver), deshalb sind Versandregeln, Opt-out-Fristen und Rechtsgrundlagen-Logik pro Markt konfigurierbar, nicht fest verdrahtet.
|
||||
2. **BYO everything als Default.** Kunden bringen ihre eigenen API-Keys (Google, OpenRouter, ScreenshotOne) und ihr eigenes Postfach mit. Das verschiebt variable Kosten *und* rechtliche Verantwortung an den Kunden und macht das LTD-Modell tragfähig. Ein „Managed"-Modus mit aufgeschlagenen Credits ist die kostenpflichtige Alternative für nicht-technische Nutzer.
|
||||
3. **Qualität vor Menge.** Harte, niedrige Limits pro Lauf. Kein „Unlimited".
|
||||
4. **Kein Autopilot.** Versand niemals ohne manuelle Freigabe — architektonisch erzwungen, nicht nur per Policy.
|
||||
5. **Compliance als Feature.** Quellen-Dokumentation, Opt-out, Impressums-Block, Sperrfristen und AVV sind verkaufbare Funktionen, kein Kleingedrucktes.
|
||||
6. **Dogfooding.** Matthias ist erster Nutzer und Referenzkunde; jedes Feature muss seinen eigenen Akquiseprozess real verbessern, bevor es verallgemeinert wird.
|
||||
|
||||
---
|
||||
|
||||
## 3. Zielgruppe und Positionierung
|
||||
|
||||
### 3.1 MVP-Nutzer / Referenzkunde: Matthias Meister
|
||||
Solo-Freelancer im Webdesign (Crimmitschau). Braucht ein dichtes, scanbares Arbeits-Dashboard, das Recherche, Audit, Review, Freigabe, Versand und Follow-up bündelt. Validiert das Produkt im echten Einsatz.
|
||||
|
||||
### 3.2 SaaS-Zielgruppe (DE)
|
||||
Wachstumsorientierte Webdesigner, kleine Web-/Digitalagenturen und SEO-Freelancer in Deutschland, die einen skalierbaren, aber sauberen Outbound-Kanal suchen und keine eigene Audit-/Outreach-Pipeline bauen wollen.
|
||||
|
||||
### 3.3 Positionierung
|
||||
- **Boutique-Pricing, Qualität statt Volumen.** Ein gewonnener Webdesign-Auftrag ist mehrere tausend Euro wert; das Tool muss nur wenige Abschlüsse ermöglichen, um sich zu rechnen.
|
||||
- **„Compliant German Outreach" als USP.** In einem Markt, in dem Abmahnungen real sind, ist eingebaute Rechtskonformität ein Verkaufsargument, kein Bremsklotz.
|
||||
- **Nachhaltige Limits statt „Unlimited"-Versprechen.** Schützt die Marge und die Reputation aller Nutzer.
|
||||
|
||||
### 3.4 AppSumo-Eignung (Hinweis)
|
||||
Ein AppSumo-Launch bleibt eine *Option*, ist aber nicht handlungsleitend für das MVP. Falls verfolgt, gilt das LTD-Modell in Abschnitt 4. Wichtig: AppSumo erzwingt vollständige Mandantenfähigkeit, Self-Service-Onboarding, Lizenz-Code-Einlösung und belastbare Unit Economics — alles in v3 berücksichtigt. AppSumos Umsatzbeteiligung (Planungsannahme ~30 %, vor Launch verifizieren) und die LTD-Mechanik sind in Abschnitt 4 eingerechnet.
|
||||
|
||||
---
|
||||
|
||||
## 4. Geschäftsmodell und Unit Economics
|
||||
|
||||
> **Dies ist die Gating-Sektion.** Wenn die Stückkosten das Preismodell nicht tragen, ist alles andere irrelevant.
|
||||
|
||||
### 4.1 Reale API-Kosten (Stand Mitte 2026 — vor Launch erneut verifizieren)
|
||||
|
||||
Alle Preise in USD (Quellwährung der Anbieter). EUR ≈ USD × 0,92.
|
||||
|
||||
**Pro Deep-Audit:**
|
||||
|
||||
| Komponente | Annahme | Kosten |
|
||||
|---|---|---|
|
||||
| LLM (GPT-5.4 mini, OpenRouter): $0,75/M Input, $4,50/M Output | ~15–20k Input-Token (Markdown 4 Seiten + 2 Screenshots als Vision-Input + skills.md) + ~3–5k Output inkl. Reasoning | **~$0,025–0,035** |
|
||||
| Screenshots (ScreenshotOne ~$0,0085/Shot) | Desktop + Mobile = 2 Shots | **~$0,017** |
|
||||
| Copy-Extraktion (Jina AI Reader) | 4 Seiten, token-/anfragebasiert | **~$0,002–0,005** |
|
||||
| PageSpeed Insights | kostenlose Quota | **$0,00** |
|
||||
| **Summe pro Audit** | | **~$0,045–0,06** |
|
||||
|
||||
**Pro Lead (Recherche):**
|
||||
|
||||
| Komponente | Annahme | Kosten |
|
||||
|---|---|---|
|
||||
| Text/Nearby Search (Places, Pro ~$0,032/Call, bis zu 20 Ergebnisse) | amortisiert auf ~20 Leads | **~$0,002/Lead** |
|
||||
| Place Details (Pro ~$0,017/Call) | 1 Call je Lead | **~$0,017** |
|
||||
| Contact Data SKU (~$0,003/Call, für Telefon/Website) | 1 je Lead | **~$0,003** |
|
||||
| Geocoding (~$0,005/Call) | 1 je Kampagne, vernachlässigbar | **~$0,00** |
|
||||
| **Summe pro qualifiziertem Lead** | | **~$0,02–0,025** |
|
||||
|
||||
**Realistische Gesamtkosten „Lead gefunden + auditiert + Outreach entworfen": ~$0,07–0,09.**
|
||||
|
||||
> ⚠️ Das ist das **3- bis 4-fache** der in v2 genannten $0,02. Das alte Erfolgskriterium „unter $0,02 pro Deep-Audit" war nicht haltbar und wurde in Abschnitt 17 ersetzt. Hinweis: Google hat 2026 das Places-Preismodell auf SKU-/Field-Mask-Basis umgestellt; Contact-/Atmosphere-Daten kosten extra, und die Free-Tier-Caps (pro SKU pro Monat) sind schnell aufgebraucht. Volumen treibt die Places-Kosten überproportional.
|
||||
|
||||
### 4.2 Drei Kosten-Modi: Wer trägt die variablen Kosten?
|
||||
|
||||
Die Stückkosten aus 4.1 muss jemand tragen. Daraus ergeben sich drei Modi:
|
||||
|
||||
1. **BYO-Keys (Default, empfohlen):** Der Kunde hinterlegt eigene Keys für Google/OpenRouter/ScreenshotOne. Die variablen Kosten fallen direkt bei ihm an. PitchFasts Grenzkosten pro Nutzer sinken auf ~Convex-Speicher/Compute ≈ nahe null. Löst zugleich das Haftungsthema (Keys = Verantwortung des Kunden). Ideal für die technik-affine Webdesigner-Zielgruppe.
|
||||
2. **Managed (Aufpreis-Modell):** PitchFast nutzt eigene Keys und trägt die API-Kosten; der Preis muss sie mit gesunder Marge decken. Für nicht-technische Nutzer.
|
||||
3. **Hybrid:** Software/Seat fix, teure Aktionen (Audits) ziehen aus einem konservativ dimensionierten Kontingent.
|
||||
|
||||
### 4.3 SaaS-Abo — primäres Geschäftsmodell (empfohlen)
|
||||
|
||||
Beim monatlichen Abo deckt die wiederkehrende Einnahme die variablen Kosten **jeden Monat erneut**. Es gibt also kein „einmal zahlen, ewig kosten"-Problem — und selbst der Managed-Modus ist tragfähig. Konkrete Tiers (marktplausibel, Boutique-Positionierung):
|
||||
|
||||
| Tier (mtl.) | Kontingent/Monat | Sitze | Managed-Marge (Voll / realist.) | BYO-Marge | ARR |
|
||||
|---|---|---|---|---|---|
|
||||
| **Starter** $29 (≈€27) | 30 Audits, 150 Leads | 1 | 82 % / 93 % | 98 % | $348 |
|
||||
| **Pro** $79 (≈€73) | 100 Audits, 500 Leads | 2 | 79 % / 93 % | 99 % | $948 |
|
||||
| **Agency** $199 (≈€183) | 300 Audits, 1.500 Leads | 5 | 76 % / 93 % | 100 % | $2.388 |
|
||||
|
||||
Lesart: „Voll" = Kunde schöpft das Monatskontingent komplett aus (Worst Case für die Marge); „realist." = ~30 % Auslastung. Selbst im Worst Case bleibt die Managed-Bruttomarge **≥ 75 %**; BYO liegt auf Software-Niveau (~98–100 %).
|
||||
|
||||
**Mindestpreis-Regel:** `Mindestpreis = COGS bei Vollnutzung ÷ (1 − Ziel-Marge)`. Bei 75 % Ziel-Marge ergibt das pro Tier $21 / $66 / $193 als Preisboden — kein Tier darf darunter liegen. „Unlimited"-Tarife sind ausgeschlossen, weil sie die Vollnutzungs-Marge aushebeln.
|
||||
|
||||
**Empfehlung:** BYO-Keys als Default (höchste Marge, keine Kostenkopplung, beste Rechtsposition); Managed als bequemer, höherpreisiger Aufpreis-Tarif für nicht-technische Kunden. Jahreszahlung mit Rabatt anbieten.
|
||||
|
||||
### 4.4 Lifetime-Deal / AppSumo (optional, sekundär)
|
||||
|
||||
Ein LTD bleibt eine *Option* für einen Reichweiten-Push, ist dem Abo aber wirtschaftlich klar unterlegen und nur unter Auflagen vertretbar. Durchgerechnet (24 Monate Lebensdauer, 30 % Auslastung, 30 % AppSumo-Cut):
|
||||
|
||||
| Tier (einmalig) | Netto nach Cut | Managed-Lifetime-P&L | BYO-Lifetime-P&L |
|
||||
|---|---|---|---|
|
||||
| Tier 1 ($69) | $48 | **−$78** | **+$36** |
|
||||
| Tier 2 ($129) | $90 | **−$265** | **+$78** |
|
||||
| Tier 3 ($199) | $139 | **−$1.016** | **+$127** |
|
||||
|
||||
→ **Managed-LTD ist in jedem Tier strukturell defizitär** (bei Vollnutzung katastrophal, Tier 3: −$3.683). Falls überhaupt LTD, dann **ausschließlich BYO-Keys mit konservativen, nicht-rollierenden Kontingenten**. Zum Vergleich: Schon das günstigste Abo bringt im ersten Jahr ($348) mehr ein, als ein LTD Tier-1 je einbringt.
|
||||
|
||||
> Das vollständige, anpassbare Rechenmodell (Annahmen, Stückkosten, Abo- und LTD-Tiers) liegt als `PitchFast_Pricing_Modell.xlsx` bei. Alle Annahmen (blau) lassen sich frei drehen; Margen und Mindestpreise rechnen live nach.
|
||||
|
||||
---
|
||||
|
||||
## 5. Rechtlicher Rahmen und Compliance-by-Design
|
||||
|
||||
> **Kein Ersatz für Rechtsberatung.** Vor einem öffentlichen Launch ist eine Prüfung durch einen Fachanwalt für Wettbewerbs-/IT-Recht zwingend. Die folgenden Punkte sind Produktanforderungen, die Risiko reduzieren, nicht es eliminieren.
|
||||
|
||||
### 5.1 Zwei getrennte Rechtsregime (beide müssen erfüllt sein)
|
||||
- **UWG § 7 (Versandakt / unlautere Belästigung):** E-Mail-Werbung an Unternehmen setzt grundsätzlich vorherige Einwilligung voraus; Telefonwerbung im B2B verlangt mindestens „mutmaßliche Einwilligung". Eine im Impressum veröffentlichte Geschäftsadresse ist **keine** Einwilligung, Werbung zu empfangen. → Das Produkt darf Kaltakquise nicht als rechtlich unbedenklich darstellen.
|
||||
- **DSGVO (Datenverarbeitung):** Verarbeitung von Kontaktdaten kann im B2B über berechtigtes Interesse (Art. 6 Abs. 1 f) begründbar sein, erfordert aber Transparenz, Zweckbindung, Datenminimierung, dokumentierte Interessenabwägung und Wahrung der Betroffenenrechte.
|
||||
|
||||
### 5.2 Rolle von PitchFast als Anbieter
|
||||
Sobald andere Nutzer Drittdaten über das Tool verarbeiten, wird PitchFast voraussichtlich **Auftragsverarbeiter** (teils evtl. gemeinsam Verantwortlicher). Daraus folgt:
|
||||
- **AVV/DPA** mit jedem Kunden (Vertragsvorlage als Onboarding-Schritt).
|
||||
- Eigenes Verarbeitungsverzeichnis, TOMs, Löschkonzept.
|
||||
- **BYO-Keys/BYO-Mailbox** schwächt diese Rolle bewusst ab, weil der Kunde die Verarbeitung in eigener Infrastruktur ausführt.
|
||||
|
||||
### 5.3 Compliance-Features (Pflicht im MVP)
|
||||
- **Keine erratenen/generierten E-Mail-Adressen.** Nur Adressen, die nachweislich öffentlich als geschäftlicher Kontakt ausgewiesen sind. Quelle wird pro Datensatz gespeichert (URL + Zeitstempel).
|
||||
- **Opt-out-Mechanik** in jeder Outreach-Mail (klar, frictionless), plus interne Suppression-Liste, die einen Opt-out dauerhaft respektiert.
|
||||
- **Pflicht-Absenderblock** (Name, ladungsfähige Anschrift, Impressumslink) automatisch in jede Mail.
|
||||
- **Quellen-/Begründungsfeld** je Lead: Rechtsgrundlage und Herkunft dokumentiert (Nachweis der Interessenabwägung).
|
||||
- **Blacklist** (Domain, E-Mail, Telefon, Firmenname, Place ID) und **Sperrfristen** („Nicht erneut kontaktieren" = 12 Monate hart, danach nur Vorschlag zur manuellen Prüfung).
|
||||
- **Betroffenenrechte:** Lösch-/Auskunftsworkflow für angefragte Drittdaten.
|
||||
- **Audit-Seiten:** `noindex`, keine Sitemap, kein öffentliches Verzeichnis, Lifecycle-Deaktivierung (30-Tage-Hinweis, 60-Tage-Deaktivierung).
|
||||
|
||||
### 5.4 Markt-Regel-Engine
|
||||
Eine konfigurierbare `MarketConfig` kapselt pro Land: erlaubte Kontaktkanäle, Consent-Modell (opt-in/opt-out/presumed), Opt-out-Frist, Pflicht-Footer-Felder, Sperrfristen. DE ist die erste Konfiguration; weitere Märkte erst nach eigener Rechtsprüfung.
|
||||
|
||||
---
|
||||
|
||||
## 6. MVP-Scope und Core User Stories
|
||||
|
||||
### 6.1 Mandanten & Konten
|
||||
- Als Nutzer möchte ich mich registrieren/einloggen und arbeite in einer isolierten Organisation; ich sehe ausschließlich meine eigenen Daten.
|
||||
- Als Org-Inhaber möchte ich (perspektivisch) weitere Sitze einladen — im MVP genügt 1 Nutzer pro Org.
|
||||
- Als Nutzer möchte ich meine eigenen API-Keys (Google, OpenRouter, ScreenshotOne) sicher hinterlegen (BYO-Modus) oder Managed-Credits nutzen.
|
||||
|
||||
### 6.2 Kampagnen
|
||||
- Kampagne anlegen mit Kategorie/Nische (Dropdown + „Anderes"-Freitext), PLZ, Umkreis, Wiederholungsrhythmus, max. neue Leads/Lauf, max. Audits/Lauf.
|
||||
- Geocoding der PLZ für die Radius-Suche; Berücksichtigung des 50-km-Radius-Limits und des 60-Ergebnis-Caps (automatische Subdivision bei größerem Gebiet).
|
||||
- Wiederkehrende Ausführung per Cron + manueller „Jetzt ausführen"-Trigger.
|
||||
|
||||
### 6.3 Lead-Recherche & Qualifizierung
|
||||
- Lokale Businesses über Google Places finden (kein Browser-Scraping).
|
||||
- Priorisierung nach Website-Potenzial: keine Website, veraltet, schwache Mobile-Darstellung, schwache Kontaktführung, lokale SEO-Chancen; moderne Seiten = niedrige Priorität.
|
||||
- Google-Bewertungen intern zur Priorisierung nutzen, extern nie anzeigen.
|
||||
- Dublettenschutz + Schutz bereits kontaktierter Firmen + Blacklist-Abgleich.
|
||||
- Leads ohne E-Mail in „Kontakt fehlt" sammeln statt verwerfen; bei Telefonnummer Skript zur manuellen Klärung erzeugen.
|
||||
|
||||
### 6.4 Website-Audit (serverlose Pipeline)
|
||||
- Startseite + relevante Unterseiten (Kontakt, Impressum, Leistungen, Über uns) analysieren.
|
||||
- Desktop- + Mobile-Screenshots erfassen und speichern.
|
||||
- PageSpeed intern nutzen, extern keine Scores zeigen.
|
||||
- Multimodales LLM bezieht Screenshots ein; lokale Design-/Marketing-Skills aus `skills.md`-Registry.
|
||||
- Rohdaten (Prompts, Modellname, Rohantworten, Zwischenergebnisse) intern nachvollziehbar speichern.
|
||||
|
||||
### 6.5 Öffentliche Audit-Seiten
|
||||
- Personalisierte Seite unter `audit.pitchfast.io/<org-slug>/<firmenname-ort>`.
|
||||
- Default Entwurfsmodus; extern Hinweis „Dieser Audit ist noch nicht freigegeben", bis manuell freigegeben.
|
||||
- `noindex`, Cache + Invalidierung bei Änderung; 30-/60-Tage-Lifecycle mit manueller Reaktivierung.
|
||||
|
||||
### 6.6 Outreach (BYO-Mailbox)
|
||||
- Kontaktstrategie pro Lead: erst anrufen / direkt E-Mail / zurückstellen / nicht kontaktieren.
|
||||
- Review-Workspace: E-Mail-Entwurf, Betreff, Audit-Link, Telefon-Skript — alles editierbar.
|
||||
- Versand **aus dem eigenen verbundenen Postfach des Nutzers** (OAuth Gmail/Microsoft oder SMTP), erst nach Freigabe. Kein zentraler Versand.
|
||||
- Respektvolles Follow-up vorbereitbar, ebenfalls nur nach Freigabe.
|
||||
- Eingehende Antworten im MVP manuell markieren.
|
||||
|
||||
### 6.7 Dashboard
|
||||
- Kanban/Funnel für Leads & Status.
|
||||
- Kampagnenmetriken: Leads, Audits, gesendete Mails, Antworten, Gespräche, Angebote, Aufträge.
|
||||
- Rybbit-Daten der eigenen Audit-Seiten im Dashboard (per API), ohne Rybbit separat zu öffnen.
|
||||
- Credit-/Nutzungsanzeige + Fehlerstatus je externem Dienst.
|
||||
|
||||
### 6.8 Abrechnung & Lizenz
|
||||
- Credit-Verbrauch messen (pro Audit/Lead), Kontingente durchsetzen.
|
||||
- Abo-Verwaltung (Stripe) und/oder AppSumo-Code-Einlösung per Webhook (falls LTD-Launch).
|
||||
|
||||
---
|
||||
|
||||
## 7. Out of Scope (MVP)
|
||||
- Mehr als 1 aktiver Nutzer pro Organisation (Datenmodell aber bereits multi-tenant).
|
||||
- Automatische Inbox-/Antwort-Auswertung (JMAP-Threading).
|
||||
- Vollwertiges CRM, Call-Queue mit Gesprächsnotizen.
|
||||
- Automatischer Versand ohne manuelle Freigabe.
|
||||
- Google-Maps-Scraping per Browser-Automation.
|
||||
- Internationale Märkte außerhalb Deutschlands (Engine vorbereitet, Konfiguration nicht).
|
||||
- Externes Error-Monitoring (Sentry) — optional später.
|
||||
- Mehr als ein gleichzeitiger Agentenlauf pro Organisation.
|
||||
|
||||
---
|
||||
|
||||
## 8. Technische Architektur und Tech-Stack
|
||||
|
||||
### 8.1 Übersicht
|
||||
```
|
||||
Next.js (App Router) ──▶ Cloudflare Pages (Edge)
|
||||
│ WebSockets (reaktiv)
|
||||
▼
|
||||
CONVEX CLOUD ── DB (multi-tenant) · File Storage · Crons · Actions
|
||||
│ triggert externe serverlose Dienste / Worker
|
||||
▼
|
||||
┌─────────────┬───────────────┬───────────────┬──────────────┐
|
||||
│ Google │ Jina AI │ ScreenshotOne │ OpenRouter │
|
||||
│ Places/Geo/ │ (Markdown) │ (Screenshots) │ (GPT-5.4 mini)│
|
||||
│ PageSpeed │ │ │ │
|
||||
└─────────────┴───────────────┴───────────────┴──────────────┘
|
||||
Transaktionsmail: Resend · Outreach-Versand: BYO-Mailbox (OAuth/SMTP)
|
||||
Analytics: Rybbit (self-hosted, nur Audit-Seiten)
|
||||
```
|
||||
|
||||
### 8.2 Komponenten
|
||||
- **Frontend/Edge:** Next.js App Router, shadcn/ui, Tailwind, React Hook Form + Zod. Dashboard mit Light/Dark Mode; öffentliche Audit-Seiten fest hell/ruhig.
|
||||
- ⚠️ *Entscheidung offen:* Next.js App Router auf Cloudflare Pages hat Reibung (OpenNext/`next-on-pages`, Edge-Runtime-Eigenheiten). Vercel ist der Weg des geringsten Widerstands, Cloudflare billiger bei Skalierung. → In Abschnitt 19 zu entscheiden.
|
||||
- **Backend/Daten:** Convex Cloud. **Jedes Dokument trägt `orgId` (Pflicht); jede Query filtert nach `orgId`.** File Storage für Screenshots. Crons/Actions für Kampagnenläufe, Audit-Pipeline, Lifecycle-Regeln.
|
||||
- **Auth:** Better Auth mit Convex; E-Mail/Passwort, Organisations-Scoping. Öffentliche Audit-Seiten ohne Login.
|
||||
- **Agenten-/LLM-Schicht:** Vercel AI SDK als Orchestrierung, OpenRouter als Modellzugang, GPT-5.4 mini (Text+Vision), strukturierte Outputs via Zod. Modellprofile für Lead-Klassifikation, Audit-Analyse, multimodale Analyse, Textgenerierung, Qualitätscheck. `skills.md`-Registry (Name, Zweck, Einsatzbereich, Input, Output) im Repo; Dashboard zeigt pro Audit die verwendeten Skills.
|
||||
- **Recherche/Analyse:** Google Geocoding + Places + PageSpeed Insights; Cheerio (schneller HTML-/SEO-First-Pass auf der Edge); Jina AI Reader (HTML→Markdown); ScreenshotOne (Desktop/Mobile, Cookie-/Pop-up-Filter). RapidAPI nur als optionaler Fallback.
|
||||
- **Mail:** **Resend** für transaktionale Mails (App-Benachrichtigungen, „Audit fertig", Passwort-Reset). **BYO-Mailbox** für Outreach (Gmail/Microsoft via OAuth oder Kunden-SMTP). Kein gemeinsamer Outreach-Versand → schützt Reputation und Rechtsposition. (Stalwart entfällt als zentrale Komponente; Matthias kann sein eigenes Stalwart-Postfach im BYO-Modus verbinden.)
|
||||
- **Analytics:** Rybbit (self-hosted), nur auf öffentlichen Audit-Seiten, anonym; Aggregation per API im Dashboard.
|
||||
- **Deployment/Config:** Coolify oder Cloudflare (siehe offene Entscheidung). Secrets in Convex Secrets / Env; **Kunden-API-Keys verschlüsselt at rest, nie im Klartext im UI/Repo/Log**.
|
||||
|
||||
### 8.3 Kostenkontrolle (eingebaut)
|
||||
- Harte Limits pro Kampagne (Leads/Audits pro Lauf).
|
||||
- Nur ein aktiver Agentenlauf pro Org gleichzeitig.
|
||||
- **Globaler Monats-Budget-Cap + Kill-Switch** je Org (greift auch im Managed-Modus).
|
||||
- Kosten-Logging pro Lauf (Token-, Call-Zahlen) für reale Unit-Economics-Messung.
|
||||
|
||||
---
|
||||
|
||||
## 9. Konzeptionelles Datenmodell (multi-tenant)
|
||||
|
||||
> Jede Entität trägt `orgId` und (wo sinnvoll) `createdBy`. Alle Queries scopen auf `orgId`.
|
||||
|
||||
**Organization** — id, name, slug, plan, status, marketConfigId, createdAt
|
||||
**User** — id, orgId, email, role, authRef
|
||||
**ApiKeyVault** — orgId, provider (google/openrouter/screenshotone), encryptedKey, mode (byo/managed), status
|
||||
**Subscription / CreditLedger** — orgId, plan, creditBalance, monthlyAllowance, allowanceResetAt, appsumoLicenseId?
|
||||
**UsageEvent** — orgId, type (audit/lead_lookup), costEstimate, tokensIn/Out, callCounts, createdAt *(für Abrechnung + Unit-Economics)*
|
||||
**MailboxConnection** — orgId, provider (gmail/microsoft/smtp), oauthRef/smtpConfig (encrypted), fromName, fromAddress, status
|
||||
**MarketConfig** — id, country, consentModel, allowedChannels, optOutDeadlineDays, requiredFooterFields, suppressionMonths
|
||||
**Campaign** — orgId, name, niche/freitext, plz, ort, coordinates, radius, schedule, maxLeadsPerRun, maxAuditsPerRun, status, lastRun, nextRun
|
||||
**Lead** — orgId, campaignId, companyName, niche, address, googlePlaceId, source, domain, phone, email, emailSource (url+ts), contactPerson, priority, contactStatus, duplicateStatus, blocklistStatus, legalBasisNote, internalNotes
|
||||
**Audit** — orgId, leadId, status (draft/approved/published/expired), slug, checkedDomain, checkedSubpages, screenshots[], pageSpeedRaw, cheerioFindings, jinaMarkdown, foundTextSnippets, usedSkills[], skillOutputs, multimodalAnalysis, finalSummary, publicAuditText, ctaType, publishedAt, noticeSentAt (30d), deactivatedAt (60d)
|
||||
**Outreach** — orgId, leadId, auditId, contactStrategy, phoneScript, emailSubject, emailBody, followUpBody, approvalStatus, sentAt, mailboxConnectionId, replyStatus, salesStatus *(Follow-up geplant/gesendet, Antwort erhalten, Kein Interesse, Später, Gespräch vereinbart, Angebot angefragt/gesendet, Auftrag gewonnen/verloren, Nicht weiter verfolgen)*
|
||||
**Suppression / OptOut** — orgId, value (email/domain), reason, createdAt *(dauerhaft respektiert)*
|
||||
**Blacklist** — orgId, type (domain/email/phone/company/placeId), value, note, createdAt
|
||||
**RunLog** — orgId, campaignId, status, errorByService (google/pagespeed/openrouter/screenshotone/jina/mail), startedAt, finishedAt
|
||||
|
||||
> **Google-Places-ToS-Hinweis:** Nur die `googlePlaceId` darf dauerhaft gespeichert werden; übrige Places-Felder unterliegen Caching-Beschränkungen (i. d. R. ~30 Tage) und müssen ggf. per ID-Refresh erneuert werden. Datenhaltung entsprechend gestalten.
|
||||
|
||||
---
|
||||
|
||||
## 10. Audit-Pipeline im Detail
|
||||
|
||||
Asynchroner Job, nicht synchroner Request (kein hartes 30-Sek-SLA — siehe Erfolgskriterien). Ablauf je Lead:
|
||||
|
||||
1. **Struktur-Check (Cheerio):** Roh-HTML parsen → Meta/Title/Headings/Viewport/strukturelle SEO-Signale. Billiger First-Pass.
|
||||
2. **Copy-Extraktion (Jina):** Startseite + relevante Unterseiten → sauberes Markdown.
|
||||
3. **Visuelle Erfassung (ScreenshotOne):** Desktop + Mobile, Cookie-/Pop-up-Filter. *Reliability-Hinweis:* ScreenshotOne hat in Benchmarks bei komplexen Seiten Ausfälle gezeigt — Fallback/Retry vorsehen, ggf. Alternativ-Provider (Urlbox o. ä.) für schwierige Seiten evaluieren. ScreenshotOne berechnet fehlgeschlagene Requests nicht.
|
||||
4. **PageSpeed:** technische Performance-/Accessibility-Signale (intern).
|
||||
5. **KI-Auswertung (GPT-5.4 mini):** Markdown + technische Signale + Screenshots (Vision) + `skills.md` → strukturierter Output (Zod): interne Befunde, öffentlicher Audit-Text, Mail-Entwurf, Betreff, Telefon-Skript, CTA-Typ.
|
||||
6. **Qualitäts-Gate:** Anti-KI-Slop-Check (zweiter, billiger Modell-Pass oder Heuristiken) gegen Voice-Regeln.
|
||||
7. **Persistenz:** Rohdaten + finale Texte in Convex; Job-Status reaktiv ans Dashboard; „fertig"-Notification via Resend.
|
||||
|
||||
Fehler je Stufe werden im `RunLog` sichtbar gemacht; der Lauf bricht sauber ab oder überspringt einzelne Leads nachvollziehbar.
|
||||
|
||||
---
|
||||
|
||||
## 11. UI/UX-Prinzipien und Accessibility
|
||||
- Dashboard = funktionales Arbeitswerkzeug: dicht, scanbar, effizient, keine Marketing-Optik. Hauptansicht Kanban/Funnel. Review-Ansicht bündelt Lead-Daten, Audit, Mail, Betreff, Skript, Quellen, Freigabeaktionen.
|
||||
- Öffentliche Audit-Seite: ruhiger als eine Marketing-Seite, persönlich, beratend, respektvoll. Keine Scores, Ampeln, Warnfarben, anklagende Sprache. Screenshots ohne Annotationen im Kontext der Befunde. Angebot + Link zur Hauptsite am Ende.
|
||||
- Vollständige Tastaturbedienbarkeit, klare Labels/Fehlermeldungen, valide Kontraste, kein Textüberlauf auf Mobile/Desktop.
|
||||
- Deutsche UI, für i18n vorbereitet.
|
||||
|
||||
---
|
||||
|
||||
## 12. Voice & Tone
|
||||
Alle Mails/Audit-Texte in Ich-Form (Solo-Freelancer-Perspektive bzw. die des jeweiligen Nutzers). Stil: auf Augenhöhe, konkret, lokal/nahbar, respektvoll, nicht belehrend, frei von KI-Floskeln, ohne übertriebene Dringlichkeit, ohne Preise in der Erstansprache. Der Agent formuliert Beobachtungen und Vorschläge, keine Urteile; technische Befunde werden in Kundennutzen übersetzt (weniger Absprünge, bessere mobile Kontaktaufnahme, mehr Vertrauen, bessere lokale Auffindbarkeit).
|
||||
|
||||
---
|
||||
|
||||
## 13. Nicht-funktionale Anforderungen
|
||||
- Mandantenisolation ist Pflichtinvariante (Tests dafür).
|
||||
- Qualität vor Menge; kleine, harte Lead-/Audit-Limits.
|
||||
- Ein aktiver Agentenlauf pro Org; Läufe abbrechbar oder nachvollziehbar fehlschlagend.
|
||||
- Fehlerstatus je externem Dienst im Dashboard sichtbar.
|
||||
- Öffentliche Audit-Seiten laden schnell, werden gecached, Invalidierung bei Änderung.
|
||||
- Audit-Rohdaten intern nachvollziehbar.
|
||||
- Globaler Budget-Cap + Kill-Switch je Org.
|
||||
- DSGVO-Löschworkflow funktionsfähig.
|
||||
|
||||
---
|
||||
|
||||
## 14. Sicherheit, Mandantenisolation & Secrets
|
||||
- `orgId`-Scoping in jeder Query; serverseitige Autorisierung, nie nur clientseitig.
|
||||
- Kunden-API-Keys und SMTP-/OAuth-Credentials **verschlüsselt at rest**; nie im UI rückanzeigbar, nie in Logs.
|
||||
- Plattform-Secrets in Convex Secrets / Env, nicht im Repo.
|
||||
- Rate-Limiting/Abuse-Schutz pro Org (verhindert, dass ein Nutzer Kosten/Reputation anderer beeinflusst — im BYO-Modus ohnehin entkoppelt).
|
||||
- Öffentliche Audit-Seiten: `noindex`, keine Sitemap, kein Verzeichnis, Slugs nicht erratbar (Hash-Anteil).
|
||||
|
||||
---
|
||||
|
||||
## 15. Entwicklungsphasen und Meilensteine
|
||||
|
||||
**M1 — Foundation & Multi-Tenancy:** Next.js-Dashboard-Gerüst, Convex Cloud, Better Auth mit Org-Scoping, `orgId` auf allen Modellen, Kampagnen-/Lead-Datenmodell, Basis-Kanban, ApiKeyVault (BYO-Keys-Eingabe, verschlüsselt).
|
||||
**M2 — Recherche & Qualifizierung:** Geocoding, Places-Suche (mit Subdivision/Field-Mask-Kostenkontrolle), Kategorien + „Anderes", Dublettenprüfung, „Kontakt-fehlt", Blacklist, Quellen-/Rechtsgrundlagen-Feld.
|
||||
**M3 — Audit-Pipeline:** Cheerio, Jina, ScreenshotOne, PageSpeed, `skills.md`, GPT-5.4-mini-Analyse (Vision), Rohdatenhaltung, async Job + RunLog.
|
||||
**M4 — Audit-Seiten & Review:** öffentliche Seite, manuelle Freigabe, `noindex`/Cache, 30-/60-Tage-Lifecycle, Review-Workspace.
|
||||
**M5 — Outreach (BYO-Mailbox) & Follow-up:** Mailbox-Connect (OAuth/SMTP), Mail-/Betreff-/Skript-Entwurf, Versand nach Freigabe, Follow-up, Suppression/Opt-out, manuelles Antwort-/Sales-Tracking, Pflicht-Footer.
|
||||
**M6 — Abrechnung & Lizenz:** Credit-Metering, Kontingent-Durchsetzung, Budget-Cap/Kill-Switch, Stripe-Abo und/oder AppSumo-Webhook.
|
||||
**M7 — Analytics & Compliance-Härtung:** Rybbit auf Audit-Seiten + API im Dashboard, Kampagnenmetriken, Anti-KI-Slop-Regeln, AVV-Vorlage + DSGVO-Löschworkflow, UI-/Accessibility-Review, Fachanwalt-Review vor Launch.
|
||||
|
||||
---
|
||||
|
||||
## 16. Technische Herausforderungen & Mitigation
|
||||
- **API-Kosten/Limits:** BYO-Keys verlagern variable Kosten; harte Limits + Budget-Cap; Field-Mask-Disziplin bei Places (Contact-Data nur wenn nötig).
|
||||
- **Schlechte/fehlende Kontaktdaten:** „Kontakt fehlt" + Telefon-Skript; keine geratenen Adressen.
|
||||
- **Generische KI-Texte:** konkrete Website-Daten + Screenshots + Skills + Voice-Regeln + Qualitäts-Gate + manuelle Bearbeitung.
|
||||
- **Fehlerhafte visuelle Interpretation:** multimodale Befunde mit DOM/Text/PageSpeed kreuzvalidieren; extern nur vorsichtig formulierte Beobachtungen.
|
||||
- **Screenshot-Zuverlässigkeit:** Retry/Fallback-Provider, da Benchmarks Ausfälle bei komplexen Seiten zeigen.
|
||||
- **Rechtliche Sensibilität:** keine Automatik, Quellenhaltung, manuelle Freigabe, zurückhaltende Sprache, Sperrfristen, BYO-Postfach, AVV, Fachanwalt vor Launch.
|
||||
- **Mandanten-Datenlecks:** `orgId`-Invariante + Tests; verschlüsselte Secrets.
|
||||
- **Next-auf-Cloudflare-Reibung:** früh ein Spike-Deployment, sonst Vercel.
|
||||
- **LTD-Unwirtschaftlichkeit:** BYO-Keys-Default; Managed nur mit ≥2× Marge und nicht-rollierenden Kontingenten.
|
||||
|
||||
---
|
||||
|
||||
## 17. Erfolgskriterien für das MVP (überarbeitet, realistisch)
|
||||
1. Matthias kann wiederkehrende lokale Kampagnen anlegen, ausführen und qualitativ passende Leads mit nachvollziehbaren Quellen erhalten.
|
||||
2. Der Agent erstellt brauchbare Mini-Audits (Screenshots, PageSpeed-Kontext, konkrete Vorschläge); öffentliche Audit-Seiten wirken persönlich, ruhig, nicht anklagend.
|
||||
3. **Reale Stückkosten gemessen und transparent:** Ziel-Korridor ~$0,05–0,08 pro „Lead + Audit" (nicht die alten $0,02); jeder Lauf loggt tatsächliche Kosten.
|
||||
4. Mail/Betreff/Skript editierbar; **kein Versand ohne `approved`-Status**; Versand läuft über das verbundene Postfach des Nutzers.
|
||||
5. Mandantenisolation nachweislich dicht (mind. 1 Test, der Cross-Org-Zugriff verhindert).
|
||||
6. Compliance-Features funktionsfähig: Quellen-Doku, Opt-out + Suppression, Pflicht-Footer, Sperrfristen, Löschworkflow.
|
||||
7. Unit-Economics-Modell bestätigt: Im gewählten Preis-/BYO-Modell ist ein aktiver Nutzer nicht strukturell defizitär.
|
||||
8. Kampagnenmetriken + Rybbit-Daten geben schnellen Überblick über Wirkung und Fortschritt.
|
||||
|
||||
---
|
||||
|
||||
## 18. Zukünftige Erweiterungen
|
||||
Mehrere Sitze/Teamrollen · zusätzliche Märkte (je mit eigener `MarketConfig` + Rechtsprüfung) · automatische Inbox-/Thread-Zuordnung (JMAP) · vollwertiges CRM · Call-Queue mit Notizen · automatisierte Re-Audits · erweiterte Rybbit-/Conversion-Auswertung · alternative Screenshot-/Scrape-Provider · zusätzliche Sprachen · self-hosted Convex für Enterprise.
|
||||
|
||||
---
|
||||
|
||||
## 19. Offene Entscheidungen & verwendete Annahmen
|
||||
|
||||
**Zu entscheiden:**
|
||||
1. **Hosting:** Cloudflare Pages (billiger, mehr Reibung mit Next App Router) vs. Vercel (reibungslos, teurer). → Spike empfohlen.
|
||||
2. **Preismodell:** SaaS-Abo ist gesetzt (Tiers/Margen siehe 4.3). Offen: finale Preispunkte & Kontingente, Ziel-Bruttomarge, ob ein BYO-LTD als sekundärer Reichweiten-Kanal überhaupt aufgelegt wird.
|
||||
3. **BYO vs. Managed als Default** für die erste Zielgruppe (Empfehlung: BYO; Managed als Aufpreis-Tarif).
|
||||
4. **Screenshot-Provider** final: ScreenshotOne vs. Alternative nach Reliability-Test.
|
||||
5. **Fachanwalt-Mandat** vor Launch terminieren (UWG/DSGVO/AVV).
|
||||
|
||||
**Verwendete Annahmen (Unit Economics, vor Launch verifizieren):**
|
||||
- GPT-5.4 mini: $0,75/M Input, $4,50/M Output (OpenRouter, Mitte 2026).
|
||||
- ScreenshotOne: ~$0,0085/Screenshot.
|
||||
- Google Places: Pro-SKUs Nearby/Text Search ~$0,032/Call, Place Details ~$0,017/Call, Contact-Data-SKU ~$0,003/Call; SKU-/Field-Mask-basiert; begrenzte monatliche Free-Caps.
|
||||
- AppSumo-Umsatzbeteiligung: ~30 % (Planungswert).
|
||||
- FX: EUR ≈ USD × 0,92.
|
||||
Reference in New Issue
Block a user