# Schachclub Lambsheim – Webseite + Admin-Backend

Komplette Next.js-Version mit den beiden bereitgestellten Vereinsbildern:

- `public/logo.jpg` = Vereinswappen
- `public/hero-schachbrett.jpg` = Hero-Hintergrund
- Hauptfarbe `#1576BB`
- Akzentfarbe `#FFF1E6`
- responsive und barrierearme Grundstruktur
- `/admin` ist **nicht** in der öffentlichen Navigation verlinkt
- PostgreSQL + Prisma
- Termine, Beiträge, Trainingszeiten und Mannschaftsspieler im Backend pflegbar
- zwei feste Admins `Admin1` und `Admin2`
- Passwörter als bcrypt-Hashes, niemals Klartext in der Datenbank
- DWZ-Synchronisation über die öffentliche REST-Schnittstelle des Deutschen Schachbundes

## Installation

1. Im Projektordner:

```bash
npm install
```

2. `.env.example` nach `.env` kopieren.

Die beiden Initialpasswörter werden ausschließlich lokal über die `.env` gesetzt. Wenn du für deinen ersten lokalen Test wirklich `123` verwenden möchtest, trägst du das nur in deiner lokalen `.env` ein. Diese Datei gehört **nicht** ins Git-Repository. `.env` ist bereits in `.gitignore`.
Vor der echten Veröffentlichung solltest du danach unter `/admin/passwoerter` starke Passwörter setzen.

3. PostgreSQL starten. Mit Docker:

```bash
docker compose up -d
```

4. Datenbank vorbereiten:

```bash
npm run db:generate
npm run db:push
npm run db:seed
```

5. Webseite starten:

```bash
npm run dev
```

Öffentlich:
`http://localhost:3000`

Admin:
`http://localhost:3000/admin`

## Admin-Funktionen

### Termine
Eintragen und bearbeiten:
- Titel
- Kategorie, z. B. Jugendtraining, Spielabend, Mannschaftskampf
- Datum + Uhrzeit
- Ort
- optionale Beschreibung
- veröffentlicht / unveröffentlicht

Wenn eine Beschreibung existiert, führt der Termin auf eine eigene Detailseite.

### Aktuelles
Eintragen und bearbeiten:
- Kategorie
- Datum
- Autor
- Überschrift
- Vorschautext
- langer Artikeltext
- Titelbild
- mehrere zusätzliche Bilder
- veröffentlicht / unveröffentlicht

Beiträge können geändert und gelöscht werden.

### Trainingszeiten
Jugendtraining und Spielabend liegen in der Datenbank und können im Admin-Bereich geändert werden. Die Startseite und die Trainingsseite übernehmen die Änderungen automatisch.

### Admin-Passwörter
Es existieren nur `Admin1` und `Admin2`. Jeder angemeldete Admin kann das Passwort für beide Konten setzen. Neue Passwörter müssen mindestens 10 Zeichen lang sein und werden mit bcrypt gehasht.

## DWZ-Automatik

SC 1997 Lambsheim hat die Vereinskennziffer **83210**.

Das Projekt verwendet die öffentlich zugängliche DSB-REST-Schnittstelle:

`https://schachde-apps.liga.nu/dsbwertungsportal/rs/dwz/dwzliste/persons`

Im Admin-Bereich unter `Mannschaften / DWZ` werden Spieler mit Mannschaft, Brett, Vor- und Nachname angelegt. Optional kann die `nuLigaPersonId` eingetragen werden; das macht die Zuordnung eindeutig.

- Button: `DWZ jetzt synchronisieren`
- zusätzlich: `/api/cron/dwz`
- `vercel.json` enthält einen täglichen Cron um 05:15 Uhr
- dafür `CRON_SECRET` in der Hosting-Umgebung setzen

## Wichtiger Hinweis zu Bild-Uploads

Der eingebaute Upload speichert Dateien unter `public/uploads`.
Das ist für lokale Entwicklung und einen klassischen persistenten Node/VPS-Server geeignet.

Bei serverlosen Hostern wie Vercel ist das Dateisystem nicht dauerhaft beschreibbar. Wenn du dort hosten möchtest, sollten wir für Bilder anschließend z. B. Vercel Blob, Cloudflare R2 oder S3 anbinden. Datenbank und Admin-Formulare können dabei praktisch gleich bleiben.

## Vor Veröffentlichung noch erledigen

- echte Vorstandsangaben einsetzen
- Satzung einsetzen
- Impressum rechtlich prüfen
- Datenschutzerklärung an Hosting/Datenbank/Uploads anpassen
- starke Admin-Passwörter setzen
- `CRON_SECRET` setzen
- Datenbank-Backups konfigurieren
