- .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
206 lines
5.1 KiB
Markdown
206 lines
5.1 KiB
Markdown
# 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)
|