Archivarius ist als lokal betriebenes, self-hosted Collection Management System (CMS) konzipiert, das die Erfassung, Katalogisierung, Suche und Organisation einer privaten Medien-Sammlung (Blu-rays, DVDs, VHS, Audio-CDs, Hörspiele, Bücher, Mangas, Comics u.a.) automatisiert und strukturiert.
Work beschreibt den Inhalt (Titel, Autoren/Künstler, Kategorie), während Item das physische Exemplar im Besitz repräsentiert (Zustand, Standort, Barcode, eigene Fotos). Ein Work kann mehrere Items haben – z.B. dieselbe Serie auf VHS, DVD und Blu-ray gleichzeitig.| Bereich | Funktion | Status |
|---|---|---|
| Datenmodell | Work/Item-Trennung, Many-to-Many Autoren, hierarchische Standorte | FERTIG |
| Metadaten-Erfassung | Barcode/ISBN-Lookup gegen Open Library & Discogs, manuelle Titelsuche gegen OMDb für Filme | FERTIG |
| Standorte | Beliebig tiefe Verschachtelung mit rekursiver Suche | FERTIG |
| Ausfallsicherheit | Enrichment-Cronjob trägt Metadaten nach, falls externe Dienste beim Scannen nicht erreichbar waren | FERTIG |
| Web-Oberfläche | Formular zum Anlegen (Kamera-Scan, Foto-Upload) + durchsuchbares Sammlungs-Dashboard | IN ARBEIT |
| Externer Zugriff | HTTPS über Caddy/DuckDNS, auch von außerhalb des Heimnetzes | FERTIG |
| KI & Objekterkennung | Kamerabasierte Erfassung/Identifikation von Sammlerstücken (OCR-gestützte Titelsuche) | GEPLANT |
Das System wird über Docker Compose orchestriert und läuft hinter einem Reverse Proxy für sicheren externen Zugriff.
| Container-Name | Basis-Image | Rolle |
|---|---|---|
archivarius-postgres |
postgres:16-alpine |
Primäre Datenhaltung (nur lokal erreichbar, kein externer Zugriff). |
archivarius-api |
python:3.12-slim |
FastAPI-Backend (Uvicorn, SQLAlchemy 2.0 Async, Alembic) UND serverseitig gerenderte Web-Oberfläche (Jinja2) im selben Prozess. |
Externer Zugriff läuft über einen bestehenden Caddy-Reverse-Proxy (separates Gerät im Netzwerk), der per DuckDNS-DNS-01-Challenge ein echtes, browser-vertrauenswürdiges Let's-Encrypt-Zertifikat bezieht – ganz ohne offene Portweiterleitung am Router für die Anwendung selbst.
backend/ ├── app/ │ ├── api/v1/endpoints/ # REST-Endpunkte (items, works, locations, lookup, omdb, ...) │ ├── models/ # SQLAlchemy ORM-Modelle │ ├── repositories/ # Data-Access-Layer mit Eager-Loading-Strategien │ ├── schemas/ # Pydantic-Schemas (DTOs) │ ├── templates/ # Jinja2-Seiten der Web-Oberflaeche │ ├── static/ # Eigenes CSS/JS der Web-Oberflaeche │ └── web/ # Routen der Web-Oberflaeche (getrennt von der REST-API) ├── services/ # Externe Metadaten-Provider (Open Library, Discogs, OMDb) └── scripts/ # Enrichment-Cronjob
Bewusste Architekturentscheidung: serverseitig gerenderte Seiten direkt über FastAPI/Jinja2, statt eines separaten JavaScript-Frontend-Projekts mit eigenem Build-Prozess – geringere Komplexität, eine einzige Codebasis.
html5-qrcode, funktioniert für EAN/UPC) oder manuell eingebenGET /api/v1/lookup/{barcode} prüft: eigener Bestand → Open Library (Bücher) → Discogs (Musik/Hörspiele). Antwort-Status: local · open_library · discogs · not_found · provider_unavailable.
Für Filme/Serien ergänzt GET /api/v1/omdb/search?title=... eine manuelle, titelbasierte Suche gegen die OMDb API – Barcode-basierte Filmdatenbanken existieren aktuell schlicht nicht zuverlässig als kostenloser Dienst (selbst TMDb pflegt keine Barcode-Daten).
Sind beim Scannen keine externen Dienste erreichbar, wird das Item trotzdem ohne Blockade angelegt; ein nächtlicher Cronjob trägt Metadaten automatisch nach, sobald die Dienste wieder erreichbar sind.
Automatisierte Test-Suite (isolierte SQLite-Testdatenbank) plus systematische manuelle End-to-End-Verifikation aller Entitäten gegen den laufenden Docker-Container – inklusive Fehlerfällen, Zeichenkodierung bei internationalen Metadaten und produktionsnahem Verhalten unter Docker Compose. Mehrere zuvor unentdeckte Inkonsistenzen zwischen Modellen, Schemas und Repositories (v.a. bei asynchronem Eager-Loading verschachtelter Beziehungen) wurden im Zuge dessen identifiziert und behoben.
| Meilenstein | Inhalt | Status |
|---|---|---|
| 4 | Barcode-Lookup, Autoren-Modell, rekursive Standort-Suche | ABGESCHLOSSEN |
| 5 | Web-Oberfläche: Item-Anlage, Dashboard, Mehrfach-Fotos, Detail-Ansicht, Dark Mode | IN ARBEIT |
| 6 | Security Hardening (Auth/JWT, Rate Limiting), finale Test-Coverage, Release 1.0 | GEPLANT |
Status-Hinweis: Backend und Datenbank sind erreichbar und melden einen gesunden Zustand.