Projektplanung

Stand: 13.02.2026
Projektübersicht

Gesamtfortschritt

~90% Core-Funktionalität komplett · Stripe integriert · Blog-Admin noch offen

fixofferten.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

PHP 8.4 MySQL 8.0 Vanilla JS Stripe PHP SDK Brevo API Plesk / Hosttech Eigenes MVC

Domain: fixofferten.ch · Kein Framework · FTP Deployment

Live-Status aller Features

Infrastruktur & Core

FeatureStatusKommentar
PHP 8.4 MVC-Architektur✓ FertigRouter, Controller, Views, Layouts
MySQL-Datenbank / Schema✓ Fertig12 Tabellen, schema.sql + setup.php
CSRF-Schutz✓ FertigAlle POST-Routes abgesichert
.htaccess / URL-Routing✓ FertigClean URLs via index.php
Session-basierte Auth✓ FertigLogin, Logout, Role-Check
Responsive Design✓ FertigMobile-optimiert, iOS 16px Fix
Lucide Icons (CDN)✓ Fertigunpkg CDN
Cookie-Banner✓ FertigAkzeptieren / Ablehnen

Authentifizierung & Benutzer

FeatureStatusKommentar
Registrierung (4-Step)✓ FertigKategorien → Firmendaten → Kontakt → OTP
OTP E-Mail-Verifizierung✓ Fertig6-Digit, 10 Min. Ablauf, Brevo
Login✓ FertigPasswort-Hash, Status-Check
Logout✓ FertigSession destroy
Passwort vergessen / Reset✓ FertigToken, 30 Min. Ablauf, E-Mail
Admin Seed-User✓ Fertigadmin@fixofferten.ch via setup.php

Kategorieformulare (Frontend)

FeatureStatusKommentar
Umzug-Formular (Multi-Step)✓ Fertig4 Steps + Kontakt
Reinigung-Formular (Multi-Step)✓ Fertig4 Steps + Kontakt
Radio-Cards & Checkbox-Cards✓ FertigAuto-Advance, grüne Selektion
Zimmer-Select (Custom Dropdown)✓ Fertig0.5er-Schritte, Studio → 6+
Nominatim Adress-Autocomplete✓ FertigCH-only, Swiss Format
Datum-Auswahl (Date-Radio)✓ FertigASAP, Ende Monat, Genaues Datum
Stockwerk + Lift (Umzug)✓ FertigInline-Row Select + Radio
OTP im Formular✓ FertigPaste-Support, Auto-Verify
Lead → DB speichern✓ FertigJSON-Details, Status "new"
Danke-Seite✓ Fertig/danke nach Absenden
Weitere KategorienOffenNur Umzug & Reinigung aktiv

Partner-Dashboard

FeatureStatusKommentar
Dashboard-Übersicht✓ FertigStats, Balance, Quick-Actions
Verfügbare Leads✓ FertigGefiltert nach Kategorien, DB-Preise
Lead kaufen✓ FertigBalance-Check, Transaktion, E-Mails
Meine Leads✓ FertigKontaktdaten, Details, Aktionen
Guthaben & Transaktionen✓ FertigBalance-Berechnung, Historie
Guthaben aufladen✓ FertigStripe Checkout (CHF 50/100/200/500)
Zahlungsmethode / Karte✓ FertigStripe SetupIntent, Karte anzeigen/entfernen
Auto-Topup bei Lead-Kauf✓ FertigOff-Session PaymentIntent bei niedrigem Guthaben
Profil bearbeiten✓ FertigFirma, Adresse, Kategorien

Admin-Dashboard

FeatureStatusKommentar
Dashboard-Übersicht✓ FertigStats, Leads, Umsatz
Registrierungen prüfen✓ FertigFreischalten / Ablehnen + E-Mails
Partner-Liste✓ FertigFilter, Suche, Status
Partner-Detail✓ FertigGuthaben, Transaktionen, Sperren
Leads-Liste✓ FertigFilter, Suche, Käufer-Anzahl
Lead-Detail✓ FertigJSON-Details, Käufer-Liste
Kategorien verwalten✓ FertigAktivieren / Deaktivieren
Preise bearbeiten✓ FertigInline-Editor pro Kategorie
Flash-Messages✓ FertigEigenes Admin-Flash-Partial
Blog-Verwaltung (CRUD)OffenKein Blog-Editor im Admin
Lead-Export (CSV)OffenKein Export verfügbar
Partner-Guthaben anpassenOffenAdmin kann nicht manuell gutschreiben
E-Mail-Log anzeigenOffenTabelle existiert, kein UI
Settings-Verwaltung✓ Fertig4 Sektionen: Allgemein, Lead, Stripe-Status, Auto-Topup

E-Mail-System (Brevo)

