# Wordle‑Cheater (DE)

Hilfs‑Web‑App für deutsche Wordle‑Rätsel. Nutzer geben bekannte Buchstaben/Positionen an, zusätzlich enthaltene und ausgeschlossene Buchstaben. Die App schlägt passende 5‑Buchstaben‑Wörter vor und zeigt die jeweilige Quelle (OT = OpenThesaurus, WF = wordfreq).

## Features

- Filter nach Positionen (1–5), enthaltenen und ausgeschlossenen Buchstaben
- Deutsche Wortliste (nur 5 Buchstaben), aus OpenThesaurus und wordfreq gemerged
- Quellen‑Badges je Treffer (OT/WF)
- Zugängliche UI (A11y: Fieldset/Legend, ARIA‑Hinweise, Skip‑Link, semantische Liste)
- SEO‑Metas (Description, Canonical, Open Graph, Twitter)
- Docker‑Image mit Gunicorn

## Demo

![Screenshot](./screenshot.png)

Wordle-Cheater live bei [https://wh.elpatron.me](https://wh.elpatron.me).


## Projektstruktur

```text
wordle-helper/
├── app.py                        # Flask‑App
├── scripts/
│   └── generate_wordlist.py      # Generator für Wortliste + Quellen‑JSON
├── templates/
│   └── index.html                # UI (Jinja2‑Template)
├── static/
│   └── favicon.svg               # Favicon (SVG)
├── data/
│   ├── openthesaurus.txt         # Quelle OpenThesaurus (Text)
│   ├── words_de_5.txt            # generierte Wortliste
│   └── words_de_5_sources.json   # Wort→Quellen (ot/wf)
├── Dockerfile                    # Produktionsimage (Gunicorn)
├── requirements.txt              # Python‑Abhängigkeiten

```

## Für Sysadmins (Betrieb)

### Environment-Variablen

Für das Admin-Dashboard müssen folgende Variablen gesetzt werden:

```bash
# Flask Secret Key (für Sessions)
export FLASK_SECRET_KEY="your-super-secret-key-change-this-in-production"

# Admin-Passwort für das Statistik-Dashboard
export ADMIN_PASSWORD="your-secure-admin-password"
```

### Docker (empfohlen)

- Build:

```bash
docker build -t wordle-cheater .
```

- Run (Port 8000):

```bash
docker run --rm -p 8000:8000 wordle-cheater
```

- Health‑Check (lokal): `http://localhost:8000/`
- Admin‑Dashboard: `http://localhost:8000/stats` (passwortgeschützt)

Hinweise:

- Das Image generiert die Wortliste beim Build. Wird `data/openthesaurus.txt` aktualisiert, Image neu bauen.
- Gunicorn startet mit 3 Worker (`gthread`, 2 Threads). Passen Sie Worker/Threads an Ihre CPU an.
- Hinter einem Reverse Proxy (z. B. Nginx) betreiben; Beispiel:

```nginx
location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
```

### Ohne Docker (Service)

- Python 3.12 bereitstellen
- Virtuelle Umgebung erstellen, Abhängigkeiten installieren (siehe Entwickler‑Setup)
- Start per Gunicorn:

```bash
gunicorn -w 3 -k gthread --threads 2 -b 0.0.0.0:8000 app:app
```

---

## Für Entwickler (Setup & Workflow)

### Voraussetzungen

- Python 3.12
- Windows/PowerShell oder Linux/macOS Terminal

### Lokale Installation

Windows PowerShell (Projektwurzel, `.venv`):

```powershell
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt --disable-pip-version-check
```

Linux/macOS:

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt --disable-pip-version-check
```

### Wortliste generieren/aktualisieren

- Quelle: `data/openthesaurus.txt` (optional; wenn fehlt, wird nur wordfreq genutzt)
- Generator erzeugt:
  - `data/words_de_5.txt`
  - `data/words_de_5_sources.json`

Windows PowerShell:

```powershell
.\.venv\Scripts\python.exe scripts\generate_wordlist.py
```

Linux/macOS:

```bash
python scripts/generate_wordlist.py
```

### Entwicklung starten (Debug‑Server)

Windows PowerShell:

```powershell
.\.venv\Scripts\python.exe app.py
```

Linux/macOS:

```bash
python app.py
```

- Browser: `http://127.0.0.1:5000`

### Docker während der Entwicklung

- Neu bauen, wenn sich `data/openthesaurus.txt` oder der Code ändert:

```bash
docker build -t wordle-cheater . && docker run --rm -p 8000:8000 wordle-cheater
```

### Coding‑Hinweise

- Nur 5‑Buchstaben‑Wörter werden berücksichtigt (Regex inkl. ä/ö/ü/ß)
- UI ist serverseitig gerendert (Jinja2)
- Bei jeder Anfrage wird die aktuelle Wortliste geladen; nach Generierung ist kein Neustart nötig

### Bekannte Einschränkungen

- Deutsche Morphologie (Pluralbildung etc.) wird nicht generiert, nur was in den Quellen vorhanden ist
- Keine Benutzer‑Accounts, keine Persistenz über die Wortliste hinaus

## Lizenz & Credits

- Projektlizenz: MIT (siehe `LICENSE`)
- Datenquellen/Lizenzen:
  - OpenThesaurus Daten gemäß deren Lizenz (siehe Kopf von `data/openthesaurus.txt`)
  - wordfreq Python‑Paket gemäß dessen Lizenz
