mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 20:41:09 +02:00
feat(pricing): migrate to Mana Quelle S-XXL subscription tiers with new Stripe products
Replace old 3-tier model (Plus/Pro/Ultra) with 5 size-based tiers (S/M/L/XL/XXL). New naming: "Mana Quelle" for subscriptions, "Mana Trank" for one-time purchases. Create new Stripe products and prices, archive old ones, update all UI and seed data. Subscription tiers: S (500 Mana, 4.99€), M (1000, 9.99€), L (2000, 19.99€), XL (4000, 39.99€), XXL (10000, 99.99€). Yearly: 20% discount. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
17df7b32f5
commit
2624e5a6b7
14 changed files with 831 additions and 437 deletions
|
|
@ -69,25 +69,35 @@ RATE_LIMIT_MAX=100
|
||||||
|
|
||||||
# Stripe Configuration
|
# Stripe Configuration
|
||||||
# Get your keys from https://dashboard.stripe.com/apikeys
|
# Get your keys from https://dashboard.stripe.com/apikeys
|
||||||
STRIPE_SECRET_KEY=sk_test_YOUR_KEY
|
STRIPE_SECRET_KEY=sk_live_YOUR_STRIPE_SECRET_KEY
|
||||||
STRIPE_PUBLISHABLE_KEY=pk_test_YOUR_KEY
|
STRIPE_PUBLISHABLE_KEY=pk_test_YOUR_KEY
|
||||||
STRIPE_WEBHOOK_SECRET=whsec_103705b73101b783a91305a9ec272834df6a096ffb2c2566b1c899318a156b03
|
STRIPE_WEBHOOK_SECRET=whsec_YOUR_WEBHOOK_SECRET
|
||||||
|
|
||||||
# Stripe Product & Price IDs (ManaCore Unified Plans - Live)
|
# Stripe Product & Price IDs - Mana Quellen (Subscriptions, Live)
|
||||||
# Plus: 1.00€/month, 9.60€/year - 100 credits (1 Mana = 1 Cent)
|
# S: 4.99€/month, 47.90€/year - 500 Mana
|
||||||
STRIPE_PLUS_PRODUCT_ID=prod_TzNUGcq9qx9rRT
|
STRIPE_S_PRODUCT_ID=prod_UDzZl1uKIHplam
|
||||||
STRIPE_PLUS_PRICE_MONTHLY=price_1TEt04AZjQCYS0ZJUuUWt3yg
|
STRIPE_S_PRICE_MONTHLY=price_1TFXaKAZjQCYS0ZJGQFSxm8v
|
||||||
STRIPE_PLUS_PRICE_YEARLY=price_1TEt05AZjQCYS0ZJYPqiqQMm
|
STRIPE_S_PRICE_YEARLY=price_1TFXaLAZjQCYS0ZJwFnGP29S
|
||||||
|
|
||||||
# Pro: 5.00€/month, 48.00€/year - 500 credits (1 Mana = 1 Cent)
|
# M: 9.99€/month, 95.90€/year - 1000 Mana
|
||||||
STRIPE_PRO_PRODUCT_ID=prod_TzNUgWeBjT35qn
|
STRIPE_M_PRODUCT_ID=prod_UDzZXZxEVoyQMF
|
||||||
STRIPE_PRO_PRICE_MONTHLY=price_1TEt05AZjQCYS0ZJjmjsUdkJ
|
STRIPE_M_PRICE_MONTHLY=price_1TFXaMAZjQCYS0ZJMRmTgQvb
|
||||||
STRIPE_PRO_PRICE_YEARLY=price_1TEt05AZjQCYS0ZJtaT4UGsA
|
STRIPE_M_PRICE_YEARLY=price_1TFXaNAZjQCYS0ZJ6AS1vRkx
|
||||||
|
|
||||||
# Ultra: 20.00€/month, 192.00€/year - 2000 credits (1 Mana = 1 Cent)
|
# L: 19.99€/month, 191.90€/year - 2000 Mana
|
||||||
STRIPE_ULTRA_PRODUCT_ID=prod_TzNUE5pTbTDdbp
|
STRIPE_L_PRODUCT_ID=prod_UDzZcDxsDS3q1T
|
||||||
STRIPE_ULTRA_PRICE_MONTHLY=price_1TEt06AZjQCYS0ZJdyTDjfUk
|
STRIPE_L_PRICE_MONTHLY=price_1TFXaNAZjQCYS0ZJaqXjJ0HC
|
||||||
STRIPE_ULTRA_PRICE_YEARLY=price_1TEt06AZjQCYS0ZJ6Wq3gNpM
|
STRIPE_L_PRICE_YEARLY=price_1TFXaOAZjQCYS0ZJVndo98Pf
|
||||||
|
|
||||||
|
# XL: 39.99€/month, 383.90€/year - 4000 Mana
|
||||||
|
STRIPE_XL_PRODUCT_ID=prod_UDzZum6MMQkc0b
|
||||||
|
STRIPE_XL_PRICE_MONTHLY=price_1TFXaPAZjQCYS0ZJ0q7OysMg
|
||||||
|
STRIPE_XL_PRICE_YEARLY=price_1TFXaQAZjQCYS0ZJ6rDqh2FU
|
||||||
|
|
||||||
|
# XXL: 99.99€/month, 959.90€/year - 10000 Mana
|
||||||
|
STRIPE_XXL_PRODUCT_ID=prod_UDzZreFcbGxdJj
|
||||||
|
STRIPE_XXL_PRICE_MONTHLY=price_1TFXaQAZjQCYS0ZJ3A6QB2sv
|
||||||
|
STRIPE_XXL_PRICE_YEARLY=price_1TFXaRAZjQCYS0ZJCuYSesCA
|
||||||
|
|
||||||
# Mana Tränke (One-time purchases, 1 Mana = 1.4 Cent)
|
# Mana Tränke (One-time purchases, 1 Mana = 1.4 Cent)
|
||||||
STRIPE_POTION_SMALL_PRODUCT_ID=prod_UDKn8rXX0Crz0T
|
STRIPE_POTION_SMALL_PRODUCT_ID=prod_UDKn8rXX0Crz0T
|
||||||
|
|
|
||||||
|
|
@ -142,10 +142,10 @@ const { class: className } = Astro.props;
|
||||||
const classicPricePerUser = 19.99;
|
const classicPricePerUser = 19.99;
|
||||||
|
|
||||||
const manacorePlans = {
|
const manacorePlans = {
|
||||||
light: { name: 'Mana Fluss', price: 5.99, users: 3 },
|
light: { name: 'Mana Quelle S', price: 4.99, users: 3 },
|
||||||
medium: { name: 'Mana Strom', price: 14.99, users: 5 },
|
medium: { name: 'Mana Quelle M', price: 9.99, users: 5 },
|
||||||
heavy: { name: 'Mana See', price: 29.99, users: 10 },
|
heavy: { name: 'Mana Quelle L', price: 19.99, users: 10 },
|
||||||
power: { name: 'Mana Meer', price: 49.99, users: 15 },
|
power: { name: 'Mana Quelle XL', price: 39.99, users: 15 },
|
||||||
};
|
};
|
||||||
|
|
||||||
function calculateCosts() {
|
function calculateCosts() {
|
||||||
|
|
|
||||||
|
|
@ -67,11 +67,12 @@ Der Mana-Verbrauch bei Memoro ist transparent und fix: **1 Mana = 1 Cent**
|
||||||
|
|
||||||
**Monatlich (Abo):**
|
**Monatlich (Abo):**
|
||||||
|
|
||||||
- **Mana Tropfen**: 0€ - 150 Mana/Monat (kostenlos)
|
- **Mana Quelle Free**: 0€ - 50 Mana/Monat (kostenlos)
|
||||||
- **Kleiner Stream**: 5,99€ - 600 Mana/Monat
|
- **Mana Quelle S**: 4,99€ - 500 Mana/Monat
|
||||||
- **Mittlerer Stream**: 14,99€ - 1.500 Mana/Monat
|
- **Mana Quelle M**: 9,99€ - 1.000 Mana/Monat
|
||||||
- **Großer Stream**: 29,99€ - 3.000 Mana/Monat
|
- **Mana Quelle L**: 19,99€ - 2.000 Mana/Monat
|
||||||
- **Riesiger Stream**: 49,99€ - 5.000 Mana/Monat
|
- **Mana Quelle XL**: 39,99€ - 4.000 Mana/Monat
|
||||||
|
- **Mana Quelle XXL**: 99,99€ - 10.000 Mana/Monat
|
||||||
|
|
||||||
**Einmalig (Trank):**
|
**Einmalig (Trank):**
|
||||||
|
|
||||||
|
|
@ -82,7 +83,7 @@ Der Mana-Verbrauch bei Memoro ist transparent und fix: **1 Mana = 1 Cent**
|
||||||
|
|
||||||
### Flexibilität von Mana
|
### Flexibilität von Mana
|
||||||
|
|
||||||
Mit Mana zahlst du nur für die tatsächliche Nutzung. Brauchst du einen Monat mehr? Buche ein größeres Paket oder einen einmaligen Trank. Brauchst du weniger? Nutze einfach den kostenlosen Mana Tropfen. Perfekt für schwankenden Bedarf!
|
Mit Mana zahlst du nur für die tatsächliche Nutzung. Brauchst du einen Monat mehr? Buche ein größeres Paket oder einen einmaligen Trank. Brauchst du weniger? Nutze einfach die kostenlose Mana Quelle Free. Perfekt für schwankenden Bedarf!
|
||||||
|
|
||||||
## Anwendungsfälle
|
## Anwendungsfälle
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,27 +51,29 @@ Das Mana-System kombiniert die Vorteile von Abonnements mit der Fairness verbrau
|
||||||
|
|
||||||
### Monatliche Abonnements mit Mana-Regeneration
|
### Monatliche Abonnements mit Mana-Regeneration
|
||||||
|
|
||||||
| Abo-Stufe | Preis/Monat | Start-Mana | Tägliche Regeneration | Speicherlimit | Entspricht ca. |
|
| Abo-Stufe | Preis/Monat | Mana/Monat | Tägliche Regeneration | Entspricht ca. |
|
||||||
| ---------------- | ----------- | ---------- | --------------------- | ------------- | -------------- |
|
| -------------------- | ----------- | ---------- | --------------------- | -------------- |
|
||||||
| **Mana Tropfen** | Kostenlos | 150 | 5 | 150 | 1,25 Stunden |
|
| **Mana Quelle Free** | Kostenlos | 50 | 2 | 25 Minuten |
|
||||||
| **Mana Fluss** | 5,99€ | 600 | 20 | 1.200 | 10 Stunden |
|
| **Mana Quelle S** | 4,99€ | 500 | 17 | 4 Stunden |
|
||||||
| **Mana Strom** | 14,99€ | 1.500 | 50 | 3.000 | 25 Stunden |
|
| **Mana Quelle M** | 9,99€ | 1.000 | 33 | 8 Stunden |
|
||||||
| **Mana See** | 29,99€ | 3.000 | 100 | 6.000 | 50 Stunden |
|
| **Mana Quelle L** | 19,99€ | 2.000 | 67 | 17 Stunden |
|
||||||
| **Mana Meer** | 49,99€ | 5.000 | 200 | 10.000 | 83 Stunden |
|
| **Mana Quelle XL** | 39,99€ | 4.000 | 133 | 33 Stunden |
|
||||||
|
| **Mana Quelle XXL** | 99,99€ | 10.000 | 333 | 83 Stunden |
|
||||||
|
|
||||||
### Jährliche Abonnements (bis zu 33% Ersparnis)
|
### Jährliche Abonnements (20% Ersparnis)
|
||||||
|
|
||||||
- **Mana Fluss**: 47,99€/Jahr (3,99€/Monat)
|
- **Mana Quelle S**: 47,90€/Jahr (3,99€/Monat)
|
||||||
- **Mana Strom**: 119,99€/Jahr (9,99€/Monat)
|
- **Mana Quelle M**: 95,90€/Jahr (7,99€/Monat)
|
||||||
- **Mana See**: 239,99€/Jahr (19,99€/Monat)
|
- **Mana Quelle L**: 191,90€/Jahr (15,99€/Monat)
|
||||||
- **Mana Meer**: 399,99€/Jahr (33,33€/Monat)
|
- **Mana Quelle XL**: 383,90€/Jahr (31,99€/Monat)
|
||||||
|
- **Mana Quelle XXL**: 959,90€/Jahr (79,99€/Monat)
|
||||||
|
|
||||||
### Einmalkäufe (Mana-Tränke)
|
### Einmalkäufe (Mana-Tränke)
|
||||||
|
|
||||||
- **Kleiner Trank**: 4,99€ für 350 Mana
|
- **Kleiner Mana Trank**: 4,90€ für 350 Mana
|
||||||
- **Mittlerer Trank**: 9,99€ für 700 Mana
|
- **Mittlerer Mana Trank**: 9,80€ für 700 Mana
|
||||||
- **Großer Trank**: 19,99€ für 1.400 Mana
|
- **Großer Mana Trank**: 19,60€ für 1.400 Mana
|
||||||
- **Riesiger Trank**: 39,99€ für 2.800 Mana
|
- **Riesiger Mana Trank**: 39,20€ für 2.800 Mana
|
||||||
|
|
||||||
## Vorteile gegenüber klassischen Lizenzmodellen
|
## Vorteile gegenüber klassischen Lizenzmodellen
|
||||||
|
|
||||||
|
|
@ -79,15 +81,15 @@ Das Mana-System kombiniert die Vorteile von Abonnements mit der Fairness verbrau
|
||||||
|
|
||||||
**Unternehmen mit 50 Mitarbeitern:**
|
**Unternehmen mit 50 Mitarbeitern:**
|
||||||
|
|
||||||
- **Manacore**: 2x Mana Meer = 99,98€/Monat
|
- **Manacore**: 1x Mana Quelle XXL = 99,99€/Monat
|
||||||
- **Klassische Lizenzen**: 50 × 19,99€ = 999,50€/Monat
|
- **Klassische Lizenzen**: 50 × 19,99€ = 999,50€/Monat
|
||||||
- **Ersparnis**: 90%
|
- **Ersparnis**: 90%
|
||||||
|
|
||||||
**Universitäres Forschungsprojekt (15 Forscher, 1 Jahr):**
|
**Universitäres Forschungsprojekt (15 Forscher, 1 Jahr):**
|
||||||
|
|
||||||
- **Manacore**: 1x Mana See Jahresabo = 239,99€
|
- **Manacore**: 1x Mana Quelle L Jahresabo = 191,90€
|
||||||
- **Klassische Lizenzen**: 15 × 9,99€ × 12 Monate = 1.798,20€
|
- **Klassische Lizenzen**: 15 × 9,99€ × 12 Monate = 1.798,20€
|
||||||
- **Ersparnis**: 87%
|
- **Ersparnis**: 89%
|
||||||
|
|
||||||
### Weitere Vorteile
|
### Weitere Vorteile
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -183,33 +183,34 @@ Im Gegensatz dazu bietet das Mana-System:
|
||||||
Das Regenerationssystem ist das Herzstück des Mana-Modells:
|
Das Regenerationssystem ist das Herzstück des Mana-Modells:
|
||||||
|
|
||||||
- **Tägliche Gutschrift**: Jeden Tag um 0:00 Uhr werden neue Mana-Credits automatisch gutgeschrieben
|
- **Tägliche Gutschrift**: Jeden Tag um 0:00 Uhr werden neue Mana-Credits automatisch gutgeschrieben
|
||||||
- **Abo-abhängig**: Die Menge hängt von der gewählten Abo-Stufe ab (5 bis 200 Mana täglich)
|
- **Abo-abhängig**: Die Menge hängt von der gewählten Abo-Stufe ab (2 bis 333 Mana täglich)
|
||||||
- **Automatisch**: Keine manuelle Aktivierung erforderlich
|
- **Automatisch**: Keine manuelle Aktivierung erforderlich
|
||||||
- **Zuverlässig**: Regeneration erfolgt auch bei Nicht-Nutzung
|
- **Zuverlässig**: Regeneration erfolgt auch bei Nicht-Nutzung
|
||||||
|
|
||||||
**Beispiel**: Mit einem Mana See Abo erhalten Sie täglich 100 neue Mana. Das entspricht etwa 50 Minuten Transkription pro Tag - oder Sie sparen für größere Projekte.
|
**Beispiel**: Mit einer Mana Quelle L erhalten Sie täglich 67 neue Mana. Das entspricht etwa 33 Minuten Transkription pro Tag - oder Sie sparen für größere Projekte.
|
||||||
|
|
||||||
### Der Mana-Speicher erklärt
|
### Der Mana-Speicher erklärt
|
||||||
|
|
||||||
Jede Abo-Stufe hat ein Speicherlimit, das verhindert, dass Credits ins Unendliche anwachsen:
|
Jede Abo-Stufe hat ein Speicherlimit, das verhindert, dass Credits ins Unendliche anwachsen:
|
||||||
|
|
||||||
- **Mana Tropfen**: 150 Mana Speicher (ca. 1,25 Stunden)
|
- **Mana Quelle Free**: 50 Mana Speicher (ca. 25 Minuten)
|
||||||
- **Mana Fluss**: 1.200 Mana Speicher (ca. 10 Stunden)
|
- **Mana Quelle S**: 500 Mana Speicher (ca. 4 Stunden)
|
||||||
- **Mana Strom**: 3.000 Mana Speicher (ca. 25 Stunden)
|
- **Mana Quelle M**: 1.000 Mana Speicher (ca. 8 Stunden)
|
||||||
- **Mana See**: 6.000 Mana Speicher (ca. 50 Stunden)
|
- **Mana Quelle L**: 2.000 Mana Speicher (ca. 17 Stunden)
|
||||||
- **Mana Meer**: 10.000 Mana Speicher (ca. 83 Stunden)
|
- **Mana Quelle XL**: 4.000 Mana Speicher (ca. 33 Stunden)
|
||||||
|
- **Mana Quelle XXL**: 10.000 Mana Speicher (ca. 83 Stunden)
|
||||||
|
|
||||||
**Wichtig**: Erreicht Ihr Speicher das Limit, verfallen neue Regenerations-Credits. Nutzen Sie daher regelmäßig Ihre Mana, verschenken es, spenden es oder wählen Sie eine höhere Abo-Stufe.
|
**Wichtig**: Erreicht Ihr Speicher das Limit, verfallen neue Regenerations-Credits. Nutzen Sie daher regelmäßig Ihre Mana, verschenken es, spenden es oder wählen Sie eine höhere Abo-Stufe.
|
||||||
|
|
||||||
### Praktisches Beispiel
|
### Praktisches Beispiel
|
||||||
|
|
||||||
Ein Forscher mit **Mana Strom** Abo:
|
Ein Forscher mit **Mana Quelle L** Abo:
|
||||||
|
|
||||||
- Tag 1: 1.500 Start-Mana
|
- Tag 1: 2.000 Start-Mana
|
||||||
- Tag 2-10: +50 Mana täglich = 1.950 Mana
|
- Tag 2-10: +67 Mana täglich = 2.603 Mana (max. 2.000 Speicher)
|
||||||
- Führt 5 Interviews à 2 Stunden = -1.200 Mana
|
- Führt 5 Interviews à 2 Stunden = -1.200 Mana
|
||||||
- Verbleibend: 750 Mana
|
- Verbleibend: 800 Mana
|
||||||
- Nach 30 Tagen ohne Nutzung: Speicher voll bei 3.000 Mana
|
- Nach 30 Tagen ohne Nutzung: Speicher voll bei 2.000 Mana
|
||||||
|
|
||||||
### Kombination mit Mana-Tränken
|
### Kombination mit Mana-Tränken
|
||||||
|
|
||||||
|
|
@ -277,34 +278,37 @@ Besonders geeignet für:
|
||||||
|
|
||||||
Memoro bietet verschiedene Abo-Modelle mit täglicher Mana-Regeneration:
|
Memoro bietet verschiedene Abo-Modelle mit täglicher Mana-Regeneration:
|
||||||
|
|
||||||
- **Mana Tropfen**: Kostenlos
|
- **Mana Quelle Free**: Kostenlos
|
||||||
- 150 Start-Mana, 5 Mana/Tag Regeneration, 150 Mana Speicher
|
- 50 Mana/Monat, 2 Mana/Tag Regeneration
|
||||||
- **Mana Fluss**: 5,99€/Monat
|
- **Mana Quelle S**: 4,99€/Monat
|
||||||
- 600 Start-Mana, 20 Mana/Tag Regeneration, 1.200 Mana Speicher
|
- 500 Mana/Monat, 17 Mana/Tag Regeneration
|
||||||
- **Mana Strom**: 14,99€/Monat
|
- **Mana Quelle M**: 9,99€/Monat
|
||||||
- 1.500 Start-Mana, 50 Mana/Tag Regeneration, 3.000 Mana Speicher
|
- 1.000 Mana/Monat, 33 Mana/Tag Regeneration
|
||||||
- **Mana See**: 29,99€/Monat
|
- **Mana Quelle L**: 19,99€/Monat
|
||||||
- 3.000 Start-Mana, 100 Mana/Tag Regeneration, 6.000 Mana Speicher
|
- 2.000 Mana/Monat, 67 Mana/Tag Regeneration
|
||||||
- **Mana Meer**: 49,99€/Monat
|
- **Mana Quelle XL**: 39,99€/Monat
|
||||||
- 5.000 Start-Mana, 200 Mana/Tag Regeneration, 10.000 Mana Speicher
|
- 4.000 Mana/Monat, 133 Mana/Tag Regeneration
|
||||||
|
- **Mana Quelle XXL**: 99,99€/Monat
|
||||||
|
- 10.000 Mana/Monat, 333 Mana/Tag Regeneration
|
||||||
|
|
||||||
### Jährliche Abonnements (mit Ersparnis)
|
### Jährliche Abonnements (20% Ersparnis)
|
||||||
|
|
||||||
Bei jährlicher Zahlung sparen Nutzer bis zu 33%:
|
Bei jährlicher Zahlung sparen Nutzer 20%:
|
||||||
|
|
||||||
- **Mana Fluss**: 47,99€/Jahr (3,99€/Monat)
|
- **Mana Quelle S**: 47,90€/Jahr (3,99€/Monat)
|
||||||
- **Mana Strom**: 119,99€/Jahr (9,99€/Monat)
|
- **Mana Quelle M**: 95,90€/Jahr (7,99€/Monat)
|
||||||
- **Mana See**: 239,99€/Jahr (19,99€/Monat)
|
- **Mana Quelle L**: 191,90€/Jahr (15,99€/Monat)
|
||||||
- **Mana Meer**: 399,99€/Jahr (33,33€/Monat)
|
- **Mana Quelle XL**: 383,90€/Jahr (31,99€/Monat)
|
||||||
|
- **Mana Quelle XXL**: 959,90€/Jahr (79,99€/Monat)
|
||||||
|
|
||||||
### Einmalkäufe (Mana-Tränke)
|
### Einmalkäufe (Mana-Tränke)
|
||||||
|
|
||||||
Für zusätzlichen Bedarf ohne Abo:
|
Für zusätzlichen Bedarf ohne Abo:
|
||||||
|
|
||||||
- **Kleiner Mana Trank**: 4,99€ für 350 Mana (1,43 Cent/Mana)
|
- **Kleiner Mana Trank**: 4,90€ für 350 Mana (1,4 Cent/Mana)
|
||||||
- **Mittlerer Mana Trank**: 9,99€ für 700 Mana (1,43 Cent/Mana)
|
- **Mittlerer Mana Trank**: 9,80€ für 700 Mana (1,4 Cent/Mana)
|
||||||
- **Großer Mana Trank**: 19,99€ für 1.400 Mana (1,43 Cent/Mana)
|
- **Großer Mana Trank**: 19,60€ für 1.400 Mana (1,4 Cent/Mana)
|
||||||
- **Riesiger Mana Trank**: 39,99€ für 2.800 Mana (1,43 Cent/Mana)
|
- **Riesiger Mana Trank**: 39,20€ für 2.800 Mana (1,4 Cent/Mana)
|
||||||
|
|
||||||
## Technische Integration
|
## Technische Integration
|
||||||
|
|
||||||
|
|
@ -337,8 +341,8 @@ Spätere Features:
|
||||||
|
|
||||||
**Mana-Modell (50 Mitarbeiter)**:
|
**Mana-Modell (50 Mitarbeiter)**:
|
||||||
|
|
||||||
1. 2x Mana Meer Abonnements (99,98€/Monat)
|
1. 1x Mana Quelle XXL (99,99€/Monat)
|
||||||
2. 10.000 Start-Mana + 400 Mana tägliche Regeneration
|
2. 10.000 Mana/Monat + 333 Mana tägliche Regeneration
|
||||||
3. Credits werden auf alle 50 Mitarbeiter verteilt
|
3. Credits werden auf alle 50 Mitarbeiter verteilt
|
||||||
4. Bei intensiven Phasen: Zusätzliche Mana-Tränke
|
4. Bei intensiven Phasen: Zusätzliche Mana-Tränke
|
||||||
|
|
||||||
|
|
@ -352,14 +356,14 @@ Spätere Features:
|
||||||
|
|
||||||
**Mana-Modell (15 Forscher, 1 Jahr)**:
|
**Mana-Modell (15 Forscher, 1 Jahr)**:
|
||||||
|
|
||||||
1. 1x Mana See Jahresabo (239,99€)
|
1. 1x Mana Quelle L Jahresabo (191,90€)
|
||||||
2. 3.000 Start-Mana + 100 Mana täglich
|
2. 2.000 Mana/Monat + 67 Mana täglich
|
||||||
3. Alle 15 Forscher teilen sich die Credits
|
3. Alle 15 Forscher teilen sich die Credits
|
||||||
4. Perfekt für unregelmäßige Interview-Phasen
|
4. Perfekt für unregelmäßige Interview-Phasen
|
||||||
|
|
||||||
**Klassisches Lizenzmodell zum Vergleich**:
|
**Klassisches Lizenzmodell zum Vergleich**:
|
||||||
|
|
||||||
- 15 Lizenzen à 9,99€/Monat = 1’798,20€ für 1 Jahr
|
- 15 Lizenzen à 9,99€/Monat = 1.798,20€ für 1 Jahr
|
||||||
- Viele Lizenzen bleiben ungenutzt (nicht alle forschen gleichzeitig)
|
- Viele Lizenzen bleiben ungenutzt (nicht alle forschen gleichzeitig)
|
||||||
- Keine Übertragbarkeit zwischen Teammitgliedern
|
- Keine Übertragbarkeit zwischen Teammitgliedern
|
||||||
|
|
||||||
|
|
@ -367,8 +371,8 @@ Spätere Features:
|
||||||
|
|
||||||
**Mana-Modell (20 Berater)**:
|
**Mana-Modell (20 Berater)**:
|
||||||
|
|
||||||
1. 1x Mana Meer + 1x Mana See (79,98€/Monat)
|
1. 1x Mana Quelle XL + 1x Mana Quelle M (49,98€/Monat)
|
||||||
2. 8.000 Start-Mana + 300 Mana täglich
|
2. 5.000 Mana/Monat + 166 Mana täglich
|
||||||
3. Flexibel auf alle Berater verteilbar
|
3. Flexibel auf alle Berater verteilbar
|
||||||
4. Anpassbar an Projektphasen
|
4. Anpassbar an Projektphasen
|
||||||
|
|
||||||
|
|
@ -380,9 +384,9 @@ Spätere Features:
|
||||||
|
|
||||||
## Zusammenfassung
|
## Zusammenfassung
|
||||||
|
|
||||||
Das Mana-Creditsystem in Memoro bietet erhebliche Vorteile gegenüber klassischen Lizenzmodellen:
|
Das Mana-Creditsystem bietet erhebliche Vorteile gegenüber klassischen Lizenzmodellen:
|
||||||
|
|
||||||
**Kostenersparnis**: Die Beispiele zeigen Einsparungen von 70-90% gegenüber traditionellen Seat-Lizenzen. Ein Unternehmen mit 50 Mitarbeitern zahlt nur 99,98€ statt 999,50€ monatlich.
|
**Kostenersparnis**: Die Beispiele zeigen Einsparungen von 70-90% gegenüber traditionellen Seat-Lizenzen. Ein Unternehmen mit 50 Mitarbeitern zahlt nur 99,99€ statt 999,50€ monatlich.
|
||||||
|
|
||||||
**Flexibilität**: Credits können beliebig zwischen Nutzern verteilt werden - ideal für Teams mit wechselnder Zusammensetzung oder unterschiedlichen Nutzungsintensitäten.
|
**Flexibilität**: Credits können beliebig zwischen Nutzern verteilt werden - ideal für Teams mit wechselnder Zusammensetzung oder unterschiedlichen Nutzungsintensitäten.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,159 +1,195 @@
|
||||||
export const pricingPlans = {
|
export const pricingPlans = {
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
id: 'tropfen',
|
id: 'free',
|
||||||
name: 'Mana Tropfen',
|
name: 'Mana Quelle Free',
|
||||||
price: 0,
|
price: 0,
|
||||||
priceText: 'Kostenlos',
|
priceText: 'Kostenlos',
|
||||||
startMana: 150,
|
startMana: 50,
|
||||||
regeneration: 5,
|
regeneration: 2,
|
||||||
storage: 150,
|
storage: 50,
|
||||||
icon: '💧',
|
icon: '💧',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['150 Start-Mana', '5 Mana täglich', '150 Mana Speicher', 'Basis KI-Tools'],
|
features: ['50 Mana pro Monat', '2 Mana täglich', 'Zugang zu allen Apps', 'Basis KI-Tools'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'kleiner-stream',
|
id: 'quelle-s',
|
||||||
name: 'Kleiner Stream',
|
name: 'Mana Quelle S',
|
||||||
price: 5.99,
|
price: 4.99,
|
||||||
priceText: '5,99€',
|
priceText: '4,99€',
|
||||||
startMana: 600,
|
startMana: 500,
|
||||||
regeneration: 20,
|
regeneration: 17,
|
||||||
storage: 600,
|
storage: 500,
|
||||||
icon: '🌊',
|
icon: '🌊',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['600 Start-Mana', '20 Mana täglich', '600 Mana Speicher', 'Alle Apps verfügbar'],
|
features: ['500 Mana pro Monat', '17 Mana täglich', 'Alle Apps verfügbar', 'E-Mail Support'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'mittlerer-stream',
|
id: 'quelle-m',
|
||||||
name: 'Mittlerer Stream',
|
name: 'Mana Quelle M',
|
||||||
price: 14.99,
|
price: 9.99,
|
||||||
priceText: '14,99€',
|
priceText: '9,99€',
|
||||||
startMana: 1500,
|
startMana: 1000,
|
||||||
regeneration: 50,
|
regeneration: 33,
|
||||||
storage: 1500,
|
storage: 1000,
|
||||||
icon: '💫',
|
icon: '💫',
|
||||||
popular: true,
|
popular: true,
|
||||||
features: ['1.500 Start-Mana', '50 Mana täglich', '1.500 Mana Speicher', 'Priority Support'],
|
features: ['1.000 Mana pro Monat', '33 Mana täglich', 'Alle AI-Modelle', 'Priority Support'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'grosser-stream',
|
id: 'quelle-l',
|
||||||
name: 'Großer Stream',
|
name: 'Mana Quelle L',
|
||||||
price: 29.99,
|
price: 19.99,
|
||||||
priceText: '29,99€',
|
priceText: '19,99€',
|
||||||
startMana: 3000,
|
startMana: 2000,
|
||||||
regeneration: 100,
|
regeneration: 67,
|
||||||
storage: 3000,
|
storage: 2000,
|
||||||
icon: '⭐',
|
icon: '⭐',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['3.000 Start-Mana', '100 Mana täglich', '3.000 Mana Speicher', 'Premium Support'],
|
features: ['2.000 Mana pro Monat', '67 Mana täglich', 'Premium AI-Modelle', 'API-Zugang'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'riesiger-stream',
|
id: 'quelle-xl',
|
||||||
name: 'Riesiger Stream',
|
name: 'Mana Quelle XL',
|
||||||
price: 49.99,
|
price: 39.99,
|
||||||
priceText: '49,99€',
|
priceText: '39,99€',
|
||||||
startMana: 5000,
|
startMana: 4000,
|
||||||
regeneration: 167,
|
regeneration: 133,
|
||||||
storage: 5000,
|
storage: 4000,
|
||||||
icon: '🌟',
|
icon: '🌟',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'5.000 Start-Mana',
|
'4.000 Mana pro Monat',
|
||||||
'167 Mana täglich',
|
'133 Mana täglich',
|
||||||
'5.000 Mana Speicher',
|
'Team-Features',
|
||||||
|
'Dedizierter Support',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'quelle-xxl',
|
||||||
|
name: 'Mana Quelle XXL',
|
||||||
|
price: 99.99,
|
||||||
|
priceText: '99,99€',
|
||||||
|
startMana: 10000,
|
||||||
|
regeneration: 333,
|
||||||
|
storage: 10000,
|
||||||
|
icon: '✨',
|
||||||
|
popular: false,
|
||||||
|
features: [
|
||||||
|
'10.000 Mana pro Monat',
|
||||||
|
'333 Mana täglich',
|
||||||
'Enterprise Features',
|
'Enterprise Features',
|
||||||
|
'Custom Integrationen',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
yearly: [
|
yearly: [
|
||||||
{
|
{
|
||||||
id: 'tropfen',
|
id: 'free',
|
||||||
name: 'Mana Tropfen',
|
name: 'Mana Quelle Free',
|
||||||
price: 0,
|
price: 0,
|
||||||
priceText: 'Kostenlos',
|
priceText: 'Kostenlos',
|
||||||
monthlyEquivalent: 0,
|
monthlyEquivalent: 0,
|
||||||
startMana: 150,
|
startMana: 50,
|
||||||
regeneration: 5,
|
regeneration: 2,
|
||||||
storage: 150,
|
storage: 50,
|
||||||
icon: '💧',
|
icon: '💧',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['150 Start-Mana', '5 Mana täglich', '150 Mana Speicher', 'Basis KI-Tools'],
|
features: ['50 Mana pro Monat', '2 Mana täglich', 'Zugang zu allen Apps', 'Basis KI-Tools'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'kleiner-stream',
|
id: 'quelle-s',
|
||||||
name: 'Kleiner Stream',
|
name: 'Mana Quelle S',
|
||||||
price: 59.9,
|
price: 47.9,
|
||||||
priceText: '59,90€',
|
priceText: '47,90€',
|
||||||
monthlyEquivalent: 4.99,
|
monthlyEquivalent: 3.99,
|
||||||
startMana: 600,
|
startMana: 500,
|
||||||
regeneration: 20,
|
regeneration: 17,
|
||||||
storage: 600,
|
storage: 500,
|
||||||
icon: '🌊',
|
icon: '🌊',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'600 Start-Mana',
|
'500 Mana pro Monat',
|
||||||
'20 Mana täglich',
|
'17 Mana täglich',
|
||||||
'600 Mana Speicher',
|
|
||||||
'Alle Apps verfügbar',
|
'Alle Apps verfügbar',
|
||||||
'✨ 2 Monate gespart',
|
'E-Mail Support',
|
||||||
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'mittlerer-stream',
|
id: 'quelle-m',
|
||||||
name: 'Mittlerer Stream',
|
name: 'Mana Quelle M',
|
||||||
price: 149.9,
|
price: 95.9,
|
||||||
priceText: '149,90€',
|
priceText: '95,90€',
|
||||||
monthlyEquivalent: 12.49,
|
monthlyEquivalent: 7.99,
|
||||||
startMana: 1500,
|
startMana: 1000,
|
||||||
regeneration: 50,
|
regeneration: 33,
|
||||||
storage: 1500,
|
storage: 1000,
|
||||||
icon: '💫',
|
icon: '💫',
|
||||||
popular: true,
|
popular: true,
|
||||||
features: [
|
features: [
|
||||||
'1.500 Start-Mana',
|
'1.000 Mana pro Monat',
|
||||||
'50 Mana täglich',
|
'33 Mana täglich',
|
||||||
'1.500 Mana Speicher',
|
'Alle AI-Modelle',
|
||||||
'Priority Support',
|
'Priority Support',
|
||||||
'✨ 2 Monate gespart',
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'grosser-stream',
|
id: 'quelle-l',
|
||||||
name: 'Großer Stream',
|
name: 'Mana Quelle L',
|
||||||
price: 299.9,
|
price: 191.9,
|
||||||
priceText: '299,90€',
|
priceText: '191,90€',
|
||||||
monthlyEquivalent: 24.99,
|
monthlyEquivalent: 15.99,
|
||||||
startMana: 3000,
|
startMana: 2000,
|
||||||
regeneration: 100,
|
regeneration: 67,
|
||||||
storage: 3000,
|
storage: 2000,
|
||||||
icon: '⭐',
|
icon: '⭐',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'3.000 Start-Mana',
|
'2.000 Mana pro Monat',
|
||||||
'100 Mana täglich',
|
'67 Mana täglich',
|
||||||
'3.000 Mana Speicher',
|
'Premium AI-Modelle',
|
||||||
'Premium Support',
|
'API-Zugang',
|
||||||
'✨ 2 Monate gespart',
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'riesiger-stream',
|
id: 'quelle-xl',
|
||||||
name: 'Riesiger Stream',
|
name: 'Mana Quelle XL',
|
||||||
price: 499.9,
|
price: 383.9,
|
||||||
priceText: '499,90€',
|
priceText: '383,90€',
|
||||||
monthlyEquivalent: 41.66,
|
monthlyEquivalent: 31.99,
|
||||||
startMana: 5000,
|
startMana: 4000,
|
||||||
regeneration: 167,
|
regeneration: 133,
|
||||||
storage: 5000,
|
storage: 4000,
|
||||||
icon: '🌟',
|
icon: '🌟',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'5.000 Start-Mana',
|
'4.000 Mana pro Monat',
|
||||||
'167 Mana täglich',
|
'133 Mana täglich',
|
||||||
'5.000 Mana Speicher',
|
'Team-Features',
|
||||||
|
'Dedizierter Support',
|
||||||
|
'20% gespart',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'quelle-xxl',
|
||||||
|
name: 'Mana Quelle XXL',
|
||||||
|
price: 959.9,
|
||||||
|
priceText: '959,90€',
|
||||||
|
monthlyEquivalent: 79.99,
|
||||||
|
startMana: 10000,
|
||||||
|
regeneration: 333,
|
||||||
|
storage: 10000,
|
||||||
|
icon: '✨',
|
||||||
|
popular: false,
|
||||||
|
features: [
|
||||||
|
'10.000 Mana pro Monat',
|
||||||
|
'333 Mana täglich',
|
||||||
'Enterprise Features',
|
'Enterprise Features',
|
||||||
'✨ 2 Monate gespart',
|
'Custom Integrationen',
|
||||||
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
@ -161,38 +197,38 @@ export const pricingPlans = {
|
||||||
{
|
{
|
||||||
id: 'small',
|
id: 'small',
|
||||||
name: 'Kleiner Mana Trank',
|
name: 'Kleiner Mana Trank',
|
||||||
price: 4.99,
|
price: 4.9,
|
||||||
priceText: '4,99€',
|
priceText: '4,90€',
|
||||||
mana: 350,
|
mana: 350,
|
||||||
icon: '🧪',
|
icon: '🧪',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'medium',
|
id: 'medium',
|
||||||
name: 'Mittlerer Mana Trank',
|
name: 'Mittlerer Mana Trank',
|
||||||
price: 9.99,
|
price: 9.8,
|
||||||
priceText: '9,99€',
|
priceText: '9,80€',
|
||||||
mana: 700,
|
mana: 700,
|
||||||
icon: '⚗️',
|
icon: '⚗️',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'large',
|
id: 'large',
|
||||||
name: 'Großer Mana Trank',
|
name: 'Großer Mana Trank',
|
||||||
price: 19.99,
|
price: 19.6,
|
||||||
priceText: '19,99€',
|
priceText: '19,60€',
|
||||||
mana: 1400,
|
mana: 1400,
|
||||||
icon: '🏺',
|
icon: '🏺',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'huge',
|
id: 'huge',
|
||||||
name: 'Riesiger Mana Trank',
|
name: 'Riesiger Mana Trank',
|
||||||
price: 39.99,
|
price: 39.2,
|
||||||
priceText: '39,99€',
|
priceText: '39,20€',
|
||||||
mana: 2800,
|
mana: 2800,
|
||||||
icon: '🏛️',
|
icon: '🏛️',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -236,9 +236,9 @@ const trustBadges = [
|
||||||
</div>
|
</div>
|
||||||
<div class="comparison-arrow">→</div>
|
<div class="comparison-arrow">→</div>
|
||||||
<div class="comparison-card mana">
|
<div class="comparison-card mana">
|
||||||
<div class="comparison-label">Mana Stream</div>
|
<div class="comparison-label">Mana Quelle M</div>
|
||||||
<div class="comparison-price">14,99€<span>/Monat</span></div>
|
<div class="comparison-price">9,99€<span>/Monat</span></div>
|
||||||
<div class="comparison-note">750 Min (1.500 Mana)</div>
|
<div class="comparison-note">500 Min (1.000 Mana)</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="comparison-note-text">
|
<div class="comparison-note-text">
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,8 @@ export function getManaFAQs(locale: string): FAQItem[] {
|
||||||
id: 'faq-mana-get',
|
id: 'faq-mana-get',
|
||||||
question: isDE ? 'Wie bekomme ich Mana?' : 'How do I get Mana?',
|
question: isDE ? 'Wie bekomme ich Mana?' : 'How do I get Mana?',
|
||||||
answer: isDE
|
answer: isDE
|
||||||
? '<p>Es gibt drei Wege, Mana zu erhalten:</p><ul><li><strong>Free-Tier</strong>: Jeder Nutzer erhält <strong>150 Mana/Monat</strong> kostenlos</li><li><strong>Mana Stream</strong> (Abo): Monatliche Mana-Pakete von 600 bis 5.000 Mana (ab 6€/Monat, 20% Jahresrabatt)</li><li><strong>Mana Trank</strong> (Einmalkauf): Sofort-Pakete von 350 bis 2.800 Mana (ab 4,90€)</li></ul><p>Abonnenten können außerdem Mana an andere Nutzer <strong>verschenken</strong>.</p>'
|
? '<p>Es gibt drei Wege, Mana zu erhalten:</p><ul><li><strong>Free-Tier</strong>: Jeder Nutzer erhält <strong>50 Mana/Monat</strong> kostenlos</li><li><strong>Mana Quelle</strong> (Abo): Monatliche Mana-Pakete von 500 bis 10.000 Mana (ab 4,99€/Monat, 20% Jahresrabatt)</li><li><strong>Mana Trank</strong> (Einmalkauf): Sofort-Pakete von 350 bis 2.800 Mana (ab 4,90€)</li></ul><p>Abonnenten können außerdem Mana an andere Nutzer <strong>verschenken</strong>.</p>'
|
||||||
: '<p>There are three ways to get Mana:</p><ul><li><strong>Free tier</strong>: Every user receives <strong>150 Mana/month</strong> for free</li><li><strong>Mana Stream</strong> (subscription): Monthly Mana packages from 600 to 5,000 Mana (from €6/month, 20% yearly discount)</li><li><strong>Mana Potion</strong> (one-time purchase): Instant packages from 350 to 2,800 Mana (from €4.90)</li></ul><p>Subscribers can also <strong>gift</strong> Mana to other users.</p>',
|
: '<p>There are three ways to get Mana:</p><ul><li><strong>Free tier</strong>: Every user receives <strong>50 Mana/month</strong> for free</li><li><strong>Mana Source</strong> (subscription): Monthly Mana packages from 500 to 10,000 Mana (from €4.99/month, 20% yearly discount)</li><li><strong>Mana Potion</strong> (one-time purchase): Instant packages from 350 to 2,800 Mana (from €4.90)</li></ul><p>Subscribers can also <strong>gift</strong> Mana to other users.</p>',
|
||||||
category: 'billing',
|
category: 'billing',
|
||||||
order: 91,
|
order: 91,
|
||||||
language: isDE ? 'de' : 'en',
|
language: isDE ? 'de' : 'en',
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ export const defaultPricingTranslations: PricingTranslations = {
|
||||||
'Wählen Sie zwischen monatlichen Abos mit täglicher Regeneration oder einmaligen Mana-Käufen. Keine versteckten Kosten, keine Mindestlaufzeiten.',
|
'Wählen Sie zwischen monatlichen Abos mit täglicher Regeneration oder einmaligen Mana-Käufen. Keine versteckten Kosten, keine Mindestlaufzeiten.',
|
||||||
monthly: 'Monatlich',
|
monthly: 'Monatlich',
|
||||||
yearly: 'Jährlich',
|
yearly: 'Jährlich',
|
||||||
yearlyDiscount: '2 Monate gratis',
|
yearlyDiscount: '20% Rabatt',
|
||||||
startMana: 'Start-Mana',
|
startMana: 'Start-Mana',
|
||||||
regeneration: 'Regeneration',
|
regeneration: 'Regeneration',
|
||||||
maxStorage: 'Max. Speicher',
|
maxStorage: 'Max. Speicher',
|
||||||
|
|
@ -105,7 +105,7 @@ export const englishPricingTranslations: PricingTranslations = {
|
||||||
'Choose between monthly subscriptions with daily regeneration or one-time Mana purchases. No hidden costs, no minimum terms.',
|
'Choose between monthly subscriptions with daily regeneration or one-time Mana purchases. No hidden costs, no minimum terms.',
|
||||||
monthly: 'Monthly',
|
monthly: 'Monthly',
|
||||||
yearly: 'Yearly',
|
yearly: 'Yearly',
|
||||||
yearlyDiscount: '2 months free',
|
yearlyDiscount: '20% off',
|
||||||
startMana: 'Starting Mana',
|
startMana: 'Starting Mana',
|
||||||
regeneration: 'Regeneration',
|
regeneration: 'Regeneration',
|
||||||
maxStorage: 'Max. Storage',
|
maxStorage: 'Max. Storage',
|
||||||
|
|
@ -134,159 +134,195 @@ export const englishPricingTranslations: PricingTranslations = {
|
||||||
export const pricingPlans = {
|
export const pricingPlans = {
|
||||||
monthly: [
|
monthly: [
|
||||||
{
|
{
|
||||||
id: 'tropfen',
|
id: 'free',
|
||||||
name: 'Mana Tropfen',
|
name: 'Mana Quelle Free',
|
||||||
price: 0,
|
price: 0,
|
||||||
priceText: 'Kostenlos',
|
priceText: 'Kostenlos',
|
||||||
startMana: 150,
|
startMana: 50,
|
||||||
regeneration: 5,
|
regeneration: 2,
|
||||||
storage: 150,
|
storage: 50,
|
||||||
icon: '💧',
|
icon: '💧',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['150 Start-Mana', '5 Mana täglich', '150 Mana Speicher', 'Basis KI-Tools'],
|
features: ['50 Mana pro Monat', '2 Mana täglich', 'Zugang zu allen Apps', 'Basis KI-Tools'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'kleiner-stream',
|
id: 'quelle-s',
|
||||||
name: 'Kleiner Stream',
|
name: 'Mana Quelle S',
|
||||||
price: 5.99,
|
price: 4.99,
|
||||||
priceText: '5,99€',
|
priceText: '4,99€',
|
||||||
startMana: 600,
|
startMana: 500,
|
||||||
regeneration: 20,
|
regeneration: 17,
|
||||||
storage: 600,
|
storage: 500,
|
||||||
icon: '🌊',
|
icon: '🌊',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['600 Start-Mana', '20 Mana täglich', '600 Mana Speicher', 'Alle Apps verfügbar'],
|
features: ['500 Mana pro Monat', '17 Mana täglich', 'Alle Apps verfügbar', 'E-Mail Support'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'mittlerer-stream',
|
id: 'quelle-m',
|
||||||
name: 'Mittlerer Stream',
|
name: 'Mana Quelle M',
|
||||||
price: 14.99,
|
price: 9.99,
|
||||||
priceText: '14,99€',
|
priceText: '9,99€',
|
||||||
startMana: 1500,
|
startMana: 1000,
|
||||||
regeneration: 50,
|
regeneration: 33,
|
||||||
storage: 1500,
|
storage: 1000,
|
||||||
icon: '💫',
|
icon: '💫',
|
||||||
popular: true,
|
popular: true,
|
||||||
features: ['1.500 Start-Mana', '50 Mana täglich', '1.500 Mana Speicher', 'Priority Support'],
|
features: ['1.000 Mana pro Monat', '33 Mana täglich', 'Alle AI-Modelle', 'Priority Support'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'grosser-stream',
|
id: 'quelle-l',
|
||||||
name: 'Großer Stream',
|
name: 'Mana Quelle L',
|
||||||
price: 29.99,
|
price: 19.99,
|
||||||
priceText: '29,99€',
|
priceText: '19,99€',
|
||||||
startMana: 3000,
|
startMana: 2000,
|
||||||
regeneration: 100,
|
regeneration: 67,
|
||||||
storage: 3000,
|
storage: 2000,
|
||||||
icon: '⭐',
|
icon: '⭐',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['3.000 Start-Mana', '100 Mana täglich', '3.000 Mana Speicher', 'Premium Support'],
|
features: ['2.000 Mana pro Monat', '67 Mana täglich', 'Premium AI-Modelle', 'API-Zugang'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'riesiger-stream',
|
id: 'quelle-xl',
|
||||||
name: 'Riesiger Stream',
|
name: 'Mana Quelle XL',
|
||||||
price: 49.99,
|
price: 39.99,
|
||||||
priceText: '49,99€',
|
priceText: '39,99€',
|
||||||
startMana: 5000,
|
startMana: 4000,
|
||||||
regeneration: 167,
|
regeneration: 133,
|
||||||
storage: 5000,
|
storage: 4000,
|
||||||
icon: '🌟',
|
icon: '🌟',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'5.000 Start-Mana',
|
'4.000 Mana pro Monat',
|
||||||
'167 Mana täglich',
|
'133 Mana täglich',
|
||||||
'5.000 Mana Speicher',
|
'Team-Features',
|
||||||
|
'Dedizierter Support',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'quelle-xxl',
|
||||||
|
name: 'Mana Quelle XXL',
|
||||||
|
price: 99.99,
|
||||||
|
priceText: '99,99€',
|
||||||
|
startMana: 10000,
|
||||||
|
regeneration: 333,
|
||||||
|
storage: 10000,
|
||||||
|
icon: '✨',
|
||||||
|
popular: false,
|
||||||
|
features: [
|
||||||
|
'10.000 Mana pro Monat',
|
||||||
|
'333 Mana täglich',
|
||||||
'Enterprise Features',
|
'Enterprise Features',
|
||||||
|
'Custom Integrationen',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
] as SubscriptionPlan[],
|
] as SubscriptionPlan[],
|
||||||
yearly: [
|
yearly: [
|
||||||
{
|
{
|
||||||
id: 'tropfen',
|
id: 'free',
|
||||||
name: 'Mana Tropfen',
|
name: 'Mana Quelle Free',
|
||||||
price: 0,
|
price: 0,
|
||||||
priceText: 'Kostenlos',
|
priceText: 'Kostenlos',
|
||||||
monthlyEquivalent: 0,
|
monthlyEquivalent: 0,
|
||||||
startMana: 150,
|
startMana: 50,
|
||||||
regeneration: 5,
|
regeneration: 2,
|
||||||
storage: 150,
|
storage: 50,
|
||||||
icon: '💧',
|
icon: '💧',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: ['150 Start-Mana', '5 Mana täglich', '150 Mana Speicher', 'Basis KI-Tools'],
|
features: ['50 Mana pro Monat', '2 Mana täglich', 'Zugang zu allen Apps', 'Basis KI-Tools'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'kleiner-stream',
|
id: 'quelle-s',
|
||||||
name: 'Kleiner Stream',
|
name: 'Mana Quelle S',
|
||||||
price: 59.9,
|
price: 47.9,
|
||||||
priceText: '59,90€',
|
priceText: '47,90€',
|
||||||
monthlyEquivalent: 4.99,
|
monthlyEquivalent: 3.99,
|
||||||
startMana: 600,
|
startMana: 500,
|
||||||
regeneration: 20,
|
regeneration: 17,
|
||||||
storage: 600,
|
storage: 500,
|
||||||
icon: '🌊',
|
icon: '🌊',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'600 Start-Mana',
|
'500 Mana pro Monat',
|
||||||
'20 Mana täglich',
|
'17 Mana täglich',
|
||||||
'600 Mana Speicher',
|
|
||||||
'Alle Apps verfügbar',
|
'Alle Apps verfügbar',
|
||||||
'✨ 2 Monate gespart',
|
'E-Mail Support',
|
||||||
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'mittlerer-stream',
|
id: 'quelle-m',
|
||||||
name: 'Mittlerer Stream',
|
name: 'Mana Quelle M',
|
||||||
price: 149.9,
|
price: 95.9,
|
||||||
priceText: '149,90€',
|
priceText: '95,90€',
|
||||||
monthlyEquivalent: 12.49,
|
monthlyEquivalent: 7.99,
|
||||||
startMana: 1500,
|
startMana: 1000,
|
||||||
regeneration: 50,
|
regeneration: 33,
|
||||||
storage: 1500,
|
storage: 1000,
|
||||||
icon: '💫',
|
icon: '💫',
|
||||||
popular: true,
|
popular: true,
|
||||||
features: [
|
features: [
|
||||||
'1.500 Start-Mana',
|
'1.000 Mana pro Monat',
|
||||||
'50 Mana täglich',
|
'33 Mana täglich',
|
||||||
'1.500 Mana Speicher',
|
'Alle AI-Modelle',
|
||||||
'Priority Support',
|
'Priority Support',
|
||||||
'✨ 2 Monate gespart',
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'grosser-stream',
|
id: 'quelle-l',
|
||||||
name: 'Großer Stream',
|
name: 'Mana Quelle L',
|
||||||
price: 299.9,
|
price: 191.9,
|
||||||
priceText: '299,90€',
|
priceText: '191,90€',
|
||||||
monthlyEquivalent: 24.99,
|
monthlyEquivalent: 15.99,
|
||||||
startMana: 3000,
|
startMana: 2000,
|
||||||
regeneration: 100,
|
regeneration: 67,
|
||||||
storage: 3000,
|
storage: 2000,
|
||||||
icon: '⭐',
|
icon: '⭐',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'3.000 Start-Mana',
|
'2.000 Mana pro Monat',
|
||||||
'100 Mana täglich',
|
'67 Mana täglich',
|
||||||
'3.000 Mana Speicher',
|
'Premium AI-Modelle',
|
||||||
'Premium Support',
|
'API-Zugang',
|
||||||
'✨ 2 Monate gespart',
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'riesiger-stream',
|
id: 'quelle-xl',
|
||||||
name: 'Riesiger Stream',
|
name: 'Mana Quelle XL',
|
||||||
price: 499.9,
|
price: 383.9,
|
||||||
priceText: '499,90€',
|
priceText: '383,90€',
|
||||||
monthlyEquivalent: 41.66,
|
monthlyEquivalent: 31.99,
|
||||||
startMana: 5000,
|
startMana: 4000,
|
||||||
regeneration: 167,
|
regeneration: 133,
|
||||||
storage: 5000,
|
storage: 4000,
|
||||||
icon: '🌟',
|
icon: '🌟',
|
||||||
popular: false,
|
popular: false,
|
||||||
features: [
|
features: [
|
||||||
'5.000 Start-Mana',
|
'4.000 Mana pro Monat',
|
||||||
'167 Mana täglich',
|
'133 Mana täglich',
|
||||||
'5.000 Mana Speicher',
|
'Team-Features',
|
||||||
|
'Dedizierter Support',
|
||||||
|
'20% gespart',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'quelle-xxl',
|
||||||
|
name: 'Mana Quelle XXL',
|
||||||
|
price: 959.9,
|
||||||
|
priceText: '959,90€',
|
||||||
|
monthlyEquivalent: 79.99,
|
||||||
|
startMana: 10000,
|
||||||
|
regeneration: 333,
|
||||||
|
storage: 10000,
|
||||||
|
icon: '✨',
|
||||||
|
popular: false,
|
||||||
|
features: [
|
||||||
|
'10.000 Mana pro Monat',
|
||||||
|
'333 Mana täglich',
|
||||||
'Enterprise Features',
|
'Enterprise Features',
|
||||||
'✨ 2 Monate gespart',
|
'Custom Integrationen',
|
||||||
|
'20% gespart',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
] as SubscriptionPlan[],
|
] as SubscriptionPlan[],
|
||||||
|
|
@ -294,38 +330,38 @@ export const pricingPlans = {
|
||||||
{
|
{
|
||||||
id: 'small',
|
id: 'small',
|
||||||
name: 'Kleiner Mana Trank',
|
name: 'Kleiner Mana Trank',
|
||||||
price: 4.99,
|
price: 4.9,
|
||||||
priceText: '4,99€',
|
priceText: '4,90€',
|
||||||
mana: 350,
|
mana: 350,
|
||||||
icon: '🧪',
|
icon: '🧪',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'medium',
|
id: 'medium',
|
||||||
name: 'Mittlerer Mana Trank',
|
name: 'Mittlerer Mana Trank',
|
||||||
price: 9.99,
|
price: 9.8,
|
||||||
priceText: '9,99€',
|
priceText: '9,80€',
|
||||||
mana: 700,
|
mana: 700,
|
||||||
icon: '⚗️',
|
icon: '⚗️',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'large',
|
id: 'large',
|
||||||
name: 'Großer Mana Trank',
|
name: 'Großer Mana Trank',
|
||||||
price: 19.99,
|
price: 19.6,
|
||||||
priceText: '19,99€',
|
priceText: '19,60€',
|
||||||
mana: 1400,
|
mana: 1400,
|
||||||
icon: '🏺',
|
icon: '🏺',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'huge',
|
id: 'huge',
|
||||||
name: 'Riesiger Mana Trank',
|
name: 'Riesiger Mana Trank',
|
||||||
price: 39.99,
|
price: 39.2,
|
||||||
priceText: '39,99€',
|
priceText: '39,20€',
|
||||||
mana: 2800,
|
mana: 2800,
|
||||||
icon: '🏛️',
|
icon: '🏛️',
|
||||||
pricePerMana: 0.0143,
|
pricePerMana: 0.014,
|
||||||
},
|
},
|
||||||
] as ManaPackage[],
|
] as ManaPackage[],
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,39 +2,39 @@
|
||||||
"subscriptions": [
|
"subscriptions": [
|
||||||
{
|
{
|
||||||
"id": "free",
|
"id": "free",
|
||||||
"name": "Mana Stream Free",
|
"name": "Mana Quelle Free",
|
||||||
"nameEn": "Mana Stream Free",
|
"nameEn": "Mana Source Free",
|
||||||
"nameIt": "Mana Stream Free",
|
"nameIt": "Mana Fonte Free",
|
||||||
"price": 0,
|
"price": 0,
|
||||||
"priceUnit": "",
|
"priceUnit": "",
|
||||||
"monthlyMana": 150,
|
"monthlyMana": 50,
|
||||||
"canGiftMana": false,
|
"canGiftMana": false,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "monthly",
|
"billingCycle": "monthly",
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Small_v1",
|
"id": "Mana_Quelle_S_v1",
|
||||||
"name": "Kleiner Mana Stream",
|
"name": "Mana Quelle S",
|
||||||
"nameEn": "Small Mana Stream",
|
"nameEn": "Mana Source S",
|
||||||
"nameIt": "Piccolo Mana Stream",
|
"nameIt": "Mana Fonte S",
|
||||||
"price": 5.99,
|
"price": 4.99,
|
||||||
"priceUnit": "/ Monat",
|
"priceUnit": "/ Monat",
|
||||||
"monthlyMana": 600,
|
"monthlyMana": 500,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "monthly",
|
"billingCycle": "monthly",
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Small_Yearly_v1",
|
"id": "Mana_Quelle_S_Yearly_v1",
|
||||||
"name": "Kleiner Mana Stream",
|
"name": "Mana Quelle S",
|
||||||
"nameEn": "Small Mana Stream",
|
"nameEn": "Mana Source S",
|
||||||
"nameIt": "Piccolo Mana Stream",
|
"nameIt": "Mana Fonte S",
|
||||||
"price": 47.99,
|
"price": 47.9,
|
||||||
"priceUnit": "/ Jahr",
|
"priceUnit": "/ Jahr",
|
||||||
"priceBreakdown": "(entspricht 3,99€ / Monat, 33% Rabatt)",
|
"priceBreakdown": "(entspricht 3,99€ / Monat, 20% Rabatt)",
|
||||||
"monthlyMana": 600,
|
"monthlyMana": 500,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "yearly",
|
"billingCycle": "yearly",
|
||||||
|
|
@ -42,87 +42,115 @@
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Medium_v1",
|
"id": "Mana_Quelle_M_v1",
|
||||||
"name": "Mittlerer Mana Stream",
|
"name": "Mana Quelle M",
|
||||||
"nameEn": "Medium Mana Stream",
|
"nameEn": "Mana Source M",
|
||||||
"nameIt": "Medio Mana Stream",
|
"nameIt": "Mana Fonte M",
|
||||||
"price": 14.99,
|
"price": 9.99,
|
||||||
"priceUnit": "/ Monat",
|
"priceUnit": "/ Monat",
|
||||||
"monthlyMana": 1500,
|
"monthlyMana": 1000,
|
||||||
|
"canGiftMana": true,
|
||||||
|
"popular": true,
|
||||||
|
"billingCycle": "monthly",
|
||||||
|
"available": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Mana_Quelle_M_Yearly_v1",
|
||||||
|
"name": "Mana Quelle M",
|
||||||
|
"nameEn": "Mana Source M",
|
||||||
|
"nameIt": "Mana Fonte M",
|
||||||
|
"price": 95.9,
|
||||||
|
"priceUnit": "/ Jahr",
|
||||||
|
"priceBreakdown": "(entspricht 7,99€ / Monat, 20% Rabatt)",
|
||||||
|
"monthlyMana": 1000,
|
||||||
|
"canGiftMana": true,
|
||||||
|
"popular": true,
|
||||||
|
"billingCycle": "yearly",
|
||||||
|
"monthlyEquivalent": 7.99,
|
||||||
|
"available": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Mana_Quelle_L_v1",
|
||||||
|
"name": "Mana Quelle L",
|
||||||
|
"nameEn": "Mana Source L",
|
||||||
|
"nameIt": "Mana Fonte L",
|
||||||
|
"price": 19.99,
|
||||||
|
"priceUnit": "/ Monat",
|
||||||
|
"monthlyMana": 2000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "monthly",
|
"billingCycle": "monthly",
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Medium_Yearly_v1",
|
"id": "Mana_Quelle_L_Yearly_v1",
|
||||||
"name": "Mittlerer Mana Stream",
|
"name": "Mana Quelle L",
|
||||||
"nameEn": "Medium Mana Stream",
|
"nameEn": "Mana Source L",
|
||||||
"nameIt": "Medio Mana Stream",
|
"nameIt": "Mana Fonte L",
|
||||||
"price": 119.99,
|
"price": 191.9,
|
||||||
"priceUnit": "/ Jahr",
|
"priceUnit": "/ Jahr",
|
||||||
"priceBreakdown": "(entspricht 9,99€ / Monat, 33% Rabatt)",
|
"priceBreakdown": "(entspricht 15,99€ / Monat, 20% Rabatt)",
|
||||||
"monthlyMana": 1500,
|
"monthlyMana": 2000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "yearly",
|
"billingCycle": "yearly",
|
||||||
"monthlyEquivalent": 9.99,
|
"monthlyEquivalent": 15.99,
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Large_v1",
|
"id": "Mana_Quelle_XL_v1",
|
||||||
"name": "Großer Mana Stream",
|
"name": "Mana Quelle XL",
|
||||||
"nameEn": "Large Mana Stream",
|
"nameEn": "Mana Source XL",
|
||||||
"nameIt": "Grande Mana Stream",
|
"nameIt": "Mana Fonte XL",
|
||||||
"price": 29.99,
|
"price": 39.99,
|
||||||
"priceUnit": "/ Monat",
|
"priceUnit": "/ Monat",
|
||||||
"monthlyMana": 3000,
|
"monthlyMana": 4000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "monthly",
|
"billingCycle": "monthly",
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Large_Yearly_v1",
|
"id": "Mana_Quelle_XL_Yearly_v1",
|
||||||
"name": "Großer Mana Stream",
|
"name": "Mana Quelle XL",
|
||||||
"nameEn": "Large Mana Stream",
|
"nameEn": "Mana Source XL",
|
||||||
"nameIt": "Grande Mana Stream",
|
"nameIt": "Mana Fonte XL",
|
||||||
"price": 239.99,
|
"price": 383.9,
|
||||||
"priceUnit": "/ Jahr",
|
"priceUnit": "/ Jahr",
|
||||||
"priceBreakdown": "(entspricht 19,99€ / Monat, 33% Rabatt)",
|
"priceBreakdown": "(entspricht 31,99€ / Monat, 20% Rabatt)",
|
||||||
"monthlyMana": 3000,
|
"monthlyMana": 4000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "yearly",
|
"billingCycle": "yearly",
|
||||||
"monthlyEquivalent": 19.99,
|
"monthlyEquivalent": 31.99,
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Giant_v1",
|
"id": "Mana_Quelle_XXL_v1",
|
||||||
"name": "Riesiger Mana Stream",
|
"name": "Mana Quelle XXL",
|
||||||
"nameEn": "Giant Mana Stream",
|
"nameEn": "Mana Source XXL",
|
||||||
"nameIt": "Gigante Mana Stream",
|
"nameIt": "Mana Fonte XXL",
|
||||||
"price": 49.99,
|
"price": 99.99,
|
||||||
"priceUnit": "/ Monat",
|
"priceUnit": "/ Monat",
|
||||||
"monthlyMana": 5000,
|
"monthlyMana": 10000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "monthly",
|
"billingCycle": "monthly",
|
||||||
"available": true
|
"available": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "Mana_Stream_Giant_Yearly_v1",
|
"id": "Mana_Quelle_XXL_Yearly_v1",
|
||||||
"name": "Riesiger Mana Stream",
|
"name": "Mana Quelle XXL",
|
||||||
"nameEn": "Giant Mana Stream",
|
"nameEn": "Mana Source XXL",
|
||||||
"nameIt": "Gigante Mana Stream",
|
"nameIt": "Mana Fonte XXL",
|
||||||
"price": 399.99,
|
"price": 959.9,
|
||||||
"priceUnit": "/ Jahr",
|
"priceUnit": "/ Jahr",
|
||||||
"priceBreakdown": "(entspricht 33,33€ / Monat, 33% Rabatt)",
|
"priceBreakdown": "(entspricht 79,99€ / Monat, 20% Rabatt)",
|
||||||
"monthlyMana": 5000,
|
"monthlyMana": 10000,
|
||||||
"canGiftMana": true,
|
"canGiftMana": true,
|
||||||
"popular": false,
|
"popular": false,
|
||||||
"billingCycle": "yearly",
|
"billingCycle": "yearly",
|
||||||
"monthlyEquivalent": 33.33,
|
"monthlyEquivalent": 79.99,
|
||||||
"available": true
|
"available": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
@ -133,7 +161,7 @@
|
||||||
"nameEn": "Small Mana Potion",
|
"nameEn": "Small Mana Potion",
|
||||||
"nameIt": "Piccola Pozione di Mana",
|
"nameIt": "Piccola Pozione di Mana",
|
||||||
"manaAmount": 350,
|
"manaAmount": 350,
|
||||||
"price": 4.99,
|
"price": 4.9,
|
||||||
"popular": false
|
"popular": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -142,7 +170,7 @@
|
||||||
"nameEn": "Medium Mana Potion",
|
"nameEn": "Medium Mana Potion",
|
||||||
"nameIt": "Media Pozione di Mana",
|
"nameIt": "Media Pozione di Mana",
|
||||||
"manaAmount": 700,
|
"manaAmount": 700,
|
||||||
"price": 9.99,
|
"price": 9.8,
|
||||||
"popular": false
|
"popular": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -151,7 +179,7 @@
|
||||||
"nameEn": "Large Mana Potion",
|
"nameEn": "Large Mana Potion",
|
||||||
"nameIt": "Grande Pozione di Mana",
|
"nameIt": "Grande Pozione di Mana",
|
||||||
"manaAmount": 1400,
|
"manaAmount": 1400,
|
||||||
"price": 19.99,
|
"price": 19.6,
|
||||||
"popular": false
|
"popular": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -160,7 +188,7 @@
|
||||||
"nameEn": "Giant Mana Potion",
|
"nameEn": "Giant Mana Potion",
|
||||||
"nameIt": "Pozione di Mana Gigante",
|
"nameIt": "Pozione di Mana Gigante",
|
||||||
"manaAmount": 2800,
|
"manaAmount": 2800,
|
||||||
"price": 39.99,
|
"price": 39.2,
|
||||||
"popular": false
|
"popular": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
138
services/mana-core-auth/postgres/init/04-guild-rls.sql
Normal file
138
services/mana-core-auth/postgres/init/04-guild-rls.sql
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
-- =====================================================
|
||||||
|
-- RLS POLICIES FOR GUILD POOL TABLES
|
||||||
|
-- =====================================================
|
||||||
|
-- Uses helper functions from 03-organization-rls.sql:
|
||||||
|
-- auth.is_organization_member(org_id)
|
||||||
|
-- auth.is_organization_owner_or_admin(org_id)
|
||||||
|
-- auth.is_organization_owner(org_id)
|
||||||
|
|
||||||
|
-- Enable RLS
|
||||||
|
ALTER TABLE credits.guild_pools ENABLE ROW LEVEL SECURITY;
|
||||||
|
ALTER TABLE credits.guild_spending_limits ENABLE ROW LEVEL SECURITY;
|
||||||
|
ALTER TABLE credits.guild_transactions ENABLE ROW LEVEL SECURITY;
|
||||||
|
|
||||||
|
-- =====================================================
|
||||||
|
-- GUILD POOLS TABLE POLICIES
|
||||||
|
-- =====================================================
|
||||||
|
|
||||||
|
-- Members can view their guild's pool balance
|
||||||
|
CREATE POLICY "Members can view guild pool"
|
||||||
|
ON credits.guild_pools
|
||||||
|
FOR SELECT
|
||||||
|
USING (
|
||||||
|
auth.is_organization_member(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Pool is created during guild creation (by owner or system)
|
||||||
|
CREATE POLICY "Owners can create guild pool"
|
||||||
|
ON credits.guild_pools
|
||||||
|
FOR INSERT
|
||||||
|
WITH CHECK (
|
||||||
|
auth.is_organization_owner(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Owners and admins can update pool (funding, spending)
|
||||||
|
CREATE POLICY "Owners and admins can update guild pool"
|
||||||
|
ON credits.guild_pools
|
||||||
|
FOR UPDATE
|
||||||
|
USING (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
)
|
||||||
|
WITH CHECK (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Only owners can delete pool (cascade from org deletion)
|
||||||
|
CREATE POLICY "Owners can delete guild pool"
|
||||||
|
ON credits.guild_pools
|
||||||
|
FOR DELETE
|
||||||
|
USING (
|
||||||
|
auth.is_organization_owner(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- =====================================================
|
||||||
|
-- GUILD SPENDING LIMITS TABLE POLICIES
|
||||||
|
-- =====================================================
|
||||||
|
|
||||||
|
-- Members can view their own limits; owners/admins can view all
|
||||||
|
CREATE POLICY "Users can view guild spending limits"
|
||||||
|
ON credits.guild_spending_limits
|
||||||
|
FOR SELECT
|
||||||
|
USING (
|
||||||
|
user_id = auth.uid()::text
|
||||||
|
OR auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Only owners and admins can set spending limits
|
||||||
|
CREATE POLICY "Owners and admins can create spending limits"
|
||||||
|
ON credits.guild_spending_limits
|
||||||
|
FOR INSERT
|
||||||
|
WITH CHECK (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Only owners and admins can update spending limits
|
||||||
|
CREATE POLICY "Owners and admins can update spending limits"
|
||||||
|
ON credits.guild_spending_limits
|
||||||
|
FOR UPDATE
|
||||||
|
USING (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
)
|
||||||
|
WITH CHECK (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Only owners and admins can delete spending limits
|
||||||
|
CREATE POLICY "Owners and admins can delete spending limits"
|
||||||
|
ON credits.guild_spending_limits
|
||||||
|
FOR DELETE
|
||||||
|
USING (
|
||||||
|
auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- =====================================================
|
||||||
|
-- GUILD TRANSACTIONS TABLE POLICIES
|
||||||
|
-- =====================================================
|
||||||
|
|
||||||
|
-- Members can view their own transactions; owners/admins see all
|
||||||
|
CREATE POLICY "Users can view guild transactions"
|
||||||
|
ON credits.guild_transactions
|
||||||
|
FOR SELECT
|
||||||
|
USING (
|
||||||
|
user_id = auth.uid()::text
|
||||||
|
OR auth.is_organization_owner_or_admin(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Any member can create transactions (via guild credit usage)
|
||||||
|
CREATE POLICY "Members can create guild transactions"
|
||||||
|
ON credits.guild_transactions
|
||||||
|
FOR INSERT
|
||||||
|
WITH CHECK (
|
||||||
|
auth.is_organization_member(organization_id)
|
||||||
|
OR auth.role() = 'admin'
|
||||||
|
);
|
||||||
|
|
||||||
|
-- No updates to transactions (immutable audit trail)
|
||||||
|
-- No deletes to transactions (immutable audit trail)
|
||||||
|
|
||||||
|
-- =====================================================
|
||||||
|
-- COMMENTS
|
||||||
|
-- =====================================================
|
||||||
|
|
||||||
|
COMMENT ON POLICY "Members can view guild pool" ON credits.guild_pools IS 'Guild members can see the shared pool balance';
|
||||||
|
COMMENT ON POLICY "Owners can create guild pool" ON credits.guild_pools IS 'Pool created during guild setup by owner';
|
||||||
|
COMMENT ON POLICY "Owners and admins can update guild pool" ON credits.guild_pools IS 'Pool balance updated during funding and spending';
|
||||||
|
COMMENT ON POLICY "Users can view guild spending limits" ON credits.guild_spending_limits IS 'Members see own limits, owners/admins see all';
|
||||||
|
COMMENT ON POLICY "Users can view guild transactions" ON credits.guild_transactions IS 'Members see own transactions, owners/admins see all';
|
||||||
|
COMMENT ON POLICY "Members can create guild transactions" ON credits.guild_transactions IS 'Any guild member can create transactions via credit usage';
|
||||||
|
|
@ -11,10 +11,12 @@
|
||||||
* 1. Stripe products and prices are already created via MCP
|
* 1. Stripe products and prices are already created via MCP
|
||||||
* 2. Set STRIPE_* environment variables with the price IDs
|
* 2. Set STRIPE_* environment variables with the price IDs
|
||||||
*
|
*
|
||||||
* Stripe Products (Live):
|
* Stripe Products (Live) - "Mana Quelle" subscriptions:
|
||||||
* - ManaCore Plus: prod_TzNUGcq9qx9rRT (4.99€/month, 49.99€/year, 100 credits)
|
* - Mana Quelle S: prod_UDzZl1uKIHplam (4.99€/month, 47.90€/year, 500 credits)
|
||||||
* - ManaCore Pro: prod_TzNUgWeBjT35qn (11.99€/month, 119.99€/year, 500 credits)
|
* - Mana Quelle M: prod_UDzZXZxEVoyQMF (9.99€/month, 95.90€/year, 1000 credits)
|
||||||
* - ManaCore Ultra: prod_TzNUE5pTbTDdbp (24.99€/month, 249.99€/year, 2000 credits)
|
* - Mana Quelle L: prod_UDzZcDxsDS3q1T (19.99€/month, 191.90€/year, 2000 credits)
|
||||||
|
* - Mana Quelle XL: prod_UDzZum6MMQkc0b (39.99€/month, 383.90€/year, 4000 credits)
|
||||||
|
* - Mana Quelle XXL: prod_UDzZreFcbGxdJj (99.99€/month, 959.90€/year, 10000 credits)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import 'dotenv/config';
|
import 'dotenv/config';
|
||||||
|
|
@ -32,20 +34,30 @@ const STRIPE_CONFIG = {
|
||||||
// Free plan (no Stripe price needed)
|
// Free plan (no Stripe price needed)
|
||||||
FREE_PRODUCT_ID: process.env.STRIPE_FREE_PRODUCT_ID || '',
|
FREE_PRODUCT_ID: process.env.STRIPE_FREE_PRODUCT_ID || '',
|
||||||
|
|
||||||
// ManaCore Plus plan
|
// Mana Quelle S
|
||||||
PLUS_PRODUCT_ID: process.env.STRIPE_PLUS_PRODUCT_ID || 'prod_TzNUGcq9qx9rRT',
|
S_PRODUCT_ID: process.env.STRIPE_S_PRODUCT_ID || 'prod_UDzZl1uKIHplam',
|
||||||
PLUS_PRICE_MONTHLY: process.env.STRIPE_PLUS_PRICE_MONTHLY || 'price_1T1OkKAZjQCYS0ZJ88m0shoN',
|
S_PRICE_MONTHLY: process.env.STRIPE_S_PRICE_MONTHLY || 'price_1TFXaKAZjQCYS0ZJGQFSxm8v',
|
||||||
PLUS_PRICE_YEARLY: process.env.STRIPE_PLUS_PRICE_YEARLY || 'price_1T1OkLAZjQCYS0ZJ4IdMzVyJ',
|
S_PRICE_YEARLY: process.env.STRIPE_S_PRICE_YEARLY || 'price_1TFXaLAZjQCYS0ZJwFnGP29S',
|
||||||
|
|
||||||
// ManaCore Pro plan
|
// Mana Quelle M
|
||||||
PRO_PRODUCT_ID: process.env.STRIPE_PRO_PRODUCT_ID || 'prod_TzNUgWeBjT35qn',
|
M_PRODUCT_ID: process.env.STRIPE_M_PRODUCT_ID || 'prod_UDzZXZxEVoyQMF',
|
||||||
PRO_PRICE_MONTHLY: process.env.STRIPE_PRO_PRICE_MONTHLY || 'price_1T1OkLAZjQCYS0ZJvyPM7Wop',
|
M_PRICE_MONTHLY: process.env.STRIPE_M_PRICE_MONTHLY || 'price_1TFXaMAZjQCYS0ZJMRmTgQvb',
|
||||||
PRO_PRICE_YEARLY: process.env.STRIPE_PRO_PRICE_YEARLY || 'price_1T1OkLAZjQCYS0ZJDbZeuOOu',
|
M_PRICE_YEARLY: process.env.STRIPE_M_PRICE_YEARLY || 'price_1TFXaNAZjQCYS0ZJ6AS1vRkx',
|
||||||
|
|
||||||
// ManaCore Ultra plan
|
// Mana Quelle L
|
||||||
ULTRA_PRODUCT_ID: process.env.STRIPE_ULTRA_PRODUCT_ID || 'prod_TzNUE5pTbTDdbp',
|
L_PRODUCT_ID: process.env.STRIPE_L_PRODUCT_ID || 'prod_UDzZcDxsDS3q1T',
|
||||||
ULTRA_PRICE_MONTHLY: process.env.STRIPE_ULTRA_PRICE_MONTHLY || 'price_1T1OkMAZjQCYS0ZJYCJNZtg8',
|
L_PRICE_MONTHLY: process.env.STRIPE_L_PRICE_MONTHLY || 'price_1TFXaNAZjQCYS0ZJaqXjJ0HC',
|
||||||
ULTRA_PRICE_YEARLY: process.env.STRIPE_ULTRA_PRICE_YEARLY || 'price_1T1OkMAZjQCYS0ZJvCvR6Ve6',
|
L_PRICE_YEARLY: process.env.STRIPE_L_PRICE_YEARLY || 'price_1TFXaOAZjQCYS0ZJVndo98Pf',
|
||||||
|
|
||||||
|
// Mana Quelle XL
|
||||||
|
XL_PRODUCT_ID: process.env.STRIPE_XL_PRODUCT_ID || 'prod_UDzZum6MMQkc0b',
|
||||||
|
XL_PRICE_MONTHLY: process.env.STRIPE_XL_PRICE_MONTHLY || 'price_1TFXaPAZjQCYS0ZJ0q7OysMg',
|
||||||
|
XL_PRICE_YEARLY: process.env.STRIPE_XL_PRICE_YEARLY || 'price_1TFXaQAZjQCYS0ZJ6rDqh2FU',
|
||||||
|
|
||||||
|
// Mana Quelle XXL
|
||||||
|
XXL_PRODUCT_ID: process.env.STRIPE_XXL_PRODUCT_ID || 'prod_UDzZreFcbGxdJj',
|
||||||
|
XXL_PRICE_MONTHLY: process.env.STRIPE_XXL_PRICE_MONTHLY || 'price_1TFXaQAZjQCYS0ZJ3A6QB2sv',
|
||||||
|
XXL_PRICE_YEARLY: process.env.STRIPE_XXL_PRICE_YEARLY || 'price_1TFXaRAZjQCYS0ZJCuYSesCA',
|
||||||
};
|
};
|
||||||
|
|
||||||
// Plan definitions
|
// Plan definitions
|
||||||
|
|
@ -72,16 +84,16 @@ const PLANS = [
|
||||||
sortOrder: 0,
|
sortOrder: 0,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Plus',
|
name: 'Mana Quelle S',
|
||||||
description: 'Basis-Zugang zu allen ManaCore Apps mit AI-Credits',
|
description: '500 Mana pro Monat – Basis-Zugang zu allen ManaCore Apps',
|
||||||
monthlyCredits: 100,
|
monthlyCredits: 500,
|
||||||
priceMonthlyEuroCents: 499, // 4.99 EUR
|
priceMonthlyEuroCents: 499, // 4.99 EUR
|
||||||
priceYearlyEuroCents: 4999, // 49.99 EUR (~2 months free)
|
priceYearlyEuroCents: 4790, // 47.90 EUR (20% Rabatt)
|
||||||
stripePriceIdMonthly: STRIPE_CONFIG.PLUS_PRICE_MONTHLY || null,
|
stripePriceIdMonthly: STRIPE_CONFIG.S_PRICE_MONTHLY || null,
|
||||||
stripePriceIdYearly: STRIPE_CONFIG.PLUS_PRICE_YEARLY || null,
|
stripePriceIdYearly: STRIPE_CONFIG.S_PRICE_YEARLY || null,
|
||||||
stripeProductId: STRIPE_CONFIG.PLUS_PRODUCT_ID || null,
|
stripeProductId: STRIPE_CONFIG.S_PRODUCT_ID || null,
|
||||||
features: [
|
features: [
|
||||||
'100 AI-Credits pro Monat',
|
'500 Mana pro Monat',
|
||||||
'Zugang zu allen Apps',
|
'Zugang zu allen Apps',
|
||||||
'Chat & Bildgenerierung',
|
'Chat & Bildgenerierung',
|
||||||
'E-Mail Support',
|
'E-Mail Support',
|
||||||
|
|
@ -93,38 +105,76 @@ const PLANS = [
|
||||||
sortOrder: 1,
|
sortOrder: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Pro',
|
name: 'Mana Quelle M',
|
||||||
description: 'Erweiterter Zugang mit Premium-Modellen und Priority-Support',
|
description: '1.000 Mana pro Monat – Erweiterter Zugang mit mehr AI-Power',
|
||||||
monthlyCredits: 500,
|
monthlyCredits: 1000,
|
||||||
priceMonthlyEuroCents: 1199, // 11.99 EUR
|
priceMonthlyEuroCents: 999, // 9.99 EUR
|
||||||
priceYearlyEuroCents: 11999, // 119.99 EUR (~2 months free)
|
priceYearlyEuroCents: 9590, // 95.90 EUR (20% Rabatt)
|
||||||
stripePriceIdMonthly: STRIPE_CONFIG.PRO_PRICE_MONTHLY || null,
|
stripePriceIdMonthly: STRIPE_CONFIG.M_PRICE_MONTHLY || null,
|
||||||
stripePriceIdYearly: STRIPE_CONFIG.PRO_PRICE_YEARLY || null,
|
stripePriceIdYearly: STRIPE_CONFIG.M_PRICE_YEARLY || null,
|
||||||
stripeProductId: STRIPE_CONFIG.PRO_PRODUCT_ID || null,
|
stripeProductId: STRIPE_CONFIG.M_PRODUCT_ID || null,
|
||||||
features: [
|
features: ['1.000 Mana pro Monat', 'Alle AI-Modelle', 'Priority-Support', 'API-Zugang'],
|
||||||
'500 AI-Credits pro Monat',
|
maxTeamMembers: 3,
|
||||||
'Premium AI-Modelle (GPT-4, Claude)',
|
maxOrganizations: 2,
|
||||||
'Priority-Support',
|
|
||||||
'API-Zugang',
|
|
||||||
'Erweiterte Exportoptionen',
|
|
||||||
],
|
|
||||||
maxTeamMembers: 5,
|
|
||||||
maxOrganizations: 3,
|
|
||||||
isDefault: false,
|
isDefault: false,
|
||||||
isEnterprise: false,
|
isEnterprise: false,
|
||||||
sortOrder: 2,
|
sortOrder: 2,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Ultra',
|
name: 'Mana Quelle L',
|
||||||
description: 'Maximale Power für Power-User und Teams',
|
description: '2.000 Mana pro Monat – Premium-Zugang für Power-User',
|
||||||
monthlyCredits: 2000,
|
monthlyCredits: 2000,
|
||||||
priceMonthlyEuroCents: 2499, // 24.99 EUR
|
priceMonthlyEuroCents: 1999, // 19.99 EUR
|
||||||
priceYearlyEuroCents: 24999, // 249.99 EUR (~2 months free)
|
priceYearlyEuroCents: 19190, // 191.90 EUR (20% Rabatt)
|
||||||
stripePriceIdMonthly: STRIPE_CONFIG.ULTRA_PRICE_MONTHLY || null,
|
stripePriceIdMonthly: STRIPE_CONFIG.L_PRICE_MONTHLY || null,
|
||||||
stripePriceIdYearly: STRIPE_CONFIG.ULTRA_PRICE_YEARLY || null,
|
stripePriceIdYearly: STRIPE_CONFIG.L_PRICE_YEARLY || null,
|
||||||
stripeProductId: STRIPE_CONFIG.ULTRA_PRODUCT_ID || null,
|
stripeProductId: STRIPE_CONFIG.L_PRODUCT_ID || null,
|
||||||
features: [
|
features: [
|
||||||
'2.000 AI-Credits pro Monat',
|
'2.000 Mana pro Monat',
|
||||||
|
'Alle Premium AI-Modelle',
|
||||||
|
'Priority-Support',
|
||||||
|
'Erweiterte Exportoptionen',
|
||||||
|
'API-Zugang',
|
||||||
|
],
|
||||||
|
maxTeamMembers: 5,
|
||||||
|
maxOrganizations: 3,
|
||||||
|
isDefault: false,
|
||||||
|
isEnterprise: false,
|
||||||
|
sortOrder: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mana Quelle XL',
|
||||||
|
description: '4.000 Mana pro Monat – Maximale Power für Teams und Profis',
|
||||||
|
monthlyCredits: 4000,
|
||||||
|
priceMonthlyEuroCents: 3999, // 39.99 EUR
|
||||||
|
priceYearlyEuroCents: 38390, // 383.90 EUR (20% Rabatt)
|
||||||
|
stripePriceIdMonthly: STRIPE_CONFIG.XL_PRICE_MONTHLY || null,
|
||||||
|
stripePriceIdYearly: STRIPE_CONFIG.XL_PRICE_YEARLY || null,
|
||||||
|
stripeProductId: STRIPE_CONFIG.XL_PRODUCT_ID || null,
|
||||||
|
features: [
|
||||||
|
'4.000 Mana pro Monat',
|
||||||
|
'Alle Premium AI-Modelle',
|
||||||
|
'Dedizierter Support',
|
||||||
|
'Team-Features',
|
||||||
|
'Unlimitierte API-Calls',
|
||||||
|
],
|
||||||
|
maxTeamMembers: 10,
|
||||||
|
maxOrganizations: 5,
|
||||||
|
isDefault: false,
|
||||||
|
isEnterprise: false,
|
||||||
|
sortOrder: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Mana Quelle XXL',
|
||||||
|
description: '10.000 Mana pro Monat – Enterprise-Power ohne Limits',
|
||||||
|
monthlyCredits: 10000,
|
||||||
|
priceMonthlyEuroCents: 9999, // 99.99 EUR
|
||||||
|
priceYearlyEuroCents: 95990, // 959.90 EUR (20% Rabatt)
|
||||||
|
stripePriceIdMonthly: STRIPE_CONFIG.XXL_PRICE_MONTHLY || null,
|
||||||
|
stripePriceIdYearly: STRIPE_CONFIG.XXL_PRICE_YEARLY || null,
|
||||||
|
stripeProductId: STRIPE_CONFIG.XXL_PRODUCT_ID || null,
|
||||||
|
features: [
|
||||||
|
'10.000 Mana pro Monat',
|
||||||
'Alle Premium AI-Modelle',
|
'Alle Premium AI-Modelle',
|
||||||
'Dedizierter Support',
|
'Dedizierter Support',
|
||||||
'Unlimitierte API-Calls',
|
'Unlimitierte API-Calls',
|
||||||
|
|
@ -135,7 +185,7 @@ const PLANS = [
|
||||||
maxOrganizations: null, // Unlimited
|
maxOrganizations: null, // Unlimited
|
||||||
isDefault: false,
|
isDefault: false,
|
||||||
isEnterprise: true,
|
isEnterprise: true,
|
||||||
sortOrder: 3,
|
sortOrder: 5,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -189,9 +239,11 @@ async function seedPlans() {
|
||||||
|
|
||||||
// Info about configured Stripe products
|
// Info about configured Stripe products
|
||||||
console.log('\n📦 Stripe Products configured:');
|
console.log('\n📦 Stripe Products configured:');
|
||||||
console.log(' Plus: ', STRIPE_CONFIG.PLUS_PRODUCT_ID || '(not set)');
|
console.log(' S: ', STRIPE_CONFIG.S_PRODUCT_ID || '(not set)');
|
||||||
console.log(' Pro: ', STRIPE_CONFIG.PRO_PRODUCT_ID || '(not set)');
|
console.log(' M: ', STRIPE_CONFIG.M_PRODUCT_ID || '(not set)');
|
||||||
console.log(' Ultra: ', STRIPE_CONFIG.ULTRA_PRODUCT_ID || '(not set)');
|
console.log(' L: ', STRIPE_CONFIG.L_PRODUCT_ID || '(not set)');
|
||||||
|
console.log(' XL: ', STRIPE_CONFIG.XL_PRODUCT_ID || '(not set)');
|
||||||
|
console.log(' XXL: ', STRIPE_CONFIG.XXL_PRODUCT_ID || '(not set)');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error seeding plans:', error);
|
console.error('Error seeding plans:', error);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,13 @@ export class GuildsController {
|
||||||
@Post()
|
@Post()
|
||||||
@ApiOperation({ summary: 'Create a new guild' })
|
@ApiOperation({ summary: 'Create a new guild' })
|
||||||
@ApiResponse({ status: 201, description: 'Guild created with pool initialized' })
|
@ApiResponse({ status: 201, description: 'Guild created with pool initialized' })
|
||||||
async createGuild(@Headers('authorization') authorization: string, @Body() dto: CreateGuildDto) {
|
async createGuild(
|
||||||
|
@Headers('authorization') authorization: string,
|
||||||
|
@CurrentUser() user: CurrentUserData,
|
||||||
|
@Body() dto: CreateGuildDto
|
||||||
|
) {
|
||||||
const token = this.extractToken(authorization);
|
const token = this.extractToken(authorization);
|
||||||
return this.guildsService.createGuild(token, dto);
|
return this.guildsService.createGuild(token, user.userId, dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get()
|
@Get()
|
||||||
|
|
@ -101,10 +105,11 @@ export class GuildsController {
|
||||||
async inviteMember(
|
async inviteMember(
|
||||||
@Param('id') guildId: string,
|
@Param('id') guildId: string,
|
||||||
@Headers('authorization') authorization: string,
|
@Headers('authorization') authorization: string,
|
||||||
|
@CurrentUser() user: CurrentUserData,
|
||||||
@Body() dto: InviteMemberDto
|
@Body() dto: InviteMemberDto
|
||||||
) {
|
) {
|
||||||
const token = this.extractToken(authorization);
|
const token = this.extractToken(authorization);
|
||||||
return this.guildsService.inviteMember(guildId, dto.email, dto.role, token);
|
return this.guildsService.inviteMember(guildId, dto.email, dto.role, user.userId, token);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Post('accept-invitation')
|
@Post('accept-invitation')
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,12 @@
|
||||||
import { Injectable, ForbiddenException, Logger } from '@nestjs/common';
|
import { Injectable, BadRequestException, ForbiddenException, Logger } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { eq, and } from 'drizzle-orm';
|
import { eq, and, sql } from 'drizzle-orm';
|
||||||
import { getDb } from '../db/connection';
|
import { getDb } from '../db/connection';
|
||||||
import { members, organizations } from '../db/schema';
|
import { members, organizations } from '../db/schema';
|
||||||
|
import { subscriptions, plans } from '../db/schema/subscriptions.schema';
|
||||||
import { BetterAuthService } from '../auth/services/better-auth.service';
|
import { BetterAuthService } from '../auth/services/better-auth.service';
|
||||||
import { GuildPoolService } from '../credits/guild-pool.service';
|
import { GuildPoolService } from '../credits/guild-pool.service';
|
||||||
import { InviteEmployeeDto } from '../auth/dto/invite-employee.dto';
|
|
||||||
import { AcceptInvitationDto } from '../auth/dto/accept-invitation.dto';
|
|
||||||
import { UpdateOrganizationDto } from '../auth/dto/update-organization.dto';
|
import { UpdateOrganizationDto } from '../auth/dto/update-organization.dto';
|
||||||
import { UpdateMemberRoleDto } from '../auth/dto/update-member-role.dto';
|
|
||||||
|
|
||||||
export class CreateGuildDto {
|
export class CreateGuildDto {
|
||||||
name: string;
|
name: string;
|
||||||
|
|
@ -16,6 +14,12 @@ export class CreateGuildDto {
|
||||||
logo?: string;
|
logo?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Default limits for users without a subscription (free tier)
|
||||||
|
const FREE_TIER_LIMITS = {
|
||||||
|
maxOrganizations: 1,
|
||||||
|
maxTeamMembers: 1, // Just themselves
|
||||||
|
};
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class GuildsService {
|
export class GuildsService {
|
||||||
private readonly logger = new Logger(GuildsService.name);
|
private readonly logger = new Logger(GuildsService.name);
|
||||||
|
|
@ -32,10 +36,71 @@ export class GuildsService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new guild (organization + pool).
|
* Get the user's subscription plan limits.
|
||||||
* Checks subscription limits for maxOrganizations.
|
* Falls back to free tier defaults if no active subscription.
|
||||||
*/
|
*/
|
||||||
async createGuild(token: string, dto: CreateGuildDto) {
|
private async getUserPlanLimits(userId: string) {
|
||||||
|
const db = this.getDb();
|
||||||
|
|
||||||
|
const [sub] = await db
|
||||||
|
.select({
|
||||||
|
maxTeamMembers: plans.maxTeamMembers,
|
||||||
|
maxOrganizations: plans.maxOrganizations,
|
||||||
|
})
|
||||||
|
.from(subscriptions)
|
||||||
|
.innerJoin(plans, eq(subscriptions.planId, plans.id))
|
||||||
|
.where(and(eq(subscriptions.userId, userId), eq(subscriptions.status, 'active')))
|
||||||
|
.limit(1);
|
||||||
|
|
||||||
|
return {
|
||||||
|
maxOrganizations: sub?.maxOrganizations ?? FREE_TIER_LIMITS.maxOrganizations,
|
||||||
|
maxTeamMembers: sub?.maxTeamMembers ?? FREE_TIER_LIMITS.maxTeamMembers,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count how many guilds/organizations the user owns.
|
||||||
|
*/
|
||||||
|
private async countUserOwnedGuilds(userId: string): Promise<number> {
|
||||||
|
const db = this.getDb();
|
||||||
|
|
||||||
|
const [result] = await db
|
||||||
|
.select({ count: sql<number>`count(*)` })
|
||||||
|
.from(members)
|
||||||
|
.where(and(eq(members.userId, userId), eq(members.role, 'owner')));
|
||||||
|
|
||||||
|
return Number(result.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count current members of a guild.
|
||||||
|
*/
|
||||||
|
private async countGuildMembers(guildId: string): Promise<number> {
|
||||||
|
const db = this.getDb();
|
||||||
|
|
||||||
|
const [result] = await db
|
||||||
|
.select({ count: sql<number>`count(*)` })
|
||||||
|
.from(members)
|
||||||
|
.where(eq(members.organizationId, guildId));
|
||||||
|
|
||||||
|
return Number(result.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new guild (organization + pool).
|
||||||
|
* Enforces subscription limit for maxOrganizations.
|
||||||
|
*/
|
||||||
|
async createGuild(token: string, userId: string, dto: CreateGuildDto) {
|
||||||
|
// Check subscription limit
|
||||||
|
const limits = await this.getUserPlanLimits(userId);
|
||||||
|
const ownedGuilds = await this.countUserOwnedGuilds(userId);
|
||||||
|
|
||||||
|
if (limits.maxOrganizations !== null && ownedGuilds >= limits.maxOrganizations) {
|
||||||
|
throw new BadRequestException(
|
||||||
|
`Guild limit reached. Your plan allows ${limits.maxOrganizations} guild(s). Upgrade to create more.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Create organization via Better Auth
|
// Create organization via Better Auth
|
||||||
const result = await this.betterAuthService.createOrganizationDirect(token, {
|
const result = await this.betterAuthService.createOrganizationDirect(token, {
|
||||||
name: dto.name,
|
name: dto.name,
|
||||||
|
|
@ -70,11 +135,9 @@ export class GuildsService {
|
||||||
async listGuilds(token: string, userId: string) {
|
async listGuilds(token: string, userId: string) {
|
||||||
const result = await this.betterAuthService.listOrganizations(token);
|
const result = await this.betterAuthService.listOrganizations(token);
|
||||||
|
|
||||||
const db = this.getDb();
|
|
||||||
const guilds = [];
|
const guilds = [];
|
||||||
|
|
||||||
for (const org of result.organizations || []) {
|
for (const org of result.organizations || []) {
|
||||||
// Get pool balance for each guild
|
|
||||||
try {
|
try {
|
||||||
const pool = await this.guildPoolService.getGuildPoolBalance(org.id, userId);
|
const pool = await this.guildPoolService.getGuildPoolBalance(org.id, userId);
|
||||||
guilds.push({
|
guilds.push({
|
||||||
|
|
@ -89,7 +152,6 @@ export class GuildsService {
|
||||||
role: (org as any).role,
|
role: (org as any).role,
|
||||||
});
|
});
|
||||||
} catch {
|
} catch {
|
||||||
// Pool might not exist for legacy orgs
|
|
||||||
guilds.push({
|
guilds.push({
|
||||||
gilde: {
|
gilde: {
|
||||||
id: org.id,
|
id: org.id,
|
||||||
|
|
@ -150,8 +212,28 @@ export class GuildsService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invite a member to the guild.
|
* Invite a member to the guild.
|
||||||
|
* Enforces subscription limit for maxTeamMembers.
|
||||||
*/
|
*/
|
||||||
async inviteMember(guildId: string, email: string, role: string, token: string) {
|
async inviteMember(guildId: string, email: string, role: string, inviterUserId: string, token: string) {
|
||||||
|
// Find guild owner to check their subscription limits
|
||||||
|
const db = this.getDb();
|
||||||
|
const [owner] = await db
|
||||||
|
.select()
|
||||||
|
.from(members)
|
||||||
|
.where(and(eq(members.organizationId, guildId), eq(members.role, 'owner')))
|
||||||
|
.limit(1);
|
||||||
|
|
||||||
|
if (owner) {
|
||||||
|
const limits = await this.getUserPlanLimits(owner.userId);
|
||||||
|
const memberCount = await this.countGuildMembers(guildId);
|
||||||
|
|
||||||
|
if (limits.maxTeamMembers !== null && memberCount >= limits.maxTeamMembers) {
|
||||||
|
throw new BadRequestException(
|
||||||
|
`Member limit reached. The guild owner's plan allows ${limits.maxTeamMembers} member(s). Upgrade to invite more.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this.betterAuthService.inviteEmployee({
|
return this.betterAuthService.inviteEmployee({
|
||||||
organizationId: guildId,
|
organizationId: guildId,
|
||||||
employeeEmail: email,
|
employeeEmail: email,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue