Files
mobea/README.md
T
Frank Schwenk b9ad7f0c40 docs: add VibeSoul context, SOUL.md, and README
Project character, agent rules, and run/deploy docs for mobea.de.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 11:52:00 +02:00

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

→ http://localhost:8080

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.