Files
bricktrack/CHANGELOG.md
T
unknownandClaude Opus 5 dcd076498a test: smoke-test gegen das docker-image, dazu die doku zu phase 2
Der Dev-Server verlor unter der Last eines ganzen Durchlaufs
reproduzierbar Chunks (ChunkLoadError beim Laden von app/layout), was
sich weder durch Aufwaermen noch durch laengere Zeitlimits stabilisieren
liess. Der Smoke-Test faehrt jetzt - wie der Screenshot-Lauf schon
vorher - das Produktions-Image hoch. Ergebnis: 29 Sekunden statt fuenf
Minuten, keine Aussetzer, und getestet wird genau das Artefakt, das
spaeter deployt wird.

Dabei behoben: Der Fehlteile-Dialog hielt eine Kopie der Liste aus dem
Moment des Oeffnens und zeigte ein gerade hinzugefuegtes Teil nicht an.
Er liest jetzt den aktuellen Eintrag aus den Props statt aus dem
Zustand. Gefunden hat das der erweiterte Screenshot-Lauf.

Dokumentation zu Phase 2: Changelog 0.2.0, Roadmap abgehakt, Devlog mit
Zeiten, CLAUDE.md um die neuen Module und Testkonventionen ergaenzt und
die Anleitung um fuenf Kapitel (Import, Scanner, Fehlteile, Einladungen,
Daten, Startbildschirm) - mit vier neuen, automatisch erzeugten Bildern.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-07 08:18:28 +02:00

6.7 KiB

Changelog

Alle nennenswerten Aenderungen an Bricktrack werden hier festgehalten.

Das Format folgt Keep a Changelog, die Versionierung Semantic Versioning.

Unreleased

0.2.0 - 2026-09-07

Phase 2: die Handgriffe, die den Alltag schneller machen.

Hinzugefuegt

Lego-Import (Rebrickable)

  • Auf "Neues Set" reicht die Setnummer von der Packung: Name, Jahr, Teile, Minifiguren und Thema werden uebernommen, das Bild lokal gespeichert.
  • Hersteller und Thema werden bei Bedarf angelegt, ein Oberthema inklusive.
  • Alle Aufrufe laufen serverseitig. Ohne REBRICKABLE_API_KEY bleibt der Import sichtbar, aber abgeschaltet - von Hand anlegen geht unveraendert.

Barcode-Scanner

  • Knopf im Katalog: Strichcode mit der Handykamera scannen. Ist das Set bekannt, oeffnet es sich; sonst das Formular mit ausgefuellter EAN.
  • Jeder Code wird gegen seine Pruefziffer geprueft; dekodiert wird im Browser, nichts verlaesst das Geraet.

Fehlteile

  • Fehlende Teile je Sammlungseintrag mit Teilenummer, Farbe, Anzahl und Notiz, abhakbar wenn nachgekauft.
  • Die Vollstaendigkeit pflegt sich daraus selbst: der erste offene Eintrag setzt "Teile fehlen", der letzte erledigte zurueck auf "vollstaendig".

Einladungen

  • Der Admin erzeugt Registrierungslinks, die genau einmal funktionieren, optional an eine E-Mail-Adresse gebunden, mit waehlbarer Rolle und Gueltigkeit. In der Datenbank liegt nur der Hash des Tokens.

Export und Import

  • Alles als ZIP (Daten plus hochgeladene Dateien), nur die Daten als JSON, die Sammlung als CSV mit Semikolon und BOM fuer deutsches Excel.
  • Import ersetzt die Anwendungsdaten in einer Transaktion, nur fuer Administratoren und nur nach getipptem ERSETZEN.
  • Nicht im Export: Konten, Passwoerter, Passkeys, Reservierungen und Teilen-Links.

PWA

  • Manifest, Icons und Service Worker: installierbar auf dem Startbildschirm, mit Verknuepfungen zu "Fehlende Sets" und zur Sammlung.
  • Einmal geladene Seiten bleiben ohne Verbindung lesbar; Set-Bilder und Build-Dateien kommen aus dem Cache. Beim Abmelden wird der Cache geraeumt.

Geaendert

  • src/env.ts behandelt leere Werte wie nicht gesetzt: ein BASE_URL= in der .env fuehrte bisher zum Start-Abbruch statt zum Standardwert.
  • Unit-Tests koennen jetzt auch Server-Module laden (server-only wird in der Testumgebung durch ein leeres Modul ersetzt).

Bekannte Einschraenkungen

  • Rebrickable liefert keine Anleitungsdateien. Der Import legt stattdessen einen Link auf die LEGO-Serviceseite zur Setnummer an.
  • Der Barcode-Scanner braucht wie Passkeys HTTPS.
  • Beim Import wandern Wunschlisten an den importierenden Admin und sind zunaechst nicht geteilt.