TemplateStatusKommentar
OTP-Code✓ FertigRegistrierung & Lead-Formular
Registrierung bestätigt✓ FertigAn Partner
Registrierung eingegangen✓ FertigAn Admin
Freischaltung✓ FertigAn Partner
Ablehnung✓ FertigAn Partner mit Grund
Neuer Lead (Benachrichtigung)✓ FertigAn passende Partner
Lead gekauft (Partner)✓ FertigKontaktdaten freigeschaltet
Lead gekauft (Besucher)✓ Fertig"N Partner kontaktieren Sie"
Lead-Bestätigung (Besucher)✓ FertigNach Formular-Absendung
Guthaben niedrig✓ FertigWarnung bei < Schwellwert
Guthaben aufgeladen✓ FertigBestätigung + neuer Stand
Passwort zurücksetzen✓ FertigReset-Link, 30 Min.
Karte belastetTemplateWird erst mit Stripe aktiv
Karte fehlgeschlagenTemplateWird erst mit Stripe aktiv
MonatsberichtTemplateKein Cron-Job
E-Mail-Logging in DBOffenemail_log Tabelle da, wird nicht befüllt

Bezahlung & Billing

FeatureStatusKommentar
Guthaben-System (Balance)✓ FertigBerechnung über transactions-Tabelle
Lead-Kauf (Balance-Abzug)✓ FertigPrüft Balance, erstellt Transaktion
Stripe Checkout (Aufladung)✓ FertigStripe-hosted Checkout, CHF, Dynamic Payment Methods
Stripe Karten-Speicherung✓ FertigSetupIntent via Checkout, Default Payment Method
Stripe Webhooks✓ Fertigcheckout.session.completed, payment_intent.succeeded/failed
Auto-Topup✓ FertigOff-Session PaymentIntent bei Lead-Kauf, idempotent
Webhook Signatur-Verifikation✓ FertigSTRIPE_WEBHOOK_SECRET, constructEvent()
Rechnungen / PDFOffenKeine PDF-Generierung

Seiten & Content

SeiteStatusKommentar
Startseite✓ Fertig2 Kategorien, Hero, CTA
Partner-Landingpage✓ FertigVorteile, Preise, CTA
Blog-Index✓ FertigDB-driven, published Posts
Blog-Detailseite✓ FertigSEO, Single Post
Blog-InhalteLeerKeine Posts vorhanden
Impressum✓ FertigStatisch
Datenschutz✓ FertigStatisch
AGB✓ FertigStatisch
404-Seite✓ FertigCustom 404

Lead-Flow (End-to-End)

SchrittStatus
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
Seitenstruktur
SeiteRouteBeschreibungTypStatus
Startseite/KategorieübersichtPublic
Umzug LP/umzugMulti-Step FormularPublic
Reinigung LP/reinigungMulti-Step FormularPublic
Blog/blogArtikel-IndexPublicLeer
Partner-Werbeseite/partnerVorteile, CTAPublic
Registrierung/registrieren4-Step + OTPPublic
Login/loginE-Mail + PasswortPublic
Partner-Dashboard/dashboard7 TabsPartner
Admin-Backend/admin9 SektionenAdmin
Danke-Seite/dankeNach FormularPublic
Impressum/impressumRechtlichesPublic
Datenschutz/datenschutzDSEPublic
AGB/agbAGBPublic
Registrierung & Freischaltung

Freischaltungs-Flow ✓ Komplett

Formular ausfüllen
OTP per E-Mail
Status: Pending
Admin prüft
Freigabe → Dashboard
Lead-Flow

Vom Besucher zum Partner ✓ Komplett E2E

Formular ausfüllen
Lead in DB
Partner benachrichtigt
Lead kaufen
Kontakt freigeschaltet
Bezahlung & Stripe

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 ✓
E-Mail-Plan

15 E-Mail-Templates 14/15 aktiv

Versand via Brevo API · Absender: noreply@trifox.ch

#AuslöserEmpfängerBetreffStatus
1Registrierung OTPPartnerDein Bestätigungscode
2Registrierung eingegangenPartnerRegistrierung erhalten
3Registrierung (Admin-Info)AdminNeue Registrierung
4FreischaltungPartnerWillkommen!
5AblehnungPartnerRegistrierung abgelehnt
6Neuer LeadPartnerNeue Offertanfrage
7Lead gekauftPartnerLead-Details freigeschaltet
8Lead gekauftBesucherAnfrage wird bearbeitet
9Guthaben niedrigPartnerGuthaben fast leer
10Guthaben aufgeladenPartnerAufladung bestätigt
11Karte belastet (Auto-Topup)PartnerAuto-Aufladung bestätigt
12Karte fehlgeschlagenPartnerZahlung fehlgeschlagen
13MonatsberichtPartnerDein MonatsreportTemplate
14Passwort ResetPartnerPasswort zurücksetzen
15Neue AnfrageBesucherAnfrage erhalten!
SEO-Strategie

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
UX-Prinzipien

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.

