Files
Freundebuch/README.md

95 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📖 Freundesbuch (digital)
Ein selbst gehostetes, digitales Freundschaftsbuch. Kein Benutzer-System nur ein
Admin-Passwort für dich, und pro Freund ein frei wählbares Freigabe-Passwort zum Teilen.
## Funktionen
- **Ein Passwort** für den Admin-Bereich (als SHA-256-Hash in `docker-compose.yml`, kein Klartext).
- Freunde anlegen jeder Freund ist ein eigener Ordner auf dem Server (`Name-zufallsID`).
- Jeder Freund hat ein **Profilbild** und einen **Steckbrief** (klassische Freundebuch-Felder).
- Beliebig viele **Blöcke** pro Freund: 🖼️ Bild, 📝 Text, 🎙️ Audio (MP3 o. ä.) alles wird
im jeweiligen Freundes-Ordner gespeichert.
- **Audio-Cover**: Beim Hochladen eines Liedes/einer Sprachnachricht kann optional ein eigenes
Cover-Bild mitgegeben werden. Wird keins hochgeladen, versucht die App automatisch ein in der
MP3 eingebettetes Cover (ID3-Tag) zu extrahieren und zu verwenden.
- **Freigabe-Link**: Für jeden Freund kannst du einen Link mit eigenem Passwort erzeugen.
Damit kann sich der Freund **nur** in seine eigene Seite einloggen und dort Inhalte
hinzufügen/bearbeiten. Die Freigabe kannst du jederzeit als Admin beenden.
- **Öffentliche URL für Freigabe-Links**: Läuft der Server hinter einem Reverse-Proxy, kannst
du im Admin-Bereich unter "Einstellungen" (oder per `PUBLIC_BASE_URL`-Env) eine öffentliche
Basis-URL hinterlegen. Freigabe-Links werden dann darauf basierend erzeugt statt auf der
lokalen Server-Adresse/IP.
- **Export & Import**: Einzelne Freunde oder das gesamte Freundesbuch lassen sich als ZIP
exportieren und wieder importieren (z. B. zum Umziehen auf einen anderen Server oder als
Backup). Der Import eines Freundes/Buchs legt dabei immer neue Einträge an; beim
Buch-Import kann optional vorher alles Bestehende gelöscht werden.
- **Freundesbuch-Ansicht**: verspieltes Scrapbook-Layout mit schräg angeordneten
Polaroid-Fotos, Washi-Tape-Optik usw. seitenweise durchblätterbar.
- **Automatisches Deckblatt**: Erste Seite im Viewer und im PDF, mit frei wählbarem Titel
(Admin → Einstellungen → "Titel des Freundesbuchs") und einer "sticker-gebombten" Foto-Collage
aus allen Profilbildern und Bild-Blöcken der Freunde.
- **Eigene Reihenfolge**: Im Admin-Bereich lässt sich die Reihenfolge der Freunde per Pfeil-Buttons
festlegen sie bestimmt die Seitenfolge im Freundesbuch (nach dem Deckblatt) sowie im PDF.
- **PDF-Export** des gesamten Freundesbuchs inkl. Deckblatt (serverseitig über Puppeteer/Chromium
gerendert; Fotos werden dabei automatisch verkleinert/komprimiert, damit auch viele/große
Bilder zuverlässig und schnell zu einem PDF werden).
## Setup
1. **Admin-Passwort festlegen** Hash erzeugen:
```bash
echo -n "DeinPasswort" | sha256sum
```
(macOS: `shasum -a 256`, Windows/PowerShell: `certutil -hashfile datei.txt SHA256` oder
ein Online-Tool deines Vertrauens wichtig ist nur SHA-256 in Kleinbuchstaben-Hex.)
Den Hash in `docker-compose.yml` bei `ADMIN_PASSWORD_HASH` eintragen.
⚠️ Der mitgelieferte Standard-Hash entspricht dem Passwort `aendern123`
bitte vor dem Livegang unbedingt ändern!
2. **Session-Secret ändern** `SESSION_SECRET` in `docker-compose.yml` durch eine lange,
zufällige Zeichenkette ersetzen (z. B. `openssl rand -hex 32`).
3. **Starten**:
```bash
docker compose up -d --build
```
Die Anwendung läuft danach auf `http://<server>:3000`.
4. **Reverse-Proxy / öffentliche URL (optional)**: Läuft der Server hinter einem Reverse-Proxy
(z. B. Nginx, Traefik, Caddy), trage entweder `PUBLIC_BASE_URL` in der `docker-compose.yml`
ein, oder setze die URL direkt im Admin-Bereich unter "Einstellungen" (`https://deine-domain.tld`,
ohne abschließenden Slash). Danach zeigen alle neu erzeugten Freigabe-Links auf diese Adresse
statt auf die lokale Server-IP.
5. Alle Daten (Freunde-Ordner, Fotos, Texte, Audios, Einstellungen) landen im lokalen Ordner
`./data`, der als Volume eingebunden ist so bleiben sie auch bei Container-Updates erhalten.
## Nutzung
- **/** Login mit dem Admin-Passwort.
- **/admin** Übersicht: Freunde anlegen, bearbeiten, Freigabe verwalten, löschen.
- **/friend/\<id\>** Freund bearbeiten (Profilbild, Steckbrief, Blöcke) für dich als Admin.
Ein "👀 Vorschau"-Button zeigt, wie die Seite später im Freundesbuch aussehen wird.
- **/share/\<id\>** der Link, den du deinem Freund gibst. Er meldet sich mit dem von dir
vergebenen Freigabe-Passwort an und kann **nur** dort etwas eintragen inklusive der
gleichen Vorschau-Funktion.
- **/book** die verspielte Freundesbuch-Ansicht mit Blätterfunktion und PDF-Export
(Button oben rechts).
- Im Admin-Bereich gibt es oben zwei Reiter: **Freunde** (`/admin`, Standardansicht) und
**Einstellungen & Sichern** (`/admin/settings`) mit dem Buch-Titel, der öffentlichen URL
sowie Export/Import für einzelne Freunde und das gesamte Buch.
## Hinweise
- Ordnerstruktur pro Freund: `data/friends/<name>-<zufalls-id>/`
mit `meta.json` (Steckbrief, Blöcke, Freigabe-Status) und Unterordner `uploads/`
für Fotos/Audios.
- Erlaubte Upload-Typen: Bilder (jpg, png, gif, webp) und Audio (mp3, wav, ogg, m4a),
maximal 40 MB pro Datei.
- Der PDF-Export rendert das Buch serverseitig mit Chromium (im Docker-Image enthalten)
dafür braucht der Container etwas RAM (mind. 512 MB empfohlen).
- Es gibt bewusst **keine** Benutzernamen oder E-Mail-Adressen nur Passwörter.