feat: production deployment - full update with providers, admin, glossaries, pricing, tests

Major changes across backend, frontend, infrastructure:
- Provider system with model selection (Google, DeepL, OpenAI, Ollama, Google Cloud)
- Admin panel: user management, pricing, settings
- Glossary system with CSV import/export
- Subscription and tier quota management
- Security hardening (rate limiting, API key auth, path traversal fixes)
- Docker compose for dev, prod, and IONOS deployment
- Alembic migrations for new tables
- Frontend: dashboard, pricing page, landing page, i18n (en/fr)
- Test suite and verification scripts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sepehr Ramezani
2026-04-25 15:01:47 +02:00
parent 2ba4fedfc8
commit 26bd096a06
1178 changed files with 136435 additions and 3047 deletions

View File

@@ -63,8 +63,8 @@ PLANS = {
},
PlanType.STARTER: {
"name": "Starter",
"price_monthly": 7.99,
"price_yearly": 76.70, # -20 %
"price_monthly": 9.00,
"price_yearly": 86.40, # -20 %
"docs_per_month": 50,
"max_pages_per_doc": 50,
"max_file_size_mb": 10,
@@ -89,13 +89,13 @@ PLANS = {
},
PlanType.PRO: {
"name": "Pro",
"price_monthly": 19.99,
"price_yearly": 191.90, # -20 %
"price_monthly": 19.00,
"price_yearly": 182.40, # -20 %
"docs_per_month": 200,
"max_pages_per_doc": 200,
"max_file_size_mb": 25,
"max_chars_per_month": 2_000_000,
"providers": ["google", "deepl", "openrouter"],
"providers": ["google", "google_cloud", "deepl", "openrouter"],
"ai_model_essential": "deepseek/deepseek-v3.2",
"features": [
"200 documents / mois",
@@ -119,13 +119,13 @@ PLANS = {
},
PlanType.BUSINESS: {
"name": "Business",
"price_monthly": 49.99,
"price_yearly": 479.90, # -20 %
"price_monthly": 49.00,
"price_yearly": 470.40, # -20 %
"docs_per_month": 1000,
"max_pages_per_doc": 500,
"max_file_size_mb": 50,
"max_chars_per_month": 10_000_000,
"providers": ["google", "deepl", "openrouter", "openrouter_premium", "openai", "zai"],
"providers": ["google", "google_cloud", "deepl", "openrouter", "openrouter_premium", "openai", "zai"],
"ai_model_essential": "deepseek/deepseek-v3.2",
"ai_model_premium": "anthropic/claude-3.5-haiku",
"features": [
@@ -161,7 +161,7 @@ PLANS = {
"max_pages_per_doc": -1,
"max_file_size_mb": -1,
"max_chars_per_month": -1,
"providers": ["google", "deepl", "openrouter", "openrouter_premium", "openai", "zai", "custom"],
"providers": ["google", "google_cloud", "deepl", "openrouter", "openrouter_premium", "openai", "zai", "custom"],
"features": [
"Documents illimités",
"Tous les modèles IA (GPT-5, Claude Opus 4.6...)",
@@ -209,6 +209,7 @@ class User(BaseModel):
stripe_customer_id: Optional[str] = None
stripe_subscription_id: Optional[str] = None
subscription_ends_at: Optional[datetime] = None
cancel_at_period_end: bool = False
# Usage tracking
docs_translated_this_month: int = 0
@@ -265,6 +266,8 @@ class UserResponse(BaseModel):
plan: PlanType
tier: PlanType
subscription_status: SubscriptionStatus
subscription_ends_at: Optional[datetime] = None
cancel_at_period_end: bool = False
docs_translated_this_month: int
pages_translated_this_month: int
api_calls_this_month: int