MAIERSHIRTS Wiki

Alles was du als CEO wissen musst — kompakt, durchsuchbar, immer aktuell.

🔴 Live-Stats (aus Supabase, automatisch)

aktive Workflows
Cloudflare Pages
DB-Tabellen mit Daten
🔴 Bestellen (heute)
📥 Eingehend
✅ OK

Aktualisiert: lädt … · automatisch nightly via wiki_state_sync v1.0

🏠 Überblick

Die digitale Infrastruktur von MAIERSHIRTS besteht aus 5 Apps (Cloudflare Pages), 2 Telegram-Bots, 13 aktiven n8n-Workflows und 1 zentralen Datenbank (Supabase). Shopify ist der Master für Artikelstamm und Lagerbestand.

💡 Faustregel: Lager-Fragen → Lager-Bot. Auftrag/Maße/Druck → Projekt-Bot. Geld-Fragen → Lexoffice + Nachkalkulation. Mockups → Mockup-Generator. Backup → Admin-Tool.

📊 KPIs auf einen Blick

5
Apps live
2
Telegram-Bots
13
aktive Workflows
~118
Shopify-Varianten
22
DB-Tabellen
3
Storage-Buckets

🗺️ Roadmap

✅ Phase 1 — Fundament (fertig)

  • 5 Apps deployed auf Cloudflare Pages (Intranet, Nachkalk, Kalkulation, Mockup, Admin)
  • 13 n8n-Workflows aktiv für Sync und Automatik
  • 2 Telegram-Bots: Lager-Bot + Projekt-Bot
  • Backup-Architektur in 3 Schichten (Manuell, Drive, R2)
  • Snapshot-Historie täglich (ms_lager_snapshots)
  • Lager-Inkonsistenzen bereinigt (37 SKUs Tüb/Mus-Fix, on_hand-Negative auf 0)

🔄 Phase 2a — Mockup-Persistenz (fertig)

  • ms_mockups mit Snapshot-Strategie B1
  • Storage-Buckets mockup-pdfs + mockup-logos
  • Save+Load funktional, Logo-Originale bleiben erhalten
  • Projekt-Picker im PDF-Modal mit Inline-Anlage

📋 Phase 2b — Lex-Push (geplant)

  • Manueller Trigger: Angebot aus Kalkulation → Lexoffice API
  • Automatische Belegnummer-Vergabe
  • Status-Sync zurück (Angebot → Auftragsbestätigung → Rechnung)

📦 Phase 3 — CSV-Shopify-Import (geplant)

  • Ralawise-CSV als primäre Lieferantendaten
  • Auswahl-UI statt reiner Bulk-Import
  • Bearbeitungs-Interface vor dem Push

📊 Phase 4 — Bewegungs-Tracking (Idee)

  • ms_lager_movements mit echten Bewegungen statt nur Snapshots
  • Shopify-Webhook-getriggert
  • Slow-Mover-Reports + Verkaufs-Geschwindigkeit

🏠 Intranet

Startseite mit allen Tool-Links

Sammlung aller Apps + externer Tools (Shopify, Lexoffice, Supabase, n8n, Cloudflare).

📊 Nachkalkulation

Was du damit machst

  • Lexoffice-Rechnungen einsehen, filtern, suchen
  • Rechnungen Projekten zuordnen → Auftrag wird komplett trackbar
  • Aufträge-Tab: Welche Rechnungen gehören zu welchem Auftrag
  • Matching-Tab: Shopify-Kunde ↔ Lexoffice-Kontakt verknüpfen
Versionv1.7

💰 Kalkulation & Angebote

Was du damit machst

  • Neue Angebote erstellen (Textil + Druck + Sonstiges)
  • Druckpreise pro Anbieter pflegen (Stahls / Printpunk / König-R-D / Polytape)
  • Stammdaten verwalten (Druckartikel, Textil-EK)
  • Projekt direkt aus Angebot anlegen ("+Neu" Button)
Versionv1.4

