- storage/fonts (dompdf-Font-Cache, schreibt die App selbst) und
storage/reports (CSV mit E-Mail-Adressen): nicht mehr versioniert, ignoriert
- storage/oauth-*.key: standen trotz /storage/*.key im Index
- _static/: stand trotz .gitignore im Index (63 MB Altbestand)
- public/phpinfo.php entfernt (oeffentlich aufrufbar)
Lokale Dateien bleiben liegen. Auf Live direkt auf den Tag mit diesem
Commit umstellen, sonst loescht der Checkout die Dateien dort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher per .gitignore ausgeschlossen und nur per SFTP auf Live. Fuer den
Git-Deploy gehoert der Theme-Build ins Repository. Entfernt: Demos, Tests,
Quellen, ungenutzte Bibliotheken und die PHP-Beispielskripte von
slim-image-cropper (lagen oeffentlich im Webroot). 1292 -> 390 Dateien,
31 MB -> 13 MB. RELEASE (schreibt deploy.sh) wird ignoriert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Titelbild liegt unter public/img/incentive/recruiting-challenge-2026-27/,
der Seeder traegt den Dateinamen ein. Die Dashboard-Karte verlinkt nur
noch auf die eine Incentive-Seite, der Ranglisten-Button entfaellt.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Titelbild und Galerie liegen jetzt in public/img/incentive/<slug>/, der
Hauptordner ist nur noch Fallback fuers Titelbild. Damit erscheinen die
Montenegro-Impressionen nicht mehr unter der Challenge; die Fotos sind in
montenegro-incentive-2026/ verschoben.
Teaser: Call to Action "Bist du bereit fuer die Challenge?" mit Button ganz
oben. Bei Geldpraemie zeigen die Kacheln "Deine Praemie" (50 EUR je neuem
Teampartner) und "Top 3 Bonus" statt Incentive-Punkte, darunter der Abschnitt
"So funktioniert die Challenge". Rangliste: Button "Jetzt teilnehmen" wieder
in der Sekundaerfarbe.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Einmalprodukte (Normalsortiment, show_on 3) können jetzt schon beim
Abo-Abschluss hinzugefügt werden – im Portal-Wizard (Abschnitt im
Upgrade-Schritt) und in allen drei Sales-Center-Abo-Strecken (eigene
Produktliste). Variante A: Zeilen laufen als Cart-Option abo_addon mit
durch den Checkout, werden sofort bezahlt und mit der Erstlieferung
verschickt (Rechnung/Lieferschein gruppieren automatisch).
- Checkout persistiert is_abo_addon (CheckoutRepository, PaymentHelper)
- createAboItems/ensureUserAboItemsFromLatestOrder überspringen Addons
(sonst würden Einmalprodukte dauerhaft wiederkehren); amount ohne
Addon-Anteil; aboHasBaseProduct ignoriert Addon-Zeilen
- CreateAboReplacementOrder propagiert is_abo_addon in Ersatzbestellungen
- iq-shopping-cart.js: zweite Datatable + abo_addon-Flag-Weitergabe
- i18n: neue abo.onetime_create_*-Keys (de/en/es/fr); zusätzlich es/fr
komplett synchronisiert (abo-Kartenblock, navigation, payment,
weborder inkl. Entfernung PAYONE-Altlasten, withdrawal.php neu)
- Tests: AboCreateOneTimeItemsTest, AboCreateOneTimeCartTest,
AboPortalCreateOneTimeTest (17 neue, 122 Tests gesamt grün)
Plan: dev/2026-07-21-abo-einmalprodukte-anlage/
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>