- Rename planta module to plants everywhere (routes, modules, API, branding, i18n, docker, docs, shared packages) - Fix package name collisions: @mana/credits-service, @mana/subscriptions-service (unblocks turbo) - Extract layout composables: use-ai-tier-items, use-sync-status-items, RouteTierGate (layout 1345→1015 lines) - Create shared DB pool for apps/api (lib/db.ts), migrate 5 modules - Add automations module queries.ts with useAllAutomations/useEnabledAutomations - Remove debug console.log statements from production code - Rename storage display name: Ablage → Speicher Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
19 KiB
Externe Dienste & Self-Hosting-Analyse
Dieser Bericht dokumentiert alle externen Dienste im Mana Monorepo und evaluiert Self-Hosting-Alternativen für den Mac Mini Server (M4, 16GB RAM).
Stand: Januar 2026
Inhaltsverzeichnis
- Übersicht
- Aktuelle externe Dienste
- Self-Hosting-Status
- Self-Hosting-Möglichkeiten
- Kosten-Analyse
- Implementierungs-Roadmap
- Nicht ersetzbare Dienste
Übersicht
┌─────────────────────────────────────────────────────────────────────────────┐
│ MANA EXTERNAL SERVICES MAP │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ AI SERVICES │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Replicate│ │OpenRouter│ │ Gemini │ │ Ollama │ │Azure OAPI│ │ │
│ │ │ (Picture)│ │ (Chat) │ │(Planta, │ │ (Chat) │ │ (Chat) │ │ │
│ │ │ CLOUD │ │ CLOUD │ │Nutriphi) │ │ LOCAL │ │ CLOUD │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ INFRASTRUCTURE │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │PostgreSQL│ │ Redis │ │ MinIO │ │Hetzner S3│ │ │
│ │ │ LOCAL │ │ LOCAL │ │ LOCAL │ │ CLOUD │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ AUTH & PAYMENT │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │Better │ │ Stripe │ │ Google │ │ │
│ │ │Auth │ │ Payments │ │ OAuth │ │ │
│ │ │ LOCAL │ │ CLOUD │ │ CLOUD │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ HOSTING & CDN │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │Cloudflare│ │Cloudflare│ │ Mac Mini │ │ │
│ │ │ Pages │ │ Tunnel │ │ Server │ │ │
│ │ │ FREE │ │ FREE │ │ LOCAL │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Legende: LOCAL = Self-hosted | CLOUD = Externer Dienst | FREE = Kostenlos
Aktuelle externe Dienste
1. AI-Dienste
| Dienst | App(s) | Zweck | API-Key Variable | Geschätzte Kosten |
|---|---|---|---|---|
| Replicate | Picture | Bildgenerierung (Flux, SDXL, SD) | PICTURE_REPLICATE_API_TOKEN |
€20-100/Monat |
| OpenRouter | Chat | Cloud LLMs (Claude, GPT, Llama, DeepSeek) | OPENROUTER_API_KEY |
€10-50/Monat |
| Google Gemini | Planta, Nutriphi, Cards | Vision & Text AI | GEMINI_API_KEY, PLANTA_GEMINI_API_KEY |
€5-20/Monat |
| Azure OpenAI | Chat (Docker) | GPT-4o via Azure | AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY |
Optional |
| Anthropic | Mana Games | Claude API | MANA_GAMES_ANTHROPIC_API_KEY |
Optional |
| Ollama | Chat | Lokale LLMs (Gemma 3, Llama) | OLLAMA_URL |
✅ Bereits lokal |
2. Infrastruktur
| Dienst | Typ | Port | Status | Details |
|---|---|---|---|---|
| PostgreSQL | Datenbank | 5432 | ✅ Lokal | Docker: postgres:16-alpine |
| Redis | Cache/Sessions | 6379 | ✅ Lokal | Docker: redis:7-alpine |
| MinIO | Object Storage | 9000/9001 | ✅ Lokal | S3-kompatibel |
| Hetzner S3 | Cloud Storage | - | Cloud | Production (~€5/TB/Monat) |
| Supabase | DB/Auth (Legacy) | - | Cloud | Nur noch Legacy-Features |
Konfigurierte MinIO Buckets:
picture-storage- AI-generierte Bilderchat-storage- User-Uploadscards-storage- Card/Deck Assetsplants-storage- Pflanzenfotosnutriphi-storage- Mahlzeitenfotospresi-storage- Präsentationsfoliencalendar-storage- Kalender-Anhängecontacts-storage- Kontakt-Avatarestorage-storage- Cloud Drive Dateien
3. Auth & Payment
| Dienst | Zweck | Status | Ersetzbar? |
|---|---|---|---|
| Better Auth | Zentrale Authentifizierung (JWT/EdDSA) | ✅ Self-hosted | - |
| Stripe | Payment Processing, Subscriptions | Cloud | ❌ Nein |
| Google OAuth | Social Login (Contacts Import) | Cloud | ❌ Nein |
4. Email
| Dienst | Zweck | Status |
|---|---|---|
| Nodemailer | SMTP-basierter Email-Versand | Braucht SMTP-Server |
Verwendungszwecke:
- Email-Verifizierung (Registrierung)
- Passwort-Reset
- Einladungen
- Benachrichtigungen
5. Hosting & CDN
| Dienst | Zweck | Kosten |
|---|---|---|
| Cloudflare Pages | Landing Pages Hosting | Kostenlos |
| Cloudflare Tunnel | SSH-Zugang zu Mac Mini | Kostenlos |
| Mac Mini Server | Production Backend | Hardware vorhanden |
Gehostete Landing Pages:
chat-landing.pages.devpicture-landing.pages.devmana-landing.pages.devcards-landing.pages.devzitare-landing.pages.dev
6. Monitoring
| Dienst | Zweck | Status |
|---|---|---|
| Prometheus | Metrics Collection | In mana-auth integriert |
| Grafana | Dashboards | Konfigurierbar |
| Winston | Application Logging | In allen NestJS Services |
| Umami | Web Analytics | UMAMI_APP_SECRET |
Self-Hosting-Status
✅ Bereits selbst gehostet
| Service | Technologie | Port | RAM-Verbrauch |
|---|---|---|---|
| PostgreSQL | Docker | 5432 | ~1GB |
| Redis | Docker | 6379 | ~256MB |
| MinIO | Docker | 9000/9001 | ~512MB |
| Ollama | Native | 11434 | ~4-8GB (je nach Modell) |
| mana-auth | Docker | 3001 | ~512MB |
| mana-stt | Native Python | 3020 | ~2-4GB |
| Chat Backend | Docker | 3002 | ~512MB |
⚠️ Noch externe Abhängigkeiten
| Service | Aktueller Anbieter | Self-Hosting möglich? |
|---|---|---|
| Bildgenerierung | Replicate | ✅ Ja (ComfyUI) |
| Vision AI | Google Gemini | ✅ Ja (LLaVA) |
| Cloud LLMs | OpenRouter | ✅ Teilweise (Ollama) |
| Email-Versand | Nodemailer + ? | ✅ Ja (Postal/useSend) |
| Payments | Stripe | ❌ Nein |
| Cloud Storage | Hetzner S3 | ⚠️ Möglich, aber nicht empfohlen |
Self-Hosting-Möglichkeiten
1. Bildgenerierung (Replicate-Ersatz)
Empfehlung: ComfyUI
ComfyUI ist die beste Open-Source-Alternative zu Replicate für Bildgenerierung.
Vorteile:
- Volle Kontrolle über Modelle
- Keine API-Kosten
- Offline-fähig
- Erweiterbar mit Custom Nodes
Hardware-Anforderungen (Mac Mini M4, 16GB):
| Modell | VRAM/RAM | Qualität | Geschwindigkeit |
|---|---|---|---|
| SDXL | 6.5GB | Sehr gut | ~2-3 Min/Bild |
| SD 1.5 | 4GB | Gut | ~1 Min/Bild |
| Flux.1 Schnell | 12GB | Exzellent | ~3-4 Min/Bild |
| Flux.1 Dev | 24GB+ | Beste | ❌ Nicht möglich |
Installation:
# ComfyUI installieren
cd ~/projects
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# Python Environment
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# SDXL Modell herunterladen
mkdir -p models/checkpoints
cd models/checkpoints
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
# Server starten (Netzwerkzugriff)
cd ~/projects/ComfyUI
python main.py --listen 0.0.0.0 --port 8188
API-Integration:
ComfyUI bietet eine REST API für programmatische Nutzung:
// Beispiel: ComfyUI API Call
const response = await fetch('http://localhost:8188/prompt', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: workflowJSON,
client_id: 'mana'
})
});
Ressourcen:
2. Vision AI (Gemini-Ersatz)
Empfehlung: LLaVA via Ollama
LLaVA (Large Language and Vision Assistant) kann Gemini Vision für die meisten Use-Cases ersetzen.
Use-Cases in Mana:
- Planta: Pflanzenidentifikation
- Nutriphi: Lebensmittelerkennung, Nährwertschätzung
Installation:
# LLaVA 13B (beste Qualität für 16GB RAM)
ollama pull llava:13b
# Oder LLaVA 7B (schneller, weniger RAM)
ollama pull llava:7b
Qualitätsvergleich:
| Modell | RAM | Genauigkeit vs Gemini | Geschwindigkeit |
|---|---|---|---|
| LLaVA 13B | ~10GB | ~80% | Mittel |
| LLaVA 7B | ~6GB | ~70% | Schnell |
| Gemini Vision | Cloud | 100% (Referenz) | Sehr schnell |
API-Nutzung:
# Bild analysieren
curl http://localhost:11434/api/generate -d '{
"model": "llava:13b",
"prompt": "Was ist auf diesem Bild zu sehen?",
"images": ["base64-encoded-image"]
}'
Alternative: Qwen2-VL
Für bessere OCR und Dokumentenverarbeitung:
ollama pull qwen2-vl:7b
3. Email-Service
Option A: Postal (Empfohlen für hohe Volumen)
Postal ist ein vollständiger Mail Transfer Agent mit Web-UI.
Features:
- REST API
- Delivery Tracking
- Bounce Handling
- Webhooks
- Multi-Domain Support
Installation (Docker):
# docker-compose.postal.yml
version: '3'
services:
postal:
image: ghcr.io/postalserver/postal:latest
ports:
- "25:25"
- "5000:5000"
volumes:
- postal-data:/data
environment:
- POSTAL_WEB_HOSTNAME=mail.mana.how
Ressourcen:
Option B: useSend (Modern, AWS SES Backend)
Für einfachere Setups mit AWS SES als Delivery-Backend.
Features:
- Open Source
- Self-hostable
- AWS SES für Delivery (günstig: ~$0.10/1000 Emails)
- Dashboard für Analytics
Ressourcen:
Option C: Mailpit (Nur Development)
Für lokale Entwicklung ohne echten Email-Versand:
docker run -d --name mailpit \
-p 1025:1025 \
-p 8025:8025 \
axllent/mailpit
Web-UI: http://localhost:8025
Kosten-Analyse
Aktuelle monatliche Kosten (geschätzt)
| Dienst | Nutzung | Kosten/Monat |
|---|---|---|
| Replicate | ~500 Bilder | €20-50 |
| OpenRouter | ~1M Tokens | €10-30 |
| Google Gemini | ~10K Requests | €5-15 |
| Hetzner S3 | ~50GB | €5 |
| Cloudflare | Unbegrenzt | €0 |
| Gesamt | €40-100 |
Nach vollständigem Self-Hosting
| Dienst | Lösung | Kosten/Monat |
|---|---|---|
| Bildgenerierung | ComfyUI (lokal) | €0 |
| Vision AI | LLaVA (lokal) | €0 |
| LLMs | Ollama (lokal) | €0 |
| Postal + SES | ~€2 | |
| Storage | Hetzner S3 (behalten) | €5 |
| Strom | Mac Mini (~50W) | ~€5 |
| Gesamt | ~€12 |
Ersparnis
| Szenario | Monatlich | Jährlich |
|---|---|---|
| Aktuell | €40-100 | €480-1200 |
| Self-Hosted | ~€12 | ~€144 |
| Ersparnis | €28-88 | €336-1056 |
Implementierungs-Roadmap
Phase 1: Sofort umsetzbar (0-2 Wochen)
| Aufgabe | Priorität | Aufwand | Ersparnis |
|---|---|---|---|
| ComfyUI installieren | Hoch | 2h | €20-50/Monat |
| LLaVA für Vision | Hoch | 1h | €5-15/Monat |
| Mailpit für Dev | Mittel | 30min | - |
Skript für Phase 1:
#!/bin/bash
# scripts/mac-mini/setup-self-hosted-ai.sh
echo "=== Installing ComfyUI ==="
cd ~/projects
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
echo "=== Downloading SDXL ==="
mkdir -p models/checkpoints
cd models/checkpoints
wget -q https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
echo "=== Installing LLaVA ==="
ollama pull llava:13b
echo "=== Done! ==="
echo "Start ComfyUI: cd ~/projects/ComfyUI && python main.py --listen 0.0.0.0 --port 8188"
echo "LLaVA ready at: http://localhost:11434"
Phase 2: Bei Bedarf (2-4 Wochen)
| Aufgabe | Auslöser | Aufwand |
|---|---|---|
| Postal für Emails | Email-Volumen > 1000/Monat | 4h |
| Umami self-hosted | Analytics benötigt | 2h |
| Mehr LLM-Modelle | Qualitätsanforderungen | 1h |
Phase 3: Hardware-Upgrade nötig
| Aufgabe | Anforderung | Hardware |
|---|---|---|
| Flux.1 Dev | 24GB+ RAM | Mac Mini M4 Pro (32GB+) |
| Größere LLMs (70B) | 48GB+ RAM | Mac Studio (64GB+) |
| Multi-GPU Setup | Parallel Inference | Externe GPU |
Nicht ersetzbare Dienste
Diese Dienste können/sollten nicht selbst gehostet werden:
| Dienst | Grund |
|---|---|
| Stripe | PCI-DSS Compliance, Haftung, Aufwand |
| Google OAuth | Benötigt Google API, kein Ersatz |
| Cloudflare | DDoS-Schutz, CDN nicht selbst replizierbar |
| Hetzner S3 | Günstiger als eigene Storage-Infra, Redundanz |
Anhang: Environment Variables Übersicht
AI-Dienste
# Replicate (Picture App)
PICTURE_REPLICATE_API_TOKEN=r8_xxx
# OpenRouter (Chat)
OPENROUTER_API_KEY=sk-or-v1-xxx
# Google Gemini (Planta, Nutriphi, Cards)
GEMINI_API_KEY=AIza...
PLANTA_GEMINI_API_KEY=AIza...
NUTRIPHI_GEMINI_API_KEY=AIza...
MANA_GAMES_GOOGLE_GENAI_API_KEY=AIza...
# Ollama (Local - bereits konfiguriert)
OLLAMA_URL=http://localhost:11434
OLLAMA_TIMEOUT=120000
# Azure OpenAI (Optional)
AZURE_OPENAI_ENDPOINT=https://xxx.openai.azure.com
AZURE_OPENAI_API_KEY=xxx
Infrastruktur
# PostgreSQL
DATABASE_URL=postgresql://mana:devpassword@localhost:5432/{app}
# Redis
REDIS_URL=redis://localhost:6379
# MinIO (Local)
S3_ENDPOINT=http://localhost:9000
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=minioadmin
# Hetzner S3 (Production)
S3_ENDPOINT=https://fsn1.your-objectstorage.com
S3_REGION=fsn1
Auth & Payment
# Mana Auth
MANA_AUTH_URL=http://localhost:3001
# Stripe
STRIPE_SECRET_KEY=sk_live_xxx
STRIPE_PUBLISHABLE_KEY=pk_live_xxx
STRIPE_WEBHOOK_SECRET=whsec_xxx
# Google OAuth (Contacts)
CONTACTS_GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com
CONTACTS_GOOGLE_CLIENT_SECRET=xxx
Weiterführende Dokumentation
- LOCAL_DEVELOPMENT.md - Lokale Entwicklungsumgebung
- LOCAL_LLM_MODELS.md - Verfügbare lokale LLM-Modelle
- LOCAL_STT_MODELS.md - Speech-to-Text Modelle
- MAC_MINI_SERVER.md - Mac Mini Server Dokumentation
- SELF-HOSTING-GUIDE.md - VPS Self-Hosting Guide
- DOCKER_GUIDE.md - Docker Konfiguration
Zuletzt aktualisiert: Januar 2026