# 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:
```javascript
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:**
```jsx
<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
```sql
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
```sql
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
```sql
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
```sql
-- 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)?

---

## Related

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