Paket-Einschränkungen & Feature-Flags
[pakete] [admin] [billing]
Pro Lizenzpaket lässt sich definieren welche Produkte sichtbar sind und welche Funktionen freigeschaltet werden. Granulare Kontrolle über das Angebot.
Für wen
Admins, die mehrere Pakete mit unterschiedlichem Umfang anbieten wollen. Die Namen (z.B. "Basic", "Pro", "Enterprise") sind deine eigenen Paketnamen, die du für deine Kunden vergibst.
Was ist konfigurierbar
Produkt-Sichtbarkeit (Whitelist / Blacklist)
Kategorien:
allowed_categories— Whitelist: nur diese Kategorien sind sichtbar. Leer = alle.excluded_categories— Blacklist: diese Kategorien sind ausgeschlossen. Gewinnt immer (auch gegen Whitelist).
Kompatibilitäten:
allowed_compatibilities— Whitelist: nur Produkte mit mindestens einem dieser Tags. Produkte ohne Compat-Tags sind immer sichtbar.excluded_compatibilities— Blacklist.
Hard-Limits (Anzahl)
max_downloads_per_month— Monatliche Download-Quote (Reset 1. des Monats UTC). 0 = unbegrenzt.max_printers— Wie viele Drucker pro Kunde. 0 = unbegrenzt.max_active_licenses— Wie viele Kunden gleichzeitig aktiv auf diesem Paket. 0 = unbegrenzt. (Enforcement TBD — siehe Wiki-Hinweis unten)
Feature-Flags
has_crm_access— CRM-Tab im Portal sichtbar (Platzhalter, Phase 2)has_api_access— reserviert für eine künftige programmatische API (noch nicht gebaut: keine API-Keys, keine Endpoints)has_white_label— reserviert für White-Label-Optionen (z.B. Footer-Logo entfernen) (Phase 2)has_priority_support— Tickets bekommen "Priority"-Tag in der Admin-Inboxwatermark_downloads— Downloads bekommen Watermark (noch nicht implementiert)
Wo gilt es
Portal: Produkt-Liste
/dashboard/products filtert anhand von:
- excluded_categories (raus)
- allowed_categories (nur Whitelist sichtbar)
- excluded_compatibilities (raus)
- allowed_compatibilities (nur wenn Item Compats hat)
Implementierung: apps/portal/app/dashboard/products/page.tsx.
Portal: Feed-Export
Feed-Export wendet die identische Logik an. Was im Portal nicht sichtbar ist, ist auch im Feed nicht.
Admin: Produkt-Auswahl im Paket
Einstellungen → Pakete → Paket bearbeiten → Tab "Einschränkungen" zeigt eine Liste aller Kategorien + Compats des Anbieter mit Whitelist/Blacklist-Toggles.
Schritt für Schritt — Paket-Einschränkungen anpassen
1. Paket öffnen
Einstellungen → Pakete → Paket auswählen.
2. Tab "Einschränkungen"
- Erlaubte Kategorien: Multi-Select aller Kategorien deines Katalogs.
- Ausgeschlossene Kategorien: Multi-Select.
- Erlaubte Kompatibilitäten: Multi-Select aller Compat-Tags.
- Ausgeschlossene Kompatibilitäten: Multi-Select.
Leer lassen = keine Einschränkung (= alle freigegeben).
3. Tab "Limits"
- max_downloads_per_month
- max_printers
- max_active_licenses
4. Tab "Features"
- has_crm_access, has_api_access, has_white_label, has_priority_support, watermark_downloads (Toggle pro Flag)
5. Speichern
Wirkt sofort für alle Kunden auf diesem Paket — beim nächsten Portal-Aufruf sehen sie die neue Auswahl.
Häufige Fragen
Was wenn ich ein Produkt NACH Paket-Erstellung in eine ausgeschlossene Kategorie packe? Es verschwindet sofort aus dem Portal aller Kunden auf diesem Paket. Wirkt rückwirkend.
Wie zeige ich Kunden welche Limits sie haben?
Im Account-Tab "Mein Account" gibt es eine Sektion "Paket-Nutzung" mit aktuellem Verbrauch (Downloads-this-month, Drucker-Count). Implementiert in apps/portal/app/dashboard/account/PackageUsageSection.tsx.
Was passiert wenn max_downloads_per_month erreicht ist?
Aktuell: Anzeige der Quote im Portal, aber Download-Trigger wird noch nicht hart blockiert (Enforcement TBD). Drucker-Limit ist hingegen bereits aktiv: /api/portal/printers POST returnt 429 mit { limit, used }.
Kann ich Pakete migrieren? Im Kunden-Detail kannst du das Paket eines Kunden ändern. Die neuen Einschränkungen wirken sofort.
Was bedeutet show_in_join_preview?
Separate Flag (nicht in dieser Kategorie). Steuert ob das Paket auf der Landing-Page als Pricing-Card erscheint oder nur per Einladung verteilt wird.
Verwandt
- Pakete — Pakete generell konfigurieren
- Feed-Export — Einschränkungen wirken auch hier
- Account — Kundensicht der Limits