Gesamtfortschritt
~90% Core-Funktionalität komplett · Stripe integriert · Blog-Admin noch offenfixofferten.ch — Lead-Plattform für Dienstleistungsofferten (Schweiz)
Vermittlungsplattform zwischen Privatpersonen, die Offerten für Dienstleistungen suchen, und verifizierten Partnerfirmen. Leads werden über Kategorie-Landingpages und Blog-Artikel generiert und an passende Partner verkauft.
Besucher-Frontend ✓ Fertig
- Kategorie-Landingpages mit Formularen
- Blog (DB-ready, Inhalte fehlen)
- Startseite mit Kategorieübersicht
Partner-Dashboard ✓ Fertig
- Leads kaufen & verwalten ✓
- Guthaben aufladen (Stripe Checkout) ✓
- Karte hinterlegen (Stripe Setup) ✓
- Auto-Topup bei Lead-Kauf ✓
- Profil & Kategorien ✓
Admin-Backend ~90%
- Registrierungen prüfen ✓
- Kategorien & Preise verwalten ✓
- Leads & Partner ✓
- Settings & Stripe-Status ✓
- Blog-Admin fehlt
Tech Stack
Domain: fixofferten.ch · Kein Framework · FTP Deployment
Infrastruktur & Core
| Feature | Status | Kommentar |
|---|---|---|
| PHP 8.4 MVC-Architektur | ✓ Fertig | Router, Controller, Views, Layouts |
| MySQL-Datenbank / Schema | ✓ Fertig | 12 Tabellen, schema.sql + setup.php |
| CSRF-Schutz | ✓ Fertig | Alle POST-Routes abgesichert |
| .htaccess / URL-Routing | ✓ Fertig | Clean URLs via index.php |
| Session-basierte Auth | ✓ Fertig | Login, Logout, Role-Check |
| Responsive Design | ✓ Fertig | Mobile-optimiert, iOS 16px Fix |
| Lucide Icons (CDN) | ✓ Fertig | unpkg CDN |
| Cookie-Banner | ✓ Fertig | Akzeptieren / Ablehnen |
Authentifizierung & Benutzer
| Feature | Status | Kommentar |
|---|---|---|
| Registrierung (4-Step) | ✓ Fertig | Kategorien → Firmendaten → Kontakt → OTP |
| OTP E-Mail-Verifizierung | ✓ Fertig | 6-Digit, 10 Min. Ablauf, Brevo |
| Login | ✓ Fertig | Passwort-Hash, Status-Check |
| Logout | ✓ Fertig | Session destroy |
| Passwort vergessen / Reset | ✓ Fertig | Token, 30 Min. Ablauf, E-Mail |
| Admin Seed-User | ✓ Fertig | admin@fixofferten.ch via setup.php |
Kategorieformulare (Frontend)
| Feature | Status | Kommentar |
|---|---|---|
| Umzug-Formular (Multi-Step) | ✓ Fertig | 4 Steps + Kontakt |
| Reinigung-Formular (Multi-Step) | ✓ Fertig | 4 Steps + Kontakt |
| Radio-Cards & Checkbox-Cards | ✓ Fertig | Auto-Advance, grüne Selektion |
| Zimmer-Select (Custom Dropdown) | ✓ Fertig | 0.5er-Schritte, Studio → 6+ |
| Nominatim Adress-Autocomplete | ✓ Fertig | CH-only, Swiss Format |
| Datum-Auswahl (Date-Radio) | ✓ Fertig | ASAP, Ende Monat, Genaues Datum |
| Stockwerk + Lift (Umzug) | ✓ Fertig | Inline-Row Select + Radio |
| OTP im Formular | ✓ Fertig | Paste-Support, Auto-Verify |
| Lead → DB speichern | ✓ Fertig | JSON-Details, Status "new" |
| Danke-Seite | ✓ Fertig | /danke nach Absenden |
| Weitere Kategorien | Offen | Nur Umzug & Reinigung aktiv |
Partner-Dashboard
| Feature | Status | Kommentar |
|---|---|---|
| Dashboard-Übersicht | ✓ Fertig | Stats, Balance, Quick-Actions |
| Verfügbare Leads | ✓ Fertig | Gefiltert nach Kategorien, DB-Preise |
| Lead kaufen | ✓ Fertig | Balance-Check, Transaktion, E-Mails |
| Meine Leads | ✓ Fertig | Kontaktdaten, Details, Aktionen |
| Guthaben & Transaktionen | ✓ Fertig | Balance-Berechnung, Historie |
| Guthaben aufladen | ✓ Fertig | Stripe Checkout (CHF 50/100/200/500) |
| Zahlungsmethode / Karte | ✓ Fertig | Stripe SetupIntent, Karte anzeigen/entfernen |
| Auto-Topup bei Lead-Kauf | ✓ Fertig | Off-Session PaymentIntent bei niedrigem Guthaben |
| Profil bearbeiten | ✓ Fertig | Firma, Adresse, Kategorien |
Admin-Dashboard
| Feature | Status | Kommentar |
|---|---|---|
| Dashboard-Übersicht | ✓ Fertig | Stats, Leads, Umsatz |
| Registrierungen prüfen | ✓ Fertig | Freischalten / Ablehnen + E-Mails |
| Partner-Liste | ✓ Fertig | Filter, Suche, Status |
| Partner-Detail | ✓ Fertig | Guthaben, Transaktionen, Sperren |
| Leads-Liste | ✓ Fertig | Filter, Suche, Käufer-Anzahl |
| Lead-Detail | ✓ Fertig | JSON-Details, Käufer-Liste |
| Kategorien verwalten | ✓ Fertig | Aktivieren / Deaktivieren |
| Preise bearbeiten | ✓ Fertig | Inline-Editor pro Kategorie |
| Flash-Messages | ✓ Fertig | Eigenes Admin-Flash-Partial |
| Blog-Verwaltung (CRUD) | Offen | Kein Blog-Editor im Admin |
| Lead-Export (CSV) | Offen | Kein Export verfügbar |
| Partner-Guthaben anpassen | Offen | Admin kann nicht manuell gutschreiben |
| E-Mail-Log anzeigen | Offen | Tabelle existiert, kein UI |
| Settings-Verwaltung | ✓ Fertig | 4 Sektionen: Allgemein, Lead, Stripe-Status, Auto-Topup |
E-Mail-System (Brevo)
| Template | Status | Kommentar |
|---|---|---|
| OTP-Code | ✓ Fertig | Registrierung & Lead-Formular |
| Registrierung bestätigt | ✓ Fertig | An Partner |
| Registrierung eingegangen | ✓ Fertig | An Admin |
| Freischaltung | ✓ Fertig | An Partner |
| Ablehnung | ✓ Fertig | An Partner mit Grund |
| Neuer Lead (Benachrichtigung) | ✓ Fertig | An passende Partner |
| Lead gekauft (Partner) | ✓ Fertig | Kontaktdaten freigeschaltet |
| Lead gekauft (Besucher) | ✓ Fertig | "N Partner kontaktieren Sie" |
| Lead-Bestätigung (Besucher) | ✓ Fertig | Nach Formular-Absendung |
| Guthaben niedrig | ✓ Fertig | Warnung bei < Schwellwert |
| Guthaben aufgeladen | ✓ Fertig | Bestätigung + neuer Stand |
| Passwort zurücksetzen | ✓ Fertig | Reset-Link, 30 Min. |
| Karte belastet | Template | Wird erst mit Stripe aktiv |
| Karte fehlgeschlagen | Template | Wird erst mit Stripe aktiv |
| Monatsbericht | Template | Kein Cron-Job |
| E-Mail-Logging in DB | Offen | email_log Tabelle da, wird nicht befüllt |
Bezahlung & Billing
| Feature | Status | Kommentar |
|---|---|---|
| Guthaben-System (Balance) | ✓ Fertig | Berechnung über transactions-Tabelle |
| Lead-Kauf (Balance-Abzug) | ✓ Fertig | Prüft Balance, erstellt Transaktion |
| Stripe Checkout (Aufladung) | ✓ Fertig | Stripe-hosted Checkout, CHF, Dynamic Payment Methods |
| Stripe Karten-Speicherung | ✓ Fertig | SetupIntent via Checkout, Default Payment Method |
| Stripe Webhooks | ✓ Fertig | checkout.session.completed, payment_intent.succeeded/failed |
| Auto-Topup | ✓ Fertig | Off-Session PaymentIntent bei Lead-Kauf, idempotent |
| Webhook Signatur-Verifikation | ✓ Fertig | STRIPE_WEBHOOK_SECRET, constructEvent() |
| Rechnungen / PDF | Offen | Keine PDF-Generierung |
Seiten & Content
| Seite | Status | Kommentar |
|---|---|---|
| Startseite | ✓ Fertig | 2 Kategorien, Hero, CTA |
| Partner-Landingpage | ✓ Fertig | Vorteile, Preise, CTA |
| Blog-Index | ✓ Fertig | DB-driven, published Posts |
| Blog-Detailseite | ✓ Fertig | SEO, Single Post |
| Blog-Inhalte | Leer | Keine Posts vorhanden |
| Impressum | ✓ Fertig | Statisch |
| Datenschutz | ✓ Fertig | Statisch |
| AGB | ✓ Fertig | Statisch |
| 404-Seite | ✓ Fertig | Custom 404 |
Lead-Flow (End-to-End)
| Schritt | Status |
|---|---|
| 1. Besucher füllt Formular aus | ✓ Fertig |
| 2. OTP-Verifizierung | ✓ Fertig |
| 3. Lead in DB gespeichert | ✓ Fertig |
| 4. Besucher erhält Bestätigungs-E-Mail | ✓ Fertig |
| 5. Passende Partner benachrichtigt | ✓ Fertig |
| 6. Partner sieht Lead im Dashboard | ✓ Fertig |
| 7. Partner kauft Lead | ✓ Fertig |
| 8. Partner erhält Kontaktdaten | ✓ Fertig |
| 9. Besucher wird informiert | ✓ Fertig |
| 10. Lead-Status wird aktualisiert | ✓ Fertig |
| Seite | Route | Beschreibung | Typ | Status |
|---|---|---|---|---|
| Startseite | / | Kategorieübersicht | Public | ✓ |
| Umzug LP | /umzug | Multi-Step Formular | Public | ✓ |
| Reinigung LP | /reinigung | Multi-Step Formular | Public | ✓ |
| Blog | /blog | Artikel-Index | Public | Leer |
| Partner-Werbeseite | /partner | Vorteile, CTA | Public | ✓ |
| Registrierung | /registrieren | 4-Step + OTP | Public | ✓ |
| Login | /login | E-Mail + Passwort | Public | ✓ |
| Partner-Dashboard | /dashboard | 7 Tabs | Partner | ✓ |
| Admin-Backend | /admin | 9 Sektionen | Admin | ✓ |
| Danke-Seite | /danke | Nach Formular | Public | ✓ |
| Impressum | /impressum | Rechtliches | Public | ✓ |
| Datenschutz | /datenschutz | DSE | Public | ✓ |
| AGB | /agb | AGB | Public | ✓ |
Freischaltungs-Flow ✓ Komplett
Vom Besucher zum Partner ✓ Komplett E2E
Stripe Integration ✓ Komplett
Guthaben-System ✓
- Balance aus transactions-Tabelle ✓
- Lead-Kauf mit Balance-Abzug ✓
- Transaktionshistorie ✓
- Stripe Checkout Aufladung ✓
Karte & Stripe ✓
- Karte hinterlegen (SetupIntent) ✓
- Stripe-hosted Checkout ✓
- Webhook Handler (3 Events) ✓
- Karte anzeigen / entfernen ✓
Auto-Topup ✓
- Auto-Topup bei Lead-Kauf ✓
- Off-Session PaymentIntent ✓
- Idempotente Verarbeitung ✓
- Fehler-E-Mail bei Decline ✓
Admin Settings ✓
- Settings-Verwaltung (UPSERT) ✓
- Stripe-Status & Verbindungstest ✓
- Auto-Topup Standardwerte ✓
- Maskierte Keys im Admin ✓
15 E-Mail-Templates 14/15 aktiv
Versand via Brevo API · Absender: noreply@trifox.ch
| # | Auslöser | Empfänger | Betreff | Status |
|---|---|---|---|---|
| 1 | Registrierung OTP | Partner | Dein Bestätigungscode | ✓ |
| 2 | Registrierung eingegangen | Partner | Registrierung erhalten | ✓ |
| 3 | Registrierung (Admin-Info) | Admin | Neue Registrierung | ✓ |
| 4 | Freischaltung | Partner | Willkommen! | ✓ |
| 5 | Ablehnung | Partner | Registrierung abgelehnt | ✓ |
| 6 | Neuer Lead | Partner | Neue Offertanfrage | ✓ |
| 7 | Lead gekauft | Partner | Lead-Details freigeschaltet | ✓ |
| 8 | Lead gekauft | Besucher | Anfrage wird bearbeitet | ✓ |
| 9 | Guthaben niedrig | Partner | Guthaben fast leer | ✓ |
| 10 | Guthaben aufgeladen | Partner | Aufladung bestätigt | ✓ |
| 11 | Karte belastet (Auto-Topup) | Partner | Auto-Aufladung bestätigt | ✓ |
| 12 | Karte fehlgeschlagen | Partner | Zahlung fehlgeschlagen | ✓ |
| 13 | Monatsbericht | Partner | Dein Monatsreport | Template |
| 14 | Passwort Reset | Partner | Passwort zurücksetzen | ✓ |
| 15 | Neue Anfrage | Besucher | Anfrage erhalten! | ✓ |
Kategorie-LPs ✓
- SEO-optimiert pro Kategorie
- Meta-Tags, OG-Tags
- Canonical URLs
Blog-Strategie Offen
- Artikel pro Region + Kategorie
- Kontextbezogene Mini-Formulare
- Inhalte müssen geschrieben werden
Technisches SEO Teilweise
- Canonical URLs ✓
- Meta-Tags ✓
- sitemap.xml fehlt
- robots.txt fehlt
Anfängerfreundlich
Hinweistexte, Tooltips, Hilfe-Icons — elegant integriert.
High-End Enterprise
Professionell, vertrauenserweckend. Klare Strukturen, dezente Animationen.
Mobile-First
Responsive, Touch-optimiert. iOS-Zoom-Fix (16px Inputs).
Performance
Kein Framework-Overhead, schnelle Ladezeiten, CDN-Icons.
12 Tabellen ✓ Komplett
| Tabelle | Zweck | Status |
|---|---|---|
users | Partner + Admin | ✓ Aktiv |
categories | Dienstleistungskategorien | ✓ Aktiv |
leads | Eingehende Anfragen (JSON) | ✓ Aktiv |
lead_purchases | Lead-Käufe | ✓ Aktiv |
transactions | Finanztransaktionen | ✓ Aktiv |
prices | Preise pro Kategorie | ✓ Aktiv |
otp_codes | OTP-Verifizierung | ✓ Aktiv |
blog_posts | Blog-Artikel | Schema da, leer |
email_log | E-Mail-Protokoll | Schema da, nicht befüllt |
settings | Systemeinstellungen | ✓ Aktiv |
regions | Regionen / Kantone | Schema da, nicht genutzt |
partner_categories | Partner ↔ Kategorie | Ersetzt durch CSV in users |
Aktuelle Routes
Intern (POST/GET via Forms, kein REST-API)
Phase 1 — Grundgerüst 100%
Datenbank, Auth (Login, Register, OTP), Admin-Backend Basis, MVC-Struktur
Phase 2 — Kategorie-LPs + Lead-Formulare 100%
Landingpages, Multi-Step-Formulare, Lead-Speicherung, Danke-Seiten
Phase 3 — Partner-Dashboard + Stripe 95%
Dashboard UI ✓, Lead-Kauf ✓, Guthaben ✓, Stripe Checkout ✓, Karte ✓, Auto-Topup ✓, Webhooks ✓ — nur PDF-Rechnungen fehlen
Phase 4 — Blog + SEO 30%
Blog-Framework ✓, SEO-Tags ✓ — Blog-Admin, Inhalte, sitemap.xml, Schema.org fehlen
Phase 5 — Optimierung + Marketing 0%
Performance, A/B Testing, Partner-Akquise, Google Ads, Content-Marketing
Hohe Priorität
| # | Feature | Aufwand | Kommentar |
|---|---|---|---|
| Erledigt | ✓ Checkout, Karte, Webhooks, Auto-Topup | ||
| 2 | Blog-Admin (CRUD) | Mittel | Posts erstellen/bearbeiten/löschen |
| 3 | Blog-Inhalte schreiben | Mittel | SEO-Artikel zu Umzug & Reinigung |
Mittlere Priorität
| # | Feature | Aufwand | Kommentar |
|---|---|---|---|
| 4 | Admin: Partner-Guthaben anpassen | Klein | Manuell gut-/abschreiben |
| Erledigt | ✓ 4 Sektionen, Stripe-Status, UPSERT | ||
| 6 | Admin: E-Mail-Log | Klein | Gesendete E-Mails einsehen |
| 7 | Lead-Export CSV | Klein | Admin kann Leads exportieren |
| 8 | E-Mail-Logging aktivieren | Klein | Alle E-Mails in email_log speichern |
| 9 | sitemap.xml + robots.txt | Klein | SEO-Grundlagen |
Niedrige Priorität / Später
| # | Feature | Aufwand | Kommentar |
|---|---|---|---|
| Erledigt | ✓ Off-Session PaymentIntent bei Lead-Kauf | ||
| 11 | Monatsbericht (Cron) | Mittel | Automatischer Report |
| 12 | Rechnungen / PDF | Mittel | PDF-Quittungen |
| 13 | Analytics / Charts | Gross | Grafiken im Dashboard |
| 14 | Weitere Kategorien | Klein | Maler, Gartenbau, Elektro etc. |
| 15 | Regionen-System | Mittel | regions + partner_regions aktivieren |
| 16 | Rate-Limiting | Klein | Brute-Force-Schutz Login/OTP |
Backend
- PHP 8.4 (Apache/Plesk)
- MySQL 8.0, PDO Singleton
- Eigenes MVC-Pattern
- Stripe PHP SDK v16.5 ✓
Frontend
- Vanilla JS
- CSS Custom Properties
- Responsive / Mobile-First
- Keine Build-Tools
- Brevo API (CURL)
- 15 HTML-Templates
- _layout.php Wrapper
- noreply@trifox.ch
Hosting
- Plesk (Hosttech)
- FTP Deployment
- SSL via Plesk
- .env Konfiguration
fixofferten.ch Projektplanung v2.1 · Stand: 13. Februar 2026
✓ Fertig Simuliert In Arbeit Offen