mitai-jinkendo/.claude/docs/technical/CENTRAL_SUBSCRIPTION_SYSTEM.md
Lars 7940dc7560 docs: Struktur .claude/docs versionieren, working/, Gitea-Index, Regeln
- .gitignore: .claude/docs, rules, commands tracken; settings.local weiter ignorieren
- DOCUMENTATION.md: verbindliche Ablage functional/technical/working/issues
- .claude/README.md: Agent-Einstieg; GITEA_ISSUES_INDEX aus MCP (Stand 2026-04-08)
- Arbeitspapiere von docs/ nach .claude/docs/working/ verschoben
- docs/MEMBERSHIP_SYSTEM.md als Stub; kanonisch technical/MEMBERSHIP_SYSTEM.md
- CLAUDE.md Pflichtlektüre und Links angepasst; docs/README.md vereinfacht

Made-with: Cursor
2026-04-08 13:01:49 +02:00

5.1 KiB

Zentrales Abo-System (Zukunft)

Vision

Ein zentrales Abo-System für alle Jinkendo Apps:

  • mitai.jinkendo.de (Körper-Tracking) 身体
  • miken.jinkendo.de (Meditation) 眉間
  • ikigai.jinkendo.de (Lebenssinn) 生き甲斐
  • shinkan.jinkendo.de (Kampfsport) 真観

Konzept

Zentrale Webseite: jinkendo.de

  • Zentrale Landing-Page mit allen Apps
  • Zentrale Abo-Verwaltung (Stripe-Integration)
  • User-Account übergreifend für alle Apps
  • Single Sign-On (SSO) zwischen Apps

Abo-Modelle (Ideen)

Option 1: App-spezifische Abos

mitai Basic:  €5/Monat  → Nur Mitai Premium
miken Basic:  €5/Monat  → Nur Miken Premium

Option 2: Kombinierte Abos

Jinkendo Basic:    €8/Monat   → 2 Apps
Jinkendo Premium:  €12/Monat  → Alle 4 Apps
Jinkendo Family:   €20/Monat  → Alle Apps + 3 Profile

Option 3: Feature-basiert

Free:     Basis-Features alle Apps
Basic:    Erweiterte Features (KI, Export, etc.)
Premium:  Unlimited + Priority Support

Technische Umsetzung

Backend

Zentrale Auth-API

auth.jinkendo.de
  POST /register    → User-Account erstellen
  POST /login       → JWT Token für alle Apps
  POST /refresh     → Token erneuern
  GET  /me          → User-Info mit Abo-Status

Subscription-API

subscriptions.jinkendo.de
  GET  /plans                     → Verfügbare Abos
  POST /subscribe                 → Stripe Checkout Session
  GET  /my-subscription           → Aktuelles Abo + Features
  POST /cancel                    → Abo kündigen
  POST /webhook                   → Stripe Webhook

App-Integration

Jede App prüft beim Start:

const subscription = await fetch('https://subscriptions.jinkendo.de/my-subscription', {
  headers: { 'Authorization': `Bearer ${jwt_token}` }
})

// subscription.features: ['mitai_premium', 'miken_basic', ...]
// App aktiviert entsprechende Features

Frontend

Zentrale Webseite (jinkendo.de)

  • Next.js oder React + Vite
  • Stripe Elements für Payment
  • Dashboard: Übersicht alle Apps + Abo-Status
  • Rechnung-Historie

App-Anpassungen

TrialBanner:

<a href="https://jinkendo.de/upgrade?app=mitai">
  Jetzt upgraden
</a>

Settings → Abo:

  • Link zu https://jinkendo.de/account/subscription
  • Oder Embedded iFrame

Datenbank-Schema (zentral)

users

CREATE TABLE users (
  id            UUID PRIMARY KEY,
  email         VARCHAR(255) UNIQUE NOT NULL,
  password_hash VARCHAR(255) NOT NULL,
  name          VARCHAR(100),
  created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

subscriptions

CREATE TABLE subscriptions (
  id                  SERIAL PRIMARY KEY,
  user_id             UUID REFERENCES users(id),
  stripe_customer_id  VARCHAR(100),
  stripe_subscription_id VARCHAR(100),
  plan                VARCHAR(50), -- 'basic', 'premium', 'family'
  status              VARCHAR(20), -- 'active', 'canceled', 'past_due'
  current_period_end  TIMESTAMP,
  created_at          TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  canceled_at         TIMESTAMP
);

subscription_features

CREATE TABLE subscription_features (
  subscription_id INT REFERENCES subscriptions(id),
  app             VARCHAR(50), -- 'mitai', 'miken', 'ikigai', 'shinkan'
  tier            VARCHAR(50), -- 'basic', 'premium'
  PRIMARY KEY (subscription_id, app)
);

app_access_tokens

-- Mapping: Zentrale User → App-spezifische Profile
CREATE TABLE app_access_tokens (
  user_id       UUID REFERENCES users(id),
  app           VARCHAR(50),
  app_profile_id VARCHAR(100), -- ID in der jeweiligen App-DB
  PRIMARY KEY (user_id, app)
);

Migration: Bestehende Apps

Schritt 1: Zentrale Auth aufbauen

  1. auth.jinkendo.de API deployen
  2. User aus mitai DB migrieren zu zentraler DB
  3. Mapping erstellen: zentrale User ID → mitai Profile ID

Schritt 2: Apps auf zentrale Auth umstellen

  1. Login/Register in Apps deaktivieren
  2. "Mit Jinkendo anmelden" Button → SSO-Flow
  3. JWT von auth.jinkendo.de verwenden
  4. Profile-ID Mapping bei jedem Request

Schritt 3: Subscription-System

  1. subscriptions.jinkendo.de API deployen
  2. Stripe-Integration
  3. Apps prüfen Abo-Status bei jedem Feature-Zugriff

Schritt 4: Zentrale Webseite

  1. jinkendo.de Landing Page
  2. Account-Dashboard
  3. Abo-Verwaltung

Status (März 2026)

🔲 Noch nicht gestartet

Aktuell:

  • Jede App hat eigene User-Verwaltung
  • mitai hat Membership-System (v9c)
  • TrialBanner Link → mailto:mitai@jinkendo.de

Nächste Schritte:

  1. Weitere Apps entwickeln (miken, ikigai, shinkan)
  2. Zentrale Infrastruktur planen
  3. Migration vorbereiten

Offene Fragen

  • Pricing: Welche Preise pro App / kombiniert?
  • Stripe vs. Paddle: Welcher Payment Provider?
  • Single DB vs. Separate: Eine PostgreSQL-DB für alles oder separate?
  • Hosting: Eigener Server oder Cloud (Vercel, Railway, Fly.io)?
  • Domain-Strategie: Subdomains (api.jinkendo.de) oder Paths (jinkendo.de/api)?

  • MEMBERSHIP_SYSTEM.md - Aktuelles System in mitai (v9c)
  • FEATURE_ENFORCEMENT.md - Feature-Limiting Mechanismus
  • Backlog: v9h (Connectoren & Stripe)