Files
2026-10-01 20:23:20 +02:00

156 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MOBEA — Das Startup, das jeden Tag ein anderes Startup ist
Tägliche KI-Satire. Jeden Tag eine neue absurde Fake-Firma — todernst verkauft.
[🌐 mobea.de](https://mobea.de/)
---
## Das Konzept
1. AI würfelt 1–2 Themen aus dem Pool (Buzzwords, Esoterik, Pet-Tech,…)
2. **OpenRouter** generiert Landing-Page-Inhalte (Pitch, Features, Preise, Testimonials, FAQ)
3. Optional: **Pixazo SDXL** erzeugt ein Hero-Bild
4. **Jinja2** rendert `public/index.html` + Archiv-Eintrag
5. **nginx** liefert statisch aus — alle CTAs führen zu `/echt-jetzt/` (Satire-Disclaimer)
> 📖 [SOUL.md](SOUL.md) — Vollständige Vision, Ton und Design-Regeln
## Projektstruktur
```
/
├── compose.yml # nginx + Generator (Production)
├── compose.dev.yml # Lokale Dev-Umgebung (kein Traefik)
├── nginx.conf # nginx Konfiguration (JSON logging, security)
├── generator/
│ ├── config.py # Einstellungen aus Environment-Variablen
│ ├── generate.py # CLI-Entry-Point für manuelles/backfill
│ ├── pipeline.py # Pipeline-Orchestrator (LLM → HTML → Archive)
│ ├── llm.py # OpenRouter API mit retries + hedging
│ ├── images.py # Responsive Hero-Image Pipeline (PIL)
│ ├── topics.py # Themen-Pool & Selection
│ ├── templates.py # Jinja2 Rendering & Template Utilities
│ ├── feed.py # Atom Feed Generator
│ ├── share.py # Share Card SVG Generator
│ ├── health.py # Health Check Status
│ ├── entrypoint.sh # Cron-Loop (prodcution)
│ ├── Dockerfile # Multi-stage build (python:alpine)
│ └── templates/
│ ├── startup.html.j2 # Täglich generierte Landing Page
│ ├── archiv.html.j2 # Archiv-Übersicht
│ └── _head_common.j2 # Favicon, OG/Twitter tags
├── public/ # Webroot (generiert, gitignored)
│ ├── echt-jetzt/ # Satire-Disclaimer (statisch, im Repo)
│ └── index.html # Heute (generiert)
├── data/ # archive.json (generiert, gitignored)
└── generate_health.py # Health.json generieren
```
## Schnelleinstieg
### Voraussetzungen
- Docker + Docker Compose
- Optional lokal: Python 3.12+, venv
### API-Keys
```bash
cp .env.example .env
# Editor auf → Keys eintragen
```
| Variable | Pflicht | Zweck |
|----------|---------|-------|
| `OPENROUTER_API_KEY` | ✅ | Text-Generierung |
| `OPENROUTER_MODEL` | | z.B. `openai/gpt-4o-mini` |
| `PIXAZO_API_KEY` | | Hero-Bilder (optional) |
### Einmal generator starten
```bash
cd generator
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
SITE_DIR=../public DATA_DIR=../data python generate.py
```
Output: `public/index.html` + `public/archiv/YYYY-MM-DD.html`
### Lokal dev-en (einzeln)
```bash
# Generator ausführen
SITE_DIR=../public DATA_DIR=../data python generator/generate.py
# nginx für statische Ausgabe
docker run --rm -p 8081:80 \
-v "$(pwd)/public:/usr/share/nginx/html:ro" \
-v "$(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro" \
nginx
# → http://localhost:8081
```
### Kompletter Stack (Docker Compose)
```bash
# Lokal (kein Traefik nötig)
docker compose -f compose.yml -f compose.dev.yml up -d --build
# → http://localhost:8081
# Auf boka (Traefik aus compose.yml)
docker compose up -d --build
```
### Archive backfillen
```bash
cd generator
source .venv/bin/activate
python generate.py --backfill 2026-01-01 2026-01-07
```
## Deployment auf boka
```bash
ssh frank-schwenk.de
cd /home/frank/mobea.de
git pull
docker compose up -d --build
```
## Theming
5 visuelle Themes (deterministisch pro Tag gewürfelt):
| Theme | Accent | Vibe |
|-------|--------|------|
| **corporate** | `#2563eb` Blau | Clean SaaS, System-UI |
| **neon** | `#00f5d4` + `#a855f7` | Dark Cyber, Glow |
| **mystic** | `#d4a853` Gold | Dunkelviolet, Georgia |
| **brutalist** | `#ff0000` Rot | Schwarz-Weiß, Courier |
| **pastel** | `#f472b6` Pink | Soft Gradients, große Radien |
## Gesundheit
```bash
# Health-Status als JSON
curl -s http://localhost:8081/health
# Generator health generieren
python generate_health.py
# → public/health.json
```
## Non-Goals (Anti-Manifest)
- Kein echtes Startup, keine Leads, kein Impressum
- Kein Tracking/Analytics — Privacy by design
- Kein Engagement-Bait oder Newsletter-Tracking
- Keine Datenansammlung — nichts wird gespeichert außer dem Archiv
---
**Made with AI, satirized by humans.** [SOUL.md](SOUL.md) für Design-Regeln.