CluHu-Funktionen jenseits des Kerns (Mitglieder/Personen) sind Addons, die pro Verein aktiviert werden.
apps/core/addons_catalog.py::ADDONS (25 Einträge) — Marketing-Daten (Titel, Beschreibung, Kategorie, SVG-Hero). Lebt weiter für Landingpage und öffentlichen Schauraum /addons/.AddonCatalog — wird per python manage.py seed_addon_catalog aus dem statischen Katalog befüllt (idempotent). Zusatzfelder: price_chf, trial_days (Default 30), terms_version, is_published, Detail-Popup-Inhalte. Der Addon-Store rendert aus der DB.⚠️ Deploy-Falle: Nach Katalog-Änderungen immer seed_addon_catalog ausführen — sonst zeigt der Store den alten Stand. Entfernte Slugs werden auf is_published=False gesetzt.
/clucore/addons/)AuthRoleAssignment, nicht Django-Permissions)_compute_addon_gating): Mehrpersonen braucht ≥1 Mitglied; Firmen-Mitglieder braucht aktives Firmen-Addon + Mitglieder. Geblockte Addons zeigen den Grund als Textbilling_status='trial' mit trial_ends_at = now + trial_daysClubAddonTermsAcceptance existiert noch als Audit-Modell, wird aber nicht mehr befüllt.)billing_status='cancelled' — die Zeile bleibt (Audit, Reaktivierung nutzt dieselbe Zeile)AddonCatalog.long_description/video_url/image_urls, core-Migration 0005), Gating-Grund, Aktivieren/Deaktivieren./admin/core/clubaddon/)Plattform-Admin-Weg mit Bulk-Aktionen.
⚠️ Das active-Feld ist eine Falle: Massgeblich ist billing_status (+ trial_ends_at), nicht active — das ist nur ein denormalisierter Schnellzugriff. Wer im Admin nur active=True setzt, aber billing_status='cancelled' lässt, aktiviert nichts. Praktisch korrekt: billing_status='active' setzen.
Kein Cronjob: billing_status='trial' mit vergangenem trial_ends_at fällt einfach aus den Queries (is_active() bzw. der Sidebar-Query). expired wird nirgends automatisch gesetzt.
get_sidebar_items_for_club(club) (apps/core/menu.py) lädt aktive Keys und fügt die passenden ADDON_MENU_ITEMS (aktuell: kalender, news, gruppen, firmen) zwischen „Personen" und „Addon-Store" ein. Defensiv: jede Exception → Addons fehlen einfach (kein 500).
Addons ohne Menüpunkt sind normal: mehrpersonen-mitgliedschaft und firmen-mitglieder schalten Verhalten frei (Canvas-Views, Slots) statt einen Menüpunkt zu zeigen.
Grundsatz (User-Entscheid): kein @requires_addon-Gate auf den eingefrorenen Views — Direkt-URLs (z. B. /clucore/gruppen/) funktionieren auch ohne aktives Addon; das Addon steuert nur die Menü-Sichtbarkeit.
Ausnahmen (hartes View-Gate via club_has_addon): die Mapping-/Canvas-Views (Mehrpersonen, Firmen-Mitglieder) und die News-App (@require_addon('news') mit Upsell-Seite).
| Status | Addon | Abo-Stufe |
|---|---|---|
| ✅ Verfügbar | Kalender | Basis |
| ✅ Verfügbar | News | Basis |
| ✅ Verfügbar | Gruppen | Basis |
| ✅ Verfügbar | Firmen | Basis |
| ✅ Verfügbar | Mehrpersonen-Mitgliedschaft | Basis |
| ✅ Verfügbar | Firmen Mitglieder | Pro (30 Tage Trial) |
| 🔲 Geplant | ~19 weitere | Basis / Pro / Einzel-Abo / Set |
vereins-rollen) und 31 (personen) wurden entfernt, weil die Top-Level-Seiten das Feature abdecken.kalender → apps/events).docs/addons.md im Repo ist auf Stand v0.14.91 eingefroren und in mehreren Punkten überholt — dieses Wiki ist aktueller.