Bauteil-Inventar

Selbst gehostetes Web-Inventar für Elektronik-Kleinteile. Erfassung per Foto mit KI-Erkennung (Anthropic claude-sonnet-5) oder manuell, Ablage-Verwaltung über die Stanley Pro Organizer und deren Fächer. Gebaut mit Claude, läuft als einzelner Docker-Container (FastAPI + SQLite + HTMX) auf der Synology “Mimir”, rein lokal ohne Internet-Exposition. Der MCP-Server ist verbunden und getestet – Bauteilabfragen laufen direkt im Claude-Chat. Erreichbar unter inventar.mimir.dyn.veedel.net. Aktuelle Version + Historie: CHANGELOG.md im Repo. Stand: v0.4.1.

Zugriff

  • URL: über DSM Reverse Proxy (Forward auf Synology-LAN-IP:8000), nur LAN/VPN
  • Login: kein eigenes Login — Auth über Synology SSO / Reverse Proxy, der den Header X-Remote-User an den Container weitergibt (INV_AUTH_REQUIRED=true)
  • Repo: git@gitea.nettailor.net:philipp/inventar.git
  • Deployment (seit Juli 2026 über Komodo, vorher Drone): Push auf main → Gitea-Webhook → Komodo Build (Dockerfile backt den Code ins Image, „Weg B”) → Push in die Gitea-Registry → Deployment zieht das neue Image (Procedure: Build → Deploy). Kein Live-Bind-Mount mehr — der Code steckt im Image, das ist reproduzierbar. Healthcheck kommt aus dem Dockerfile (/health).

Was die App kann

  • Bauteile per Text erfassen oder per Foto hochladen — die KI schlägt Name, Kategorie, Wert, Bauform, MPN usw. vor, man prüft und speichert
  • Werte je Einheit: Zahl eingeben, Einheit wählen (Ω/F/H/V/A/Hz), „Übernehmen” → eigenes Feld dafür. Mehrere Einheiten pro Bauteil (z.B. MOSFET: V + A). Eingabe flexibel (39k, 4k7, 100n), normalisiert gespeichert → Suche nach 39kohm / 3v / 47A findet das Teil unabhängig von der Schreibweise
  • Farbring-Wähler für Widerstände (4/5 Ringe → Wert & Toleranz; beim Bearbeiten Rückrechnung aus dem gespeicherten Wert)
  • Infotexte/Tooltips an jedem Feld (was gehört in MPN, Bauform …)
  • Organizer → Fächer (mit Beschreibung in der Ablage-Auswahl); Belegungszähler
  • Volltext- + Wert- + Kategorie-Suche
  • Leere Positionen (Menge 0) auf einen Blick: Kennzahl + Filter + Badge; Default-Menge für neue Teile = 1
  • Mehrere Bilder pro Bauteil (Galerie mit Upload/Entfernen); beim Upload werden alle Metadaten entfernt (EXIF/GPS/Kamera/Zeit/ICC) und das Bild verkleinert
  • REST-API + MCP-Server: im Claude-Chat fragen „ich will X bauen — habe ich die Teile?” (Tools search_parts, check_build, list_categories)

Erfassungs-Workflow

  1. Neues Teil → Foto-Erkennung (Kamera/Upload) oder Manuell
  2. KI-Vorschlag prüfen, Kategorie bestätigen (bei „Widerstand” erscheint der Farbring-Wähler)
  3. Wert + Einheit setzen, Menge eintragen
  4. Passendes Fach wählen (vorher unter Organizer anlegen) und Teil physisch einlegen
  5. Später über Name/MPN/Wert suchen → Tool zeigt „Organizer · Fach”

Befüllungs-Strategie der Organizer: docs/organizer-strategie.md im Repo (ein Organizer pro Bauteil-Familie, Fachgröße nach Bauteilgröße, Fach-Labels A1/B3… physisch bekleben = Ablageort im Tool).

MCP-Server (Mac)

Kleiner lokaler stdio-MCP-Server unter mcp-server/, läuft auf dem Mac und spricht die REST-API der NAS an. In claude_desktop_config.json eintragen (INVENTORY_URL = NAS-Adresse, optional INVENTORY_TOKEN). Details: mcp-server/README.md.

Technik

BackendFastAPI (Python), SQLModel/SQLite (inventar.db)
FrontendJinja2 + HTMX, Vanilla JS (Farbring-Wähler)
KIVision-API umschaltbar (OpenAI/Anthropic), aktuell Anthropic claude-sonnet-5; Key als Komodo-Secret im Deployment-Env (INV_AI_API_KEY)
AuthTrusted-Header (X-Remote-User) via DSM Reverse Proxy / Synology SSO; kein App-Login
API/api/{categories,components,check_build}, optional per INV_API_TOKEN (Header X-API-Token)
CI/CDKomodo Build aus Gitea (Weg B), Webhook → Procedure (Build → Deploy). Vorher Drone.
Backup/volume1/docker/inventar/data (SQLite + Uploads) in Hyper Backup

Wert-Parser (app/values.py) versteht SI-Präfixe, EU-Notation (4k7, 1R0, 2u2) und Widerstands-Farbcode. DB-Schema-Updates laufen über eine Mini-Migration (ALTER TABLE ADD COLUMN) beim Start.

Backlog

  • Typspezifische Zusatzfelder je Kategorie (Leistung, Dielektrikum …) – bei Bedarf
  • Optional lokales Vision-Modell (Ollama/LLaVA) als Provider

Erledigt: MCP eingerichtet & getestet, API-Token gesetzt, Reverse-Proxy-Domain in Nutzung, KI-Erkennung geschärft, Farbring-Rückrechnung, Werte je Einheit, leere Positionen sichtbar, mehrere Bilder pro Bauteil, Nutzer-Chip im LAN ausgeblendet, Altbestand korrigiert. Bewusst nicht umgesetzt (nicht benötigt): CSV/JSON-Export & -Import, Mengen-Warnschwelle.