Compare commits
2 Commits
916f6510d8
...
515fcd3163
Author | SHA1 | Date | |
---|---|---|---|
515fcd3163 | |||
a8ad4d18e9 |
127
README.md
Normal file
127
README.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# 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
|
||||
|
||||
## Projektstruktur
|
||||
```
|
||||
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)
|
||||
data/words_de_5.txt # generierte Wortliste
|
||||
data/words_de_5_sources.json # Wort→Quellen (ot/wf)
|
||||
Dockerfile # Produktionsimage (Gunicorn)
|
||||
requirements.txt # Python‑Abhängigkeiten
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Für Sysadmins (Betrieb)
|
||||
|
||||
### 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/`
|
||||
|
||||
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
|
||||
- OpenThesaurus Daten gemäß deren Lizenz (siehe Kopf von `data/openthesaurus.txt`)
|
||||
- wordfreq Python‑Paket gemäß dessen Lizenz
|
||||
- Eigenes Projekt: (bitte ggf. Lizenz ergänzen)
|
31
static/favicon.svg
Normal file
31
static/favicon.svg
Normal file
@@ -0,0 +1,31 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="Wordle‑Cheater Favicon">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#111827" />
|
||||
<stop offset="100%" stop-color="#0b1220" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- Hintergrund -->
|
||||
<rect x="1" y="1" width="62" height="62" rx="12" ry="12" fill="url(#bg)" stroke="#000" stroke-opacity=".15"/>
|
||||
|
||||
<!-- 5 Kacheln (Wordle-inspiriert) -->
|
||||
<!-- Zentriert: Kachelgröße 8, Abstand 3 → Breite 52, Start x=6 -->
|
||||
<g transform="translate(6, 22)">
|
||||
<rect width="8" height="8" rx="1.5" fill="#10B981" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="11" width="8" height="8" rx="1.5" fill="#F59E0B" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="22" width="8" height="8" rx="1.5" fill="#6B7280" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="33" width="8" height="8" rx="1.5" fill="#22C55E" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="44" width="8" height="8" rx="1.5" fill="#FBBF24" stroke="#000" stroke-opacity=".2"/>
|
||||
|
||||
<!-- zweite Reihe für mehr Quadratik/Balance -->
|
||||
<rect y="11" width="8" height="8" rx="1.5" fill="#0EA5E9" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="11" y="11" width="8" height="8" rx="1.5" fill="#A78BFA" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="22" y="11" width="8" height="8" rx="1.5" fill="#F472B6" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="33" y="11" width="8" height="8" rx="1.5" fill="#34D399" stroke="#000" stroke-opacity=".2"/>
|
||||
<rect x="44" y="11" width="8" height="8" rx="1.5" fill="#FCA5A5" stroke="#000" stroke-opacity=".2"/>
|
||||
</g>
|
||||
|
||||
<!-- dezente Glanzfläche -->
|
||||
<path d="M12,6 h40 a10,10 0 0 1 10,10 v2 H2 v-2 A10,10 0 0 1 12,6 z" fill="#fff" fill-opacity=".06"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
@@ -4,6 +4,17 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Wordle‑Cheater (DE)</title>
|
||||
<meta name="description" content="Wordle‑Cheater: Finde deutsche 5‑Buchstaben‑Wörter anhand bekannter Buchstaben und Positionen. Quellen: OpenThesaurus und wordfreq." />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<link rel="canonical" href="{{ request.url_root }}" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:title" content="Wordle‑Cheater (DE)" />
|
||||
<meta property="og:description" content="Finde deutsche 5‑Buchstaben‑Wörter mit Positions- und Buchstabenfiltern. Quellen: OpenThesaurus & wordfreq." />
|
||||
<meta property="og:url" content="{{ request.url_root }}" />
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta name="twitter:title" content="Wordle‑Cheater (DE)" />
|
||||
<meta name="twitter:description" content="Finde deutsche 5‑Buchstaben‑Wörter mit Positions- und Buchstabenfiltern. Quellen: OpenThesaurus & wordfreq." />
|
||||
<link rel="icon" type="image/svg+xml" href="{{ url_for('static', filename='favicon.svg') }}" />
|
||||
<style>
|
||||
body { font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; margin: 2rem; }
|
||||
.container { max-width: 800px; margin: 0 auto; }
|
||||
|
Reference in New Issue
Block a user