Datenbank-Schema

12 Tabellen ✓ Komplett

TabelleZweckStatus
usersPartner + Admin✓ Aktiv
categoriesDienstleistungskategorien✓ Aktiv
leadsEingehende Anfragen (JSON)✓ Aktiv
lead_purchasesLead-Käufe✓ Aktiv
transactionsFinanztransaktionen✓ Aktiv
pricesPreise pro Kategorie✓ Aktiv
otp_codesOTP-Verifizierung✓ Aktiv
blog_postsBlog-ArtikelSchema da, leer
email_logE-Mail-ProtokollSchema da, nicht befüllt
settingsSystemeinstellungen✓ Aktiv
regionsRegionen / KantoneSchema da, nicht genutzt
partner_categoriesPartner ↔ KategorieErsetzt durch CSV in users
API-Endpoints

Aktuelle Routes

Intern (POST/GET via Forms, kein REST-API)

POST/api/send-otpOTP senden (Brevo)
POST/registrierenPartner-Registrierung
POST/loginLogin
POST/dashboard/lead-kaufenLead kaufen
POST/dashboard/topupStripe Checkout Aufladung
GET/dashboard/topup-successAufladung Erfolgsseite
GET/dashboard/topup-cancelAufladung abgebrochen
POST/dashboard/karte-hinzufuegenStripe Setup Checkout
POST/dashboard/karte-entfernenKarte entfernen
GET/dashboard/karte-successKarte gespeichert
POST/dashboard/auto-topupAuto-Topup Einstellungen
POST/api/stripe-webhookStripe Webhook Handler
POST/admin/approvePartner freischalten
POST/admin/rejectPartner ablehnen
POST/admin/kategorie-toggleKategorie aktivieren/deaktivieren
POST/admin/preis-updatePreis ändern
POST/admin/partner-statusPartner sperren/aktivieren
GET/admin/einstellungenAdmin Settings anzeigen
POST/admin/einstellungenSettings speichern
POST/admin/stripe-testStripe Verbindungstest
Roadmap
1

Phase 1 — Grundgerüst 100%

Datenbank, Auth (Login, Register, OTP), Admin-Backend Basis, MVC-Struktur

2

Phase 2 — Kategorie-LPs + Lead-Formulare 100%

Landingpages, Multi-Step-Formulare, Lead-Speicherung, Danke-Seiten

3

Phase 3 — Partner-Dashboard + Stripe 95%

Dashboard UI ✓, Lead-Kauf ✓, Guthaben ✓, Stripe Checkout ✓, Karte ✓, Auto-Topup ✓, Webhooks ✓ — nur PDF-Rechnungen fehlen

4

Phase 4 — Blog + SEO 30%

Blog-Framework ✓, SEO-Tags ✓ — Blog-Admin, Inhalte, sitemap.xml, Schema.org fehlen

5

Phase 5 — Optimierung + Marketing 0%

Performance, A/B Testing, Partner-Akquise, Google Ads, Content-Marketing

Offene Punkte (Priorität)

Hohe Priorität

#FeatureAufwandKommentar
1Stripe-IntegrationErledigt✓ Checkout, Karte, Webhooks, Auto-Topup
2Blog-Admin (CRUD)MittelPosts erstellen/bearbeiten/löschen
3Blog-Inhalte schreibenMittelSEO-Artikel zu Umzug & Reinigung

Mittlere Priorität

#FeatureAufwandKommentar
4Admin: Partner-Guthaben anpassenKleinManuell gut-/abschreiben
5Admin: Settings-VerwaltungErledigt✓ 4 Sektionen, Stripe-Status, UPSERT
6Admin: E-Mail-LogKleinGesendete E-Mails einsehen
7Lead-Export CSVKleinAdmin kann Leads exportieren
8E-Mail-Logging aktivierenKleinAlle E-Mails in email_log speichern
9sitemap.xml + robots.txtKleinSEO-Grundlagen

Niedrige Priorität / Später

#FeatureAufwandKommentar
10Auto-TopupErledigt✓ Off-Session PaymentIntent bei Lead-Kauf
11Monatsbericht (Cron)MittelAutomatischer Report
12Rechnungen / PDFMittelPDF-Quittungen
13Analytics / ChartsGrossGrafiken im Dashboard
14Weitere KategorienKleinMaler, Gartenbau, Elektro etc.
15Regionen-SystemMittelregions + partner_regions aktivieren
16Rate-LimitingKleinBrute-Force-Schutz Login/OTP
Tech-Details

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

E-Mail

  • 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