docs: mailserver in der app in anleitung und changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
unknown
2026-10-25 22:40:36 +01:00
co-authored by Claude Opus 5.5
parent 01bbb3ba9a
commit ebab5627de
12 changed files with 36 additions and 25 deletions
+3 -3
View File
@@ -33,9 +33,9 @@ TZ=Europe/Berlin
# Kostenlos anlegen: https://rebrickable.com/api/ (Konto -> Settings -> API)
# REBRICKABLE_API_KEY=
# Optional: Mailversand fuer Erinnerungen an Wunschlisten-Termine. Ohne
# SMTP_HOST und SMTP_FROM sind Erinnerungen komplett aus - alles andere
# funktioniert unveraendert.
# Optional: Mailversand fuer Erinnerungen an Wunschlisten-Termine. Einfacher
# geht es in der App unter Mehr -> Erinnerungen -> Mailserver. Steht der
# Server hier, hat die .env Vorrang und die App zeigt ihn nur an.
# SMTP_HOST=mail.example.de
# SMTP_PORT=587
# SMTP_SECURE=false
+17 -9
View File
@@ -7,8 +7,25 @@ die Versionierung [Semantic Versioning](https://semver.org/lang/de/).
## [Unreleased]
### Hinzugefügt
- **Mailserver in der App einrichten**: Unter Mehr → Erinnerungen → Mailserver
lassen sich Server, Port, Verschlüsselung, Zugang und Absender eintragen –
ohne `.env` und ohne Neustart. Das Passwort wird verschlüsselt gespeichert
(AES-256-GCM, Schlüssel aus `BETTER_AUTH_SECRET`), nie wieder angezeigt und
nicht exportiert. Steht der Server in der `.env`, hat sie weiter Vorrang.
- **Set aus einem Link übernehmen**, für alle Hersteller: Amazon, idealo,
geizhals, Hersteller-Shops, Brickfact oder Merlins Bricks. Bricktrack liest
Produktdaten (schema.org, Open Graph, bei Amazon die Produktseite) und, wenn
die Seite blockt, den Link selbst. Lego wird über Rebrickable ergänzt,
BlueBrixx und Cobi über Merlins Bricks. Das Ergebnis füllt das Formular vor,
das Bild wird beim Speichern lokal abgelegt.
### Geändert
- Der Zeitplan für Erinnerungen läuft immer und prüft bei jedem Durchlauf, ob
ein Mailserver eingerichtet ist. Vorher wurde er nur gestartet, wenn SMTP
schon beim Containerstart in der `.env` stand.
- **Neue Navigation**: unten Start, Katalog, Sammlung, Wünsche und in der
Mitte ein +-Stein mit allen Wegen zu einem neuen Set (Scannen, aus Link,
Lego-Nummer, von Hand).
@@ -25,15 +42,6 @@ die Versionierung [Semantic Versioning](https://semver.org/lang/de/).
Standorte heran, obwohl sie diese pflegen dürfen: Der Eintrag
„Verwaltung" stand nur im Menü des Administrators.
### Hinzugefügt
- **Set aus einem Link übernehmen**, für alle Hersteller: Amazon, idealo,
geizhals, Hersteller-Shops, Brickfact oder Merlins Bricks. Bricktrack liest
Produktdaten (schema.org, Open Graph, bei Amazon die Produktseite) und, wenn
die Seite blockt, den Link selbst. Lego wird über Rebrickable ergänzt,
BlueBrixx und Cobi über Merlins Bricks. Das Ergebnis füllt das Formular vor,
das Bild wird beim Speichern lokal abgelegt.
### Sicherheit
- Abrufe im Auftrag eines Nutzers gehen nur an öffentliche Adressen: Jede
+2 -1
View File
@@ -61,6 +61,7 @@ Bild-URLs, die der Nutzer selbst hinterlegt hat.
| `src/lib/prices.ts` | Wertentwicklung aus notierten Preisen (rein) |
| `src/lib/reminders.ts` | Regeln, wann eine Erinnerung faellig ist (rein) |
| `src/lib/reminder-job.ts`, `src/lib/mailer.ts` | Versand und Zeitplan |
| `src/lib/mail-settings.ts`, `src/lib/secret-box.ts` | SMTP aus .env oder App (`app_setting`), Passwort verschluesselt |
| `src/lib/export.ts` | Export und Import des gesamten Bestands |
| `src/lib/money.ts`, `src/lib/format.ts` | Cent-Umrechnung, dd.MM.yyyy |
| `src/components/layout/more-items.ts` | Eintraege der Seite „Mehr" (Konto, Design, Stammdaten), auch Titel der Verwaltungsseiten |
@@ -205,7 +206,7 @@ Session.
5. Session-Cookies: `httpOnly`, `secure`, `sameSite=lax`.
Rate-Limiting auf den Login-Endpunkten.
6. Der Export enthaelt **keine** Konten, Passwoerter oder Passkeys - und
keine Reservierungen oder Teilen-Token. Das Backup ist `./data`, nicht der
keine Reservierungen, Teilen-Token oder `app_setting` (SMTP-Zugang). Das Backup ist `./data`, nicht der
Export.
7. Der Service Worker beantwortet nur GET-Anfragen aus dem Cache und niemals
`/api/auth`, `/api/export` oder den Healthcheck. Beim Abmelden wird der
+14 -12
View File
@@ -538,25 +538,27 @@ schickt Bricktrack dir eine E-Mail – standardmäßig 14 Tage vorher, höchsten
einmal pro Woche je Liste. Ist alles reserviert, bleibt es still: eine
Erinnerung ohne Handlungsbedarf ist nur Lärm.
Dafür braucht es einen SMTP-Zugang in der `.env`:
Dafür braucht es einen Mailserver (SMTP). Den trägst du direkt in der App ein:
**Mehr → Erinnerungen → Mailserver**. Die Angaben – Server, Port,
Verschlüsselung, Benutzername, Passwort und Absender – findest du bei deinem
Mail-Anbieter unter „SMTP" oder „Postausgangsserver". Ein Neustart ist nicht
nötig.
```bash
SMTP_HOST=mail.example.de
SMTP_PORT=587
SMTP_USER=bricktrack@example.de
SMTP_PASSWORD=…
SMTP_FROM=Bricktrack <bricktrack@example.de>
Das Passwort wird verschlüsselt gespeichert und nie wieder angezeigt; zum
Ändern einfach ein neues eintragen. Es landet auch nicht im Export.
# Optional, Standard ist 14:
REMINDER_DAYS_BEFORE=14
```
> Wer lieber mit der `.env` arbeitet, kann den Mailserver weiterhin dort
> eintragen (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASSWORD`,
> `SMTP_FROM`). Dann hat die `.env` Vorrang, und die App zeigt die Werte nur
> an. Wie viele Tage vorher erinnert wird, steht in `REMINDER_DAYS_BEFORE`
> (Standard 14).
Unter **Mehr → Erinnerungen** kannst du die Verbindung prüfen, dir eine
Unter **Mehr → Erinnerungen** kannst du außerdem die Verbindung prüfen, dir eine
Testnachricht schicken und die Prüfung sofort auslösen, statt auf die nächste
Stunde zu warten. Dort steht auch, welche Listen einen Termin haben und wie
viel dort noch offen ist.
Ohne SMTP-Zugang ist die Funktion vollständig aus – alles andere funktioniert
Ohne Mailserver ist die Funktion vollständig aus – alles andere funktioniert
unverändert.
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 KiB

After

Width:  |  Height:  |  Size: 490 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 497 KiB

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 KiB

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 345 KiB