86 lines
2.6 KiB
Markdown
86 lines
2.6 KiB
Markdown
# 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
|