PROJEKT 02 · FALLSTUDIE
SLA-Analytics für die Logistik
Bei Maxcess International habe ich zwei kritische Excel-Dateien – Zoll und Bestand – zu einer Live-Plattform mit Next.js, Supabase und Power Automate zusammengeführt, denn das Commercial-Team musste jede SKU vom Export bis zum verfügbaren Bestand sehen können, ohne den Betrieb von irgendjemandem zu unterbrechen.
In 30 Sekunden
Warum
Bei Maxcess International habe ich zwei kritische Excel-Dateien, Zoll und Bestand, mit Supabase und Power Automate zusammengeführt, um jede SKU vom Export bis zum Bestand zu verfolgen, ohne den Betrieb zu unterbrechen.
Was ich gebaut habe
- Quelle
Zwei Excel-Dateien – Zoll und Bestand – in OneDrive und SharePoint. Power Automate lädt sie in die Datenbank und speichert Snapshots, ohne zu ändern, wie die Teams sie ausfüllen.
- Modell
Die SKU ist der Schlüssel zum Weg jeder Sendung. Ein Supabase-Modell für 5+ Benutzer in vier Rollen mit Berechtigungen auf Zeilenebene und ein Bestandstrend auf Basis der Snapshot-Historie.
- Ausgabe
Eine Live-Plattform für Laptop und Smartphone: ein Board nach Phasen, Reservierungen pro Strategic Account Manager, wöchentliche Hinweise und ein RAG-Assistent über die technischen Datenblätter.
Tools
- Excel
- Power Automate
- n8n
- Supabase
- Next.js
- TypeScript
- Azure
- Cloudflare
- DuckDB
- Resend
- RAG
Die vollständige Fallstudie
Wo es begann
Das Commercial-Team von Maxcess International schließt seine Geschäfte mit dem Bestand im Blick ab: was verfügbar ist, was unterwegs ist und was bereits reserviert ist. Diese Antwort lag in zwei umfangreichen Excel-Dateien, einer für den Zoll und einer für Bestand und Inventar, gepflegt von verschiedenen Teams.
Um zu einer einzigen SKU Auskunft zu geben, mussten beide Tabellen von Hand abgeglichen werden: Die Information existierte, aber nicht an einem Ort und nicht zur selben Zeit.
Die Herausforderung
Beide Dateien zusammenführen, ohne von jemandem zu verlangen, seine Arbeitsweise zu ändern: Das Excel-System lief bereits und durfte weder stillstehen noch Reibung zwischen den Teams erzeugen.
Und das so umsetzen, dass sich eine SKU durch den gesamten Sendungsverlauf verfolgen lässt: Export, Import, internationaler Transit, Zoll, Lager und verfügbarer Bestand.
Wie ich vorgegangen bin
Ich begann mit Mockups, die ich mit dem Commercial-Team iterierte, bis es sie freigab. Danach schlug ich aus eigener Initiative vor, es zu einer reproduzierbaren, überprüfbaren Plattform auszubauen, live und gespeist von den Daten ihrer eigenen Benutzer.
Mit Unterstützung der benachbarten Teams verfeinerten wir die Excel-Dateien in Kopien auf OneDrive und SharePoint, damit das Laden von niemandem abhing. Mit den freigegebenen Mockups entwarf und dokumentierte ich die Architektur, bevor ich baute.
End-to-End
Datenaufnahme. Ein Power-Automate-Workflow lädt beide Excel-Dateien in die Datenbank und speichert einen Snapshot jedes Stichtags. Die Teams füllen ihre Tabellen weiterhin aus wie immer.
Modell. Die SKU ist der Schlüssel zur gesamten Sendung. In Supabase, auf PostgreSQL, liegt ein Modell mit versionierten Migrationen und Berechtigungen auf Zeilenebene für vier Rollen: Administrator, Strategic Account Manager, Support und Besucher. Jeder Stichtag wird als Snapshot gespeichert, und der Vergleich zwischen Stichtagen zeigt, was in jedem Datensatz hinzugefügt, entfernt oder geändert wurde.
App. Mit Next.js und TypeScript gebaut, mit barrierefreien Komponenten und Dunkelmodus, funktioniert sie auf Laptop und Smartphone gleich. Die Hinweise werden jeden Montag per E-Mail von einer eigenen Domain versendet, über einen n8n-Workflow, und erscheinen auch in der Glocke der Plattform.
Was ich gebaut habe
Eine Live-Plattform für 5+ Benutzer, mit der SKU im Mittelpunkt jedes Bildschirms.
- Board: SKUs nach Phase, Katalogumfang, verfügbare Stücke, Stücke im Transit und ausstehende Daten, mit Live-Diagrammen, einer Heatmap und dem Bestandstrend nach Zeitraum, aufgebaut aus der Historie der Stichtage.
- Katalog nach Technologie und Marke, mit dem technischen Datenblatt jedes Produkts.
- Sendungen und Sendungshistorie: jede SKU in ihrer Phase, mit Datums- und Länderfiltern.
- Reservierungen pro Strategic Account Manager, mit einem Hinweis, wenn eine SKU überreserviert ist.
- Aus der Historie erstellte Projekte, mit ihrem PDF-Dokument.
- Snapshots: jede eingelesene Datei und ihre Änderungen, Datensatz für Datensatz.
- Nachverfolgung: Sie verfolgen eine SKU und erhalten einen Hinweis, wenn sie ankommt, wenn sie die Phase wechselt und wenn sich ihre verfügbare oder reservierte Menge ändert.
- Einstellungen: Präferenzen, Benutzer und Rollen, Produktfamilien, Marken, offene Punkte und Hilfe.
Der Assistent
MAX beantwortet Fragen zu den technischen Datenblättern des Katalogs. Es ist ein RAG-Assistent: Er durchsucht PostgreSQL per Volltext und nach Bedeutung und formuliert die Antwort mit einem Sprachmodell aus dem, was er gefunden hat.
Er aktualisiert sich bei jeder Neuindexierung: Ein Indexer vergleicht den Korpus mit seiner vorherigen Version, zerlegt ihn in Chunks und verarbeitet nur das erneut, was sich geändert hat. Vor jedem Release prüft ein Satz von Testfragen, dass er mit Quellenbezug antwortet und zu sagen weiß, dass er etwas nicht weiß.
Was sich geändert hat
Das Commercial-Team sieht Bestand, Transit und Reservierungen jeder SKU live, auf Laptop und Smartphone, und 5+ Benutzer arbeiten mit denselben Informationen. Verwaltung, Zoll und Inventar füllen ihre Excel-Dateien weiterhin aus wie immer, und ihre Daten erreichen jetzt alle.
Was ich gelernt habe
Dass die beste Integration die ist, die niemand lernen muss: Die Arbeitsweise jedes Teams zu respektieren, hat dazu geführt, dass die Plattform angenommen wurde. Und dass ein Assistent ebenso viel durch seine Antworten wert ist wie dadurch, dass er zugibt, was er nicht weiß.
Wie es weitergeht
Weitere Datenblätter zum Korpus des Assistenten hinzufügen und das Repository veröffentlichen, sobald es bereit ist.
End-to-End-Stack
Quellen und Datenaufnahme
Beide Excel-Dateien, ohne zu ändern, wie sie ausgefüllt werden
- Excel
- OneDrive
- SharePoint
- Power Automate
- SheetJS (xlsx)
Datenbank und Modell
Die SKU als Schlüssel, mit Berechtigungen auf Zeilenebene
- Supabase
- PostgreSQL
- SQL
- Versionierte Migrationen
- Row Level Security
- DuckDB
- Azure
Backend
Routen, Sitzungen und Validierung
- Next.js
- TypeScript
- Node.js
- Zod
- Supabase SSR
- node-postgres
Frontend
Die Plattform auf Laptop und Smartphone
- React
- Next.js App Router
- Tailwind CSS
- Radix UI
- shadcn/ui
- Lucide
- next-themes
- Sonner
Visualisierung
Board, Trend und Heatmap
- Eigene React-Diagramme
- Tailwind CSS
Dokumente
Technische Datenblätter und Projektdokumente
- PDF.js
- PDFKit
- SheetJS (xlsx)
KI
Der Assistent MAX
- RAG
- OpenAI-Embeddings
- DeepSeek-Chatmodell
- PostgreSQL-Volltextsuche
- pgvector
Hinweise und E-Mail
Der Montags-Newsletter und die Glocke
- n8n
- SMTP auf eigener Domain
- Resend
- Outlook
Qualität
Tests und Prüfpunkte vor jedem Release
- Vitest
- Testing Library
- jsdom
- Playwright
- ESLint
- Git-Hooks
- Python
Bereitstellung
Veröffentlichen und ausliefern
- Vercel
- Cloudflare
- GitHub
Screenshots · 12
Testdaten oder unkenntlich gemachte Daten: keine echten Kundenzahlen.