Project character, agent rules, and run/deploy docs for mobea.de. Co-authored-by: Cursor <cursoragent@cursor.com>
3.4 KiB
mobea.de
Tägliche Satire-Website — mobea.de
Das Startup, das jeden Tag ein anderes Startup ist.
Vision & Ton: SOUL.md
Was passiert hier?
Ein Python-Generator erfindet jeden Tag ein neues absurdes Startup (OpenRouter), rendert eine Landing Page (Jinja2) und legt optional ein Hero-Bild an (Pixazo SDXL). Ausgabe landet in public/; nginx liefert statisch aus. Alle Kauf-/Kontakt-Links führen zu /echt-jetzt/ — Satire-Disclaimer, kein echtes Produkt.
Projektstruktur
/
├── compose.yml # nginx + Generator (Produktion)
├── nginx.conf
├── generator/
│ ├── generate.py # Tages-Generator
│ ├── backfill.py # Archiv-Lücken nachfüllen
│ ├── topics.py # Themen-Pool
│ ├── templates/ # startup.html.j2, archiv.html.j2
│ └── Dockerfile
├── public/ # Webroot (teilweise generiert, siehe unten)
│ └── echt-jetzt/ # Fourth-Wall-Seite (im Repo)
└── data/ # archive.json (generiert, gitignored)
Voraussetzungen
- Docker + Docker Compose (Produktion)
- Optional lokal: Python 3.12+,
venv - API-Keys in
.env(Vorlage:.env.example)
| Variable | Zweck |
|---|---|
OPENROUTER_API_KEY |
Text-Generierung (Pflicht) |
OPENROUTER_MODEL |
z. B. openai/gpt-4o-mini |
PIXAZO_API_KEY |
Hero-Bild (optional) |
Lokale Entwicklung
Generator einmal ausführen
cp .env.example .env # Keys eintragen
cd generator
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
SITE_DIR=../public DATA_DIR=../data python generate.py
Der Generator läuft standardmäßig ab 05:00 UTC pro Tag; vorher wird eine bestehende Edition nicht überschrieben. Für erneutes Generieren am selben Tag: public/index.html und den heutigen Eintrag in data/archive.json entfernen.
Archiv backfillen
cd generator
source .venv/bin/activate
SITE_DIR=../public DATA_DIR=../data python backfill.py --from 2026-01-01 --to 2026-01-07
Statische Seite lokal ansehen
Nach einem Generator-Lauf (oder mit vorhandenem public/index.html):
docker run --rm -p 8080:80 \
-v "$(pwd)/public:/usr/share/nginx/html:ro" \
-v "$(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro" \
nginx
Mit Docker Compose (wie auf dem Server)
cp .env.example .env
docker compose up -d --build
Benötigt das externe Netzwerk traefik (auf boka vorhanden). Lokal ggf. nur den Generator-Container nutzen oder das Netzwerk einmal anlegen: docker network create traefik.
Deployment
Manuell per SSH auf boka — siehe auch INFRASTRUCTURE.md.
ssh frank-schwenk.de
cd /home/frank/mobea.de
git pull
docker compose up -d --build
Der Generator-Container versucht stündlich generate.py; ein Fehlschlag stoppt die Schleife nicht.
Was im Repo liegt vs. generiert wird
| Im Git | Generiert (gitignored) |
|---|---|
public/echt-jetzt/, Favicon, Manifest, robots.txt |
public/index.html |
generator/templates/, Python-Code |
public/archiv/ |
public/img/ |
|
data/archive.json |
Tests
Keine automatisierte Test-Suite. Nach UI-Änderungen: Generator-Lauf + Seite in Mobile-Breite (~390px) prüfen.