🎨 Mockup-Generator

Was du damit machst

  • Logo auf Textil-Bilder positionieren (Brust, Rücken, Ärmel etc.)
  • Premium-PDF erzeugen (Cover, TOC, Detail-Zoom, Spec)
  • Mockups projektgebunden in Supabase speichern
  • Frühere Mockups laden (mit Original-Logos, nicht nur Platzhalter)
Versionv1.30 / Phase 2a komplett

🛡️ Admin / Datensicherung

Was du damit machst

  • Backup aller 22 DB-Tabellen + 3 Storage-Buckets als ZIP
  • Lokal im Browser, dann Download
  • Erinnerung wenn letztes Backup > 14 Tage
  • Historie der letzten 50 Backups (im Browser localStorage)
⚠️ Diese App kann alle Daten lesen. Zero Trust Access prüfen, dass Schutz aktiv ist.

📦 Lager-Bot (Shopify Lagerabgleich)

Telegram-Bot für alles rund um Bestand, Bestellungen und Wareneingang. Antworten kommen sofort mit dem aktuellen Stand aus Shopify.

BefehlWas passiert
/lagerVoller Abgleich: Telegram-Übersicht + HTML-Report-Datei
/bestellenNur die rote Liste — was bestellt werden muss
/zulaufOffene Shopify-POs, was unterwegs ist
/offenOffene Kundenbestellungen, gruppiert nach Bestellnummer

n8n-Workflow

Shopify Lagerabgleich v4.34 — webhook-basiert, frischer 24h-Token wird automatisch geholt.

Statusaktiv
💡 Tipp: Nach jedem Befehl steht eine Befehls-Übersicht in der Antwort. Du musst dir nichts merken.

🎨 Projekt-Bot (MAIERSHIRTS Bot)

Der zentrale Projekt-Bot für die Auftragsabwicklung: Aufträge erfassen, Maße aufnehmen, Druckparameter nachschlagen, Fotos zuordnen, Produktionsblätter generieren.

Slash-Commands

BefehlWas passiert
/start oder /menuHauptmenü öffnen
/hilfe / /helpHilfe-Übersicht
/heuteHeute-Tagesübersicht
/offenOffene Aufträge (Status: Anfrage / Offen / In Produktion)
/druckDruckparameter-Bibliothek aufrufen
/suche [Begriff]In Aufträgen suchen (Projekt, Textil, Hersteller, Kommentar)

Funktionen (per Buttons im Hauptmenü)

  • 📁 Projekte: Letzte 10 + Archiv nach Jahr, Foto-Zähler pro Projekt
  • 📋 Auftrag erfassen/bearbeiten: Textil, Hersteller, Transfer-Art, Druckeinstellungen, Material, Temperatur, Kommentar, Lieferdatum, Status
  • 📐 Maße erfassen: Wizard mit Größenklassen (Klein/Logo/Brust/Rücken/Rücken XL) oder exakter Eingabe in cm
  • 🔥 Druckparameter: Nachschlagen oder neu anlegen (Transfer Art → Hersteller → Untergrund → Temp/Pressen/Nachpressen/Druck%/Abzug)
  • 📄 Produktionsblatt PDF: erzeugt automatisch mit Maßen + Druckparametern
  • 📷 Foto-Upload: Bilder direkt in Telegram senden → Bot fragt Projekt + Kategorie + Unterordner
  • 📝 Notizen: Pro Projekt
  • 📋 Auftrag duplizieren: Wiederkehrende Aufträge schnell kopieren

n8n-Workflow

MAIERSHIRTS Bot v17.11.0 — webhook-basiert, ~294 Nodes, schreibt in Supabase (ms_projekte, ms_auftraege, ms_uploads, ms_notizen, ms_masse, ms_druckparameter).

Statusaktiv
WhitelistNur autorisierte User-IDs (chatId 8713905166)

🛒 Shopify-Workflows

