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-Useran 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 nach39kohm/3v/47Afindet 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
- Neues Teil → Foto-Erkennung (Kamera/Upload) oder Manuell
- KI-Vorschlag prüfen, Kategorie bestätigen (bei „Widerstand” erscheint der Farbring-Wähler)
- Wert + Einheit setzen, Menge eintragen
- Passendes Fach wählen (vorher unter Organizer anlegen) und Teil physisch einlegen
- 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
| Backend | FastAPI (Python), SQLModel/SQLite (inventar.db) |
| Frontend | Jinja2 + HTMX, Vanilla JS (Farbring-Wähler) |
| KI | Vision-API umschaltbar (OpenAI/Anthropic), aktuell Anthropic claude-sonnet-5; Key als Komodo-Secret im Deployment-Env (INV_AI_API_KEY) |
| Auth | Trusted-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/CD | Komodo 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.