# Hördle Eine Web-App inspiriert von Heardle, bei der Nutzer täglich einen Song anhand kurzer Audio-Schnipsel erraten müssen. ## Features - **Tägliches Rätsel:** Jeden Tag ein neuer Song für alle Nutzer. - **Inkrementelle Hinweise:** Startet mit 2 Sekunden, dann 4s, 7s, 11s, 16s, 30s, bis 60s (7 Versuche). - **Admin Dashboard:** - Upload von MP3-Dateien. - Automatische Extraktion von ID3-Tags (Titel, Interpret). - Bearbeitung von Metadaten. - Sortierbare Song-Bibliothek (Titel, Interpret, Hinzugefügt am). - Play/Pause-Funktion zum Vorhören in der Bibliothek. - **Cover Art:** - Automatische Extraktion von Cover-Bildern aus MP3-Dateien. - Anzeige des Covers nach Spielende (Sieg/Niederlage). - Automatische Migration bestehender Songs. - **Teilen-Funktion:** Ergebnisse können als Emoji-Grid geteilt werden. - **PWA Support:** Installierbar als App auf Desktop und Mobilgeräten (Manifest & Icons). - **Persistenz:** Spielstatus wird lokal im Browser gespeichert. ## Tech Stack - **Framework:** Next.js 16 (App Router) - **Styling:** Vanilla CSS - **Datenbank:** SQLite (via Prisma ORM) - **Deployment:** Docker & Docker Compose ## Lokale Entwicklung 1. Abhängigkeiten installieren: ```bash npm install ``` 2. Datenbank initialisieren: ```bash npx prisma generate npx prisma db push ``` 3. **Optional: Cover-Bilder migrieren:** Falls MP3-Dateien ohne Cover in der Datenbank sind: ```bash node scripts/migrate-covers.mjs ``` 4. Entwicklungsserver starten: ```bash npm run dev ``` Die App läuft unter `http://localhost:3000`. ## Deployment mit Docker Das Projekt ist für den Betrieb mit Docker optimiert. 1. **Vorbereitung:** Kopiere die Beispiel-Konfiguration: ```bash cp docker-compose.example.yml docker-compose.yml ``` Passe ggf. das `ADMIN_PASSWORD` in der `docker-compose.yml` an. 2. **Starten:** ```bash docker compose up --build -d ``` Die App ist unter `http://localhost:3010` erreichbar (Port in `docker-compose.yml` konfiguriert). 3. **Daten-Persistenz:** - Die SQLite-Datenbank wird im Ordner `./data` gespeichert. - Hochgeladene Songs und Cover liegen in `./public/uploads`. - Beide Ordner werden als Docker Volumes eingebunden, sodass Daten auch bei Container-Neustarts erhalten bleiben. - Beim Start des Containers wird automatisch ein Migrations-Skript ausgeführt, das fehlende Cover-Bilder aus den MP3s extrahiert. 4. **Admin-Zugang:** - URL: `/admin` - Standard-Passwort: `admin123` (Bitte in `docker-compose.yml` ändern!) ## Lizenz MIT