WorkflowWas er tutTrigger
Shopify Lagerabgleich v4.34 aktivTelegram-Bot für /lager, /bestellen, /zulauf, /offenWebhook
Shopify Snapshot Daily v1.7 aktivTägl. Inventar-Snapshot in ms_lager_snapshots + PushCron 09:00
Shopify Kunden Sync v1.2 aktivSynchronisiert Shopify-Kunden in ms_shopify_kundenManuell

📑 Lexoffice-Workflows

WorkflowWas er tutTrigger
Lexoffice Netto Sync v1.6 aktivSynchronisiert Rechnungen (Netto-Beträge) → invoicesManuell/Cron
Lexoffice Supabase Sync v1.5 aktivGlobaler Sync Lexoffice → SupabaseManuell
Lexoffice Kunden Sync v1.1 aktivSynchronisiert Lexoffice-Kontakte → contactsManuell
Lexoffice Kunden Sync Cron v1.0 aktivTriggert Kunden-Sync zeitgesteuertCron
Lexoffice AB Sync v1.0 aktivSynchronisiert Auftragsbestätigungen (AB)Manuell/Cron
Lexoffice Positionen Webhook v1.0 aktivWebhook empfängt Position-Updates aus LexofficeWebhook
💡 Lexoffice-Daten werden in Supabase gespiegelt. Die Nachkalkulations-App liest aus Supabase, nicht direkt aus Lexoffice.

💾 Backup-Workflows

WorkflowWas er tutTrigger
storage_backup_to_r2 v1.6 aktivSpiegelt Supabase Storage-Buckets nach Cloudflare R2Cron
MAIERSHIRTS Backup Supabase→Drive v1.2 aktivSichert Supabase-Tabellen nach Google DriveCron
backup_status_notify v1.0 aktivTelegram-Status-Push nach Backup-Lauf (OK/Fehler)nachfolgend
💡 Drei-Schichten-Backup: Supabase eigene Snapshots + Google Drive-Spiegel + Cloudflare R2. Falls eine Quelle ausfällt, bleibt alles erhalten.

📋 Alle Workflows (Übersicht)

Aktuell 13 aktive Workflows in n8n. Inaktive (alte Versionen, Migrationen) sind nicht aufgelistet.

KategorieWorkflowTrigger
BotShopify Lagerabgleich v4.34Webhook
BotMAIERSHIRTS Bot v17.11.0Webhook
ShopifyShopify Snapshot Daily v1.7Cron 09:00
ShopifyShopify Kunden Sync v1.2Manuell
LexofficeLexoffice Netto Sync v1.6Manuell
LexofficeLexoffice Supabase Sync v1.5Manuell
LexofficeLexoffice Kunden Sync v1.1Manuell
LexofficeLexoffice Kunden Sync Cron v1.0Cron
LexofficeLexoffice AB Sync v1.0Manuell/Cron
LexofficeLexoffice Positionen Webhook v1.0Webhook
Backupstorage_backup_to_r2 v1.6Cron
BackupMAIERSHIRTS Backup Supabase→Drive v1.2Cron
Backupbackup_status_notify v1.0Folge-Workflow

Zugang: n8n.srv1578997.hstgr.cloud

🗺️ Systeme & Datenflüsse

SystemHältMaster für
ShopifyArtikelstamm, Lagerbestand, Kundenbestellungen, Purchase OrdersLager & Verkauf
SupabaseMockup-Daten, Projekte, Aufträge (Bot), Maße, Druckparameter, Auftragstracking, Lager-Snapshots, DruckpreiseEigene Geschäftslogik
LexofficeRechnungen, Angebote, Belege, KontakteBuchhaltung
Google DriveFoto-Uploads, Backup-ZIPsFiles
Cloudflare R2Storage-Bucket-Spiegel (Backup)Disaster Recovery
n8n13 Workflows als Verbindungs-GliederAutomatisierung

🛒 Shopify (Lager-Master)

Alle Lager-Operationen passieren in Shopify. Standorte sind Tübinger Straße 24 (Hauptlager) und Z-Musterlager.

