# Deploy 22.09.2026 — E1 Recruiting Challenge (live seit 23.09.) > **Stand 25.09.:** Deployt am 23.09., Nachträge (Gleichstand, Zählung nach Zahlungsdatum, Schalter „Abos berücksichtigen“) live seit 25.09. Montenegro ist beendet. Start der Challenge verschoben auf den **9. Oktober**; Seeder mit neuem Datum und EN/ES/FR-Texten erneut einspielen (`php artisan db:seed --class=RecruitingChallenge2026Seeder --force`). Aktueller Stand im [Entwicklungsplan E1](../_tickets/entwicklungsplan-protokoll-september-2026.md). Paket aus dem [Entwicklungsplan E1](../_tickets/entwicklungsplan-protokoll-september-2026.md), Inhalte in [2026-09-18-recruiting-challenge-inhalte.md](../_tickets/2026-09-18-recruiting-challenge-inhalte.md). Letzter Deploy-Stand auf Produktion: `203999a` (14.09., Team-Statistik). ## Commits | Commit | Inhalt | | --- | --- | | `b28f51b` | Geldprämie, Umsatzpunkte-Schalter, Auszahlungs-Export, mehrere aktive Incentives | | `0894733`, `b091dd9` | Inhaltsvorlage, Texte als Seeder | | `9879e67` | „Nur für VIP sichtbar“, Teilnahme-Block oben | | `186398a`, `99370b3` | Bilder je Incentive, Prämie je Teampartner statt Punkte | | `a1d8902`, `10b7494`, `5204444` | Eine Incentive-Seite (Teaser + Rangliste), Layout | | `9b6717c`, `fb4313f` | VIP-Badge in der Navigation, Titelbild, Dashboard mit einem Button | Das Paket ist unabhängig vom noch offenen Abo-/Audit-Paket (`c0535be`, `ec3ecad`, `66c6ae0`, `4899e3a`, 74 Dateien); die einzige gemeinsame Datei ist der Entwicklungsplan. Beide Pakete können getrennt oder zusammen live gehen. ## Achtung: drei Dateien nicht aus dem Arbeitsverzeichnis hochladen `app/Http/Controllers/HomeController.php`, `routes/domains/crm.php` und `resources/views/layouts/includes/layout-sidenav.blade.php` enthalten im Arbeitsverzeichnis zusätzlich uncommittete Arbeit (Newsletter-Listen, Berater-Übertragung, Payline). Deshalb liegt das komplette Paket als Archiv aus dem Commit-Stand bereit: ``` storage/app/deploy/e1-recruiting-challenge-2026-09-22.tar.gz ``` Erzeugt mit `git archive HEAD …` über alle geänderten Dateien ohne `tests/` und `dev/`. Das Archiv auf dem Server im Projektverzeichnis entpacken (`tar -xzf … -C /pfad/zum/projekt`), es enthält die Pfade relativ zur Projektwurzel. ## Dateien im Paket ``` app/Http/Controllers/Admin/IncentiveController.php app/Http/Controllers/HomeController.php app/Http/Controllers/User/IncentiveController.php app/Models/Incentive.php app/Models/IncentiveParticipant.php app/Services/Incentive/IncentivePayoutService.php (neu) app/Services/Incentive/IncentivePointsLogRepairService.php app/Services/Incentive/IncentiveTracker.php database/migrations/2026_09_18_130000_add_payout_fields_to_incentives_table.php (neu) database/migrations/2026_09_22_100000_add_vip_only_to_incentives_table.php (neu) database/seeders/RecruitingChallenge2026Seeder.php (neu) public/img/incentive/montenegro-incentive-2026/nikki-beach*.jpg (8 Dateien, verschoben) public/img/incentive/recruiting-challenge-2026-27/incentive-recruiting-2026.jpg (neu) resources/lang/de/incentive.php, en, es, fr resources/views/admin/incentive/_form.blade.php resources/views/admin/incentive/show.blade.php resources/views/dashboard/_incentive.blade.php resources/views/layouts/includes/layout-sidenav.blade.php resources/views/user/incentive/_how_it_works.blade.php (neu) resources/views/user/incentive/_payout_bullets.blade.php (neu) resources/views/user/incentive/_payout_tile.blade.php (neu) resources/views/user/incentive/details.blade.php resources/views/user/incentive/teaser.blade.php routes/domains/crm.php ``` Auf dem Server löschen: ``` resources/views/user/incentive/show.blade.php public/img/incentive/nikki-beach.jpg … nikki-beach7.jpg (liegen jetzt im Unterordner) ``` ## Terminal ```bash composer dump-autoload # neuer Seeder php artisan migrate # incentives: amount_per_partner, bonus_rank_1..3, include_sales_points, vip_only php artisan db:seed --class=RecruitingChallenge2026Seeder # Challenge als Entwurf, nur VIP, mit Texten und Bild php artisan view:clear && php artisan route:clear && php artisan config:clear ``` Die Migrationen fügen nur Spalten mit Standardwerten hinzu, Montenegro bleibt unverändert (Umsatzpunkte an, keine Prämie, für alle sichtbar). Kein Snapshot-Neuaufbau, keine Datenänderung. ## Danach im Admin 1. Incentives → „Recruiting Challenge 2026/27“ öffnen, Texte und Werte prüfen (50 € / 500 / 300 / 200, Umsatzpunkte aus, nur VIP). 2. Status auf „Aktiv“ stellen. Sichtbar ist die Challenge dann nur für VIP-Konten (Sidenav mit Badge „VIP“, Dashboard-Karte, Seite `/incentive/recruiting-challenge-2026-27`). 3. Nach Freigabe durch Dani/Alois: Haken „Nur für VIP sichtbar“ entfernen. Ab dann sehen alle Berater die Challenge. Gezählt wird ab 09.10. (bis 24.09. geplant: 01.10.) automatisch, unabhängig vom Zeitpunkt der Freischaltung (`incentive:calculate` läuft täglich 05:00 für alle aktiven Incentives). ## Woran man merkt, dass etwas nicht stimmt - Montenegro-Seite: Galerie zeigt weiterhin die acht Strandfotos (Unterordner wurde hochgeladen). - Challenge-Seite als VIP: Teilnahme-Block oben, Titelbild, drei Kacheln, „So funktioniert die Challenge“ über die volle Breite, Live-Ranking unten, keine Impressionen. - Als normaler Berater: Challenge nirgends sichtbar, `/incentive/recruiting-challenge-2026-27` liefert 404. - Admin-Detailseite: Button „Auszahlungs-Export (XLSX)“ und Badge „nur VIP“. ## Offen (nicht in diesem Paket) ~~Gleichstandsregel „zuerst erreicht“~~ (live 25.09.), Storno entfernt Wertung, Export nur bestätigte Teilnehmer, ~~Übersetzungen EN/ES/FR~~ (im Seeder, 25.09.) — siehe Abschnitte 9 und 10 der Inhaltsvorlage.