0.1.0 - 2026-09-07

Erste lauffaehige Fassung: Phase 1 vollstaendig, im Docker-Stack verifiziert.

Hinzugefuegt

Anmeldung

  • Registrierung des ersten Nutzers, der damit Administrator wird; danach ist die Registrierung geschlossen.
  • Anmeldung per E-Mail und Passwort oder per Passkey (WebAuthn), inklusive Conditional UI, wo der Browser sie unterstuetzt.
  • Passkey-Verwaltung unter "Konto": beliebig viele Geraete, umbenennen, loeschen.
  • Rate-Limiting auf den Login-Endpunkten, in der Datenbank abgelegt und damit neustartfest.

Katalog

  • Set-Katalog mit Kachelansicht, Suche ueber Setnummer, Name und EAN sowie Filtern nach Hersteller, Thema, Jahr und Besitzstatus.
  • Sets anlegen und bearbeiten, mit Bild-Upload oder Bild-URL.
  • Set-Detailseite mit Metadaten, Anleitungen, Fotos und Sammlungseintraegen.
  • Anleitungen als PDF-Upload mit eingebautem pdf.js-Viewer oder als externer Link; mehrere Anleitungen je Set.
  • Eigene Fotos je Set, am Handy direkt aus der Kamera.

Sammlung

  • Uebersicht aller besessenen Sets mit Filtern nach Status, Vollstaendigkeit, Standort und Hersteller.
  • Statistik-Kacheln: Anzahl Sets, Teile gesamt, Wert nach UVP, fehlende Sets, sowie die Aufteilung nach Hersteller.
  • Sammlungseintraege mit Status, Zustand, Standort, Kaufdatum, Kaufpreis und "geschenkt von".

Wunschlisten

  • Ansicht "Fehlende Sets" mit Mehrfachauswahl: langes Druecken startet die Auswahl, die Aktionsleiste uebernimmt sie in eine bestehende oder neue Wunschliste. Dubletten und bereits besessene Sets werden uebersprungen und im Ergebnis benannt.
  • Wunschlisten mit Prioritaet, Reihenfolge, Anlass, Termin und Hinweistext.
  • Bereich "Aus fehlenden Sets hinzufuegen" auf der Wunschlisten-Seite, vorgefiltert auf Sets, die noch nicht drauf sind.
  • Oeffentliche Ansicht unter /w/[shareToken] ohne Anmeldung; Besucher reservieren mit ihrem Namen und erhalten einen Storno-Link.
  • Ueberraschungsmodus: der Besitzer sieht nur "reserviert", nicht von wem.
  • Erfuellte Wuensche werden automatisch markiert, sobald das Set in der Sammlung landet, und verschwinden aus der oeffentlichen Ansicht.
  • Share-Token laesst sich neu erzeugen; der alte Link ist danach tot.

Stammdaten

  • Hersteller, Themen (mit Unterthemen) und Standorte (schachtelbar) verwalten.

Betrieb

  • Docker-Stack: Multi-Stage-Build mit standalone-Output, non-root Nutzer, Healthcheck unter /api/health, ein Service und ein Bind-Mount auf ./data.
  • Migrationen laufen bei jedem Containerstart automatisch.
  • update.sh mit Sicherung, Build, Healthcheck und automatischem Rollback.
  • Seed-Skript mit 3 Herstellern, 6 Themen, 10 Sets, 4 Sammlungseintraegen und einer Wunschliste.
  • Dokumentation: Schnellstart inklusive Nginx-Proxy-Manager-Konfiguration, bebilderte Anleitung, README, Roadmap und Devlog.

Sicherheit

  • Serverseitige Validierung aller Eingaben mit zod.
  • Uploads auf PDF, JPEG, PNG und WebP begrenzt, geprueft an den Magic Bytes statt am gemeldeten MIME-Typ; Dateinamen erzeugt immer der Server.
  • Oeffentliche Wunschlisten-Routen nutzen ausschliesslich den Share-Token und geben nichts ausserhalb der Wunschliste preis; die Seite ist noindex.
  • Storno- und Einladungs-Token liegen nur als SHA-256-Hash in der Datenbank.
  • Session-Cookies httpOnly, sameSite=lax und im Betrieb secure.
  • Anleitungs-PDFs und eigene Fotos sind nur mit Session abrufbar; oeffentlich sind allein die Set-Bilder, die die geteilte Wunschliste braucht.

Bekannte Einschraenkungen

  • Der Katalog enthaelt nur, was von Hand angelegt wurde. Der Import ueber Rebrickable kommt in 0.2.0.
  • Weitere Konten sind noch nicht moeglich; Einladungslinks kommen in 0.2.0.
  • Unter Windows scheitert pnpm build an fehlenden Symlink-Rechten. Der Docker-Build unter Linux ist davon nicht betroffen.