Wichtige Shopify-Felder pro Artikel/Standort

FeldBedeutung
on_handWas physisch im Regal liegt
committedDavon für offene Kundenbestellungen reserviert
availableon_hand − committed — was wirklich verkaufbar ist
incomingÜber offene Shopify-PO erwartet

Shopify-Auth (technisch)

Seit 2026 hat Shopify einen 24-Stunden-Token. Beide Bot-Workflows holen sich automatisch alle 24h einen frischen — du musst nichts tun.

🗄️ Supabase (Datenbank)

Zentrale Datenbank. 22 Tabellen, 3 Storage-Buckets.

Wichtigste Tabellen

  • projects — Projekte (auch in Mockup + Kalkulation referenziert)
  • contacts — Lexoffice-Kontakte (mit shopify_customer_id verknüpfbar)
  • invoices + invoice_assignments — Lexoffice-Rechnungen mit Projekt-Zuordnung
  • ms_angebote + ms_angebote_positionen — Angebote aus Kalkulation
  • ms_mockups — gespeicherte Mockups inkl. Snapshot der Textil-/Kundendaten
  • ms_lager_snapshots — täglicher Lagerstand (für Trends)
  • ms_druck_preise, ms_druck_artikel, ms_textil_einkauf — Stammdaten Kalkulation
  • ms_projekte, ms_auftraege, ms_uploads, ms_notizen, ms_masse, ms_druckparameter — Bot-Daten

Storage-Buckets

  • textil-bilder — Produkt-Bilder fürs Mockup-Tool
  • mockup-pdfs — fertige Mockup-PDFs (privat, signed URLs)
  • mockup-logos — Original-Logos pro Mockup

📑 Lexoffice

Buchhaltungssystem. Daten werden über mehrere n8n-Workflows in Supabase gespiegelt. Die Nachkalkulations-App liest aus Supabase, nicht direkt aus Lexoffice.

Textilien werden als Freitext in den Rechnungen geführt (kein Stammartikel pflichtig). Druckartikel haben Standard-Artikelnummern.

⚙️ n8n (Workflow-Engine)

Hier laufen alle Automatisierungen. Webhook-basiert (z.B. Telegram, Lexoffice) oder Cron-getriggert.

Zugang: n8n.srv1578997.hstgr.cloud

Vollständige Liste der aktiven Workflows: siehe Workflows-Übersicht oben.

✅ Häufige Aufgaben

Wieviel ist von einem Artikel auf Lager?

Lager-Bot → /lager oder im HTML-Report nach SKU suchen.

Was muss ich bei Joma bestellen?

Lager-Bot → /bestellen. Liste mit Mengen kommt sofort.

Sind alle Kundenbestellungen versendet?

Lager-Bot → /offen. Zeigt offene und teilversendete Bestellungen pro Order-Nr.

Neuen Auftrag erfassen

Projekt-Bot → /start → Projekt wählen → "Auftrag erfassen" → Wizard durchklicken (Textil, Hersteller, Druck, Material, Kommentar). Status-Default = Offen.

Maße aufnehmen / Produktionsblatt erstellen

Projekt-Bot → Auftrag öffnen → Maße erfassen (Brust, Rücken, Ärmel etc.) → "Produktionsblatt PDF" → Bot schickt PDF zurück.

Druckparameter nachschlagen

Projekt-Bot → /druck → Transfer Art → Hersteller → Untergrund. Bot zeigt Temperatur/Pressen/Nachpressen/Druck%/Abzug.

Foto zuordnen

Projekt-Bot → Foto direkt in den Chat senden → Bot fragt Projekt + Kategorie (Produktion/Marketing/Bilder aus Anfrage/Produktionsblatt) + Unterordner.

Backup ziehen

Admin-App öffnen → "Backup starten". ZIP-Download dauert ca. 30 Sek. Reminder nach 14 Tagen automatisch. Zusätzlich laufen 3 Cron-Backups im Hintergrund (R2, Drive, Status-Push).

