Creator-Registrierung
[admin] [signup]
Self-Service-Registrierung unter https://admin.licensio.io/register. Neue Creators können ihren Account und ihr Portal in unter 2 Minuten anlegen — ohne Kreditkarte für den Free-Plan.
Hinweis: Die öffentliche Marketing-Seite unter
https://licensio.io(eigene Next.js-Appapps/marketing, separates Vercel-Deployment, i18n EN/DE mit Flaggen-Dropdown im Header) verlinkt aus Header (Sign up) + Hero (Start for free →) + Pricing-Cards direkt aufhttps://admin.licensio.io/register?plan=<key>&lang=<locale>. Plan-Param + Sprache werden im Register-Form übernommen. Scale-Karte und Contact-Section unten öffnenmailto:malte@licensio.io.
Sprache auf der Register-Seite: Resolution-Reihenfolge ist
?lang=en|de(URL-Param) > LocalStoragelicensio_locale> Defaulten. Flag-Dropdown rechts oben erlaubt manuellen Wechsel; Auswahl wird in admin-LocalStorage persistiert (cross-domain istlicensio.io⇆admin.licensio.iogetrennt). Form-Labels, Plan-Features, Buttons, Error-Messages alles übersetzt. Phase 2: gleiche i18n-Logik im Admin-Dashboard.
Lifecycle nach Registrierung
- Tenant + Auth-User + tenant_users-Verknüpfung werden in
/api/registererzeugt (Self-Service-Signup, direkt bestätigte Email). - Vercel-Subdomain-Provisioning:
<slug>.licensio.iowird automatisch beim Vercel-Portal-Projekt registriert (best-effort — Fehler logged, Registrierung selbst bricht nicht ab; sieheapps/admin/lib/vercel-domain.ts). - Welcome-Email an die Registrier-Adresse (Resend,
from: noreply@licensio.io): "Welcome to licensio.io 🎉" + CTA zuhttps://${slug}.licensio.io+ Hinweis aufadmin.licensio.io. Best-effort. - Free-Plan: redirect zu
/onboarding. Basic/Pro: redirect zu Stripe-Checkout-Session (mode: 'subscription', Price-ID ausLICENSIO_BASIC_PRICE_ID/LICENSIO_PRO_PRICE_ID). Metadata:tenant_id,tenant_slug,plan,licensio_subscription: 'true'. - Stripe-Webhook (
/api/stripe/licensio-webhook) verarbeitetcheckout.session.completed→ updatedtenants.plan,plan_started_at,licensio_stripe_customer_id,licensio_subscription_id. Späteresubscription.updated/deleted/payment_failedEvents updaten den Plan-Status weiter (Cancel → 'free', Plan-Wechsel → Price-ID-Mapping).
Forgot-Password / Reset-Password
/forgot-password(maintenance-exempt): Email-Input →POST /api/auth/forgot-passwordruftsupabase.auth.resetPasswordForEmail(email, { redirectTo: '/reset-password' }). Antwort immer{ success: true }(kein Info-Leak)./reset-password(maintenance-exempt): wartet auf Supabase-PASSWORD_RECOVERYEvent, ruft dann clientseitigupdateUser({ password }). Recovery-Session kommt automatisch über den Email-Link; kein separater Server-Endpoint nötig.
Für wen
Neue Creators (Tenants), die mit licensio starten wollen.
Schritt für Schritt
1. Plan wählen
Auf /register vier Karten:
- Free (0€/Monat, 15% Provision) — keine Kreditkarte nötig
- Basic (19,99€/Monat, 5% Provision) — ⭐
Empfohlen-Badge, Stripe-Checkout direkt nach Registrierung - Pro (49,99€/Monat, 2% Provision) — Stripe-Checkout direkt nach Registrierung
- Scale (Auf Anfrage, 1% Provision) — 🏢
Enterprise-Badge, kein Self-Service-Checkout: Klick öffnetmailto:hello@licensio.io?subject=Scale Plan
Mehr Details: Plans.
2. Account-Felder ausfüllen
- Shop / Portal-Name — wird zu Subdomain konvertiert. Live-Preview zeigt
<slug>.licensio.iowährend du tippst. Nur a-z, 0-9, Bindestriche; 3–30 Zeichen - E-Mail — primäres Login + Stripe-Customer-Mail
- Passwort — min. 8 Zeichen
- Passwort bestätigen
- AGB + Datenschutz akzeptieren (Pflicht)
Reservierte Subdomains (admin, www, api, wiki, app, docs, mail, support, etc.) werden abgelehnt.
3. Submit
Backend führt aus:
- Validation (Email-Format, Passwort-Länge, Slug-Pattern)
- Slug + Email Eindeutigkeits-Check
auth.admin.createUser({ email_confirm: true })— Account direkt aktiv ohne Mail-BestätigungtenantsINSERT mit Default-Branding (primary_color: #0070F3,button_style: rounded)tenant_usersINSERT mitrole='admin'- Free → Redirect zu
/onboarding - Basic / Pro → Stripe Checkout-Session erstellen, Redirect zur Stripe-Checkout-URL. Scale →
mailto:hello@licensio.io?subject=Scale Plan(kein Self-Service-Checkout)
Bei Fehlern wird der Auth-User + Tenant-Eintrag rückgängig gemacht (Rollback).
4. Onboarding-Wizard
Nach erfolgreicher Registrierung führt ein 5-Schritte-Wizard durch:
- Willkommen — Portal-URL
<slug>.licensio.ioin einer prominenten Info-Box mit Hinweis "Dieser Name wurde bei der Registrierung festgelegt und kann nicht mehr geändert werden". Branding-Anpassungen sind weiterhin möglich. - Branding — Firmenname + Primärfarbe (Logo + weitere Farben später im Dashboard)
- Stripe Connect — Klick auf "Stripe verbinden" startet Express-Onboarding via
/api/stripe/connect/authorize?return=onboarding. Nach Stripe-Setup landest du wieder auf/onboarding?step=4&stripe=connected. - Erstes Produkt — Direkt-Link zur Produkt-Anlage (oder skip)
- Fertig — Portal-URL mit Copy-Button, Übersicht "Was als nächstes", Link zum Dashboard
Progress-Bar oben (5 Punkte) + Step-Counter unten zeigen den Fortschritt. Slug wird in localStorage persistiert. URL-Parameter ?step=N springt zum entsprechenden Schritt (z.B. nach Stripe-Connect-Return).
5. Plan-Gates im Admin
Features, die nicht im aktuellen Plan enthalten sind, werden ausgeblendet statt gesperrt (seit 2026-05-29, kein Lock-Banner / 🔒-Badge / Upgrade-CTA mehr):
- Widget- + Domain-Tab in Settings sowie die zugehörigen Advanced-Kacheln erscheinen nur, wenn der Plan das Feature hat
- Bulk Import, API, PrintFarm analog — Nav-Eintrag fehlt komplett ohne das Feature
- Direktaufruf einer Feature-Page ohne Berechtigung → 404 (
notFound()) - Feature-Promotion läuft über Newsletter + App-Store (Phase 4), nicht mehr über Lock-Hinweise
Sichtbarkeits-Logik in apps/admin/lib/plans.ts (isFeatureAvailable + has_*-Flags). apps/admin/components/PlanGate.tsx rendert bei fehlendem Feature null (defensive Content-Schicht, future-proof). Backend-API-Routes prüfen den Plan zusätzlich serverseitig (403).
Häufige Fragen
Was wenn der Shop-Name schon vergeben ist?
Frontend bekommt 409 Conflict mit Fehlermeldung "Dieser Shop-Name ist bereits vergeben". Anderen Namen wählen.
Wie schnell ist mein Portal erreichbar?
Sofort. <slug>.licensio.io zeigt direkt nach Registrierung dein Portal mit Default-Branding. SSL via Vercel-Wildcard automatisch.
Kann ich vom Free-Plan auf Basic/Pro upgraden? Bei der Erstregistrierung wählst du den Plan direkt — Basic/Pro gehen über Stripe Checkout, Scale per Mail an Sales. Wechsel eines bestehenden Plans (z. B. Free → Basic nach 3 Monaten) ist Phase 2; bis dahin: Mail an Support.
Was passiert bei abgebrochenem Stripe-Checkout (Basic / Pro)?
Account ist bereits angelegt mit dem gewählten Plan. User landet zurück auf /register?cancelled=true mit Hinweis. Account kann später durch erneuten Checkout aktiviert werden — Plan-Status bleibt aber wie gewählt (zahlt nichts solange keine aktive Stripe-Subscription besteht).
Werden Daten beim Account-Löschen DSGVO-konform behandelt?
Tenant-Löschung läuft über Support-Anfrage. DSGVO Art. 17 wird mit tenant_users + tenants gelöscht; Customer-Daten in deleted_customers archiviert (anonymisiert).
Verwandt
- Plans — Tarif-Übersicht
- Erste Schritte — nach der Registrierung
- Branding — Portal anpassen