Neues Angebot erstellen

Kalkulation-App → "Angebot" Tab → Kunde wählen → Positionen hinzufügen → Speichern. Anschließend in Lexoffice manuell anlegen (Phase 2b: API-Push noch nicht aktiv).

Mockup für Kunde erstellen

Mockup-App → Textil und Logo wählen → positionieren → PDF erstellen → an Projekt speichern.

Lagerbestand korrigieren

In Shopify Admin direkt → Bestand → Standort wählen → on_hand setzen. Wichtig: Wenn vom Musterlager verkauft wird, muss vorher umgebucht werden — sonst läuft Tübingen ins Minus.

🔧 Wenn etwas nicht geht

Telegram-Bot reagiert nicht

  • 1. Auf n8n.srv1578997.hstgr.cloud einloggen
  • 2. Workflow finden (Shopify Lagerabgleich v4.34 oder MAIERSHIRTS Bot v17.11.0)
  • 3. Aktiv-Toggle prüfen — falls aus, einschalten
  • 4. Falls aktiv aber Bot stumm: Workflow deaktivieren + sofort wieder aktivieren (re-registriert Telegram-Webhook)

App zeigt "Invalid API key"

Anon-Key in der HTML-Datei wurde versehentlich mit altem Wert deployed. Re-Deploy mit korrektem Key (endet auf ...n2dA).

Lager-Zahl stimmt nicht

Wahrscheinlich: vom Musterlager verkauft ohne Umbuchung. Symptom: Tübingen on_hand < 0, Musterlager hat noch Bestand. Lösung: in Shopify on_hand korrigieren oder Umbuchung machen.

Backup-App lädt nicht

Browser-Konsole prüfen. Häufigster Fehler: Zero Trust nicht eingeloggt. Dann auf Login-Button klicken, Google-Account wählen.

Snapshot 9:00 kommt nicht

n8n Workflow Shopify Snapshot Daily v1.7 auf "active" prüfen. Executions-Liste zeigt ob's gelaufen ist und welcher Node ggf. fehlerhaft war.

Lexoffice-Daten in Nachkalkulation veraltet

Manuell Lexoffice Netto Sync v1.6 in n8n triggern (Manueller Start). Cron läuft sonst zeitgesteuert.

📖 Glossar

BegriffBedeutung
SKUStock Keeping Unit — eindeutige Artikel-Nummer (z.B. SG-M-T-LM-JO-L)
on_handPhysisch im Regal liegend
committedReserviert für offene Kundenbestellungen
availableVerkaufbar = on_hand − committed
incomingÜber offene Shopify-PO erwartet
NettoIm Lager-Bot gleich available
Mit Zulaufavailable + incoming — Bestand nach erwartetem Wareneingang
fulfillable_quantityMenge in einer Bestellung, die noch versendet werden muss
POPurchase Order — Lieferantenbestellung (z.B. bei Joma)
BestellungIm Kontext immer Kundenbestellung, nicht Lieferantenbestellung
ABAuftragsbestätigung (in Lexoffice)
SnapshotTagesgenauer Lagerstand (in ms_lager_snapshots)
BewegungEinzelne Bestand-Veränderung (Verkauf, Wareneingang) — noch nicht implementiert
Transfer ArtDruckverfahren — DTF, Flexfolie etc.
DruckparameterTemperatur / Pressen / Nachpressen / Druck% / Abzug pro Transfer-Art × Hersteller × Untergrund
GrößenklasseVordefinierte Maße: Klein 8×8, Logo 12×10, Brust 22×16, Rücken 32×24, Rücken XL 40×30
Zero TrustCloudflare-Schutz: Apps nur mit Google-Login zugänglich
Service AccountStabilere Auth-Variante als OAuth (kein Token-Expire)
Anon Key / Service RoleSupabase-Schlüssel: anon = Public-zugänglich, service_role = volle Rechte