Bitte anmelden, um fortzufahren.
Wer hier mit E-Mail-Adresse eingetragen ist, kann sich anmelden (per Google oder E-Mail/Passwort mit derselben Adresse). Die Rolle lässt sich in der Tabelle direkt umstellen (wird sofort gespeichert). Kürzel oder Name ändern: dieselbe E-Mail-Adresse mit neuen Angaben eintragen.
| Kürzel | Name | Rolle |
|---|
Kurzanleitung für alle Mitglieder – Stand Oktober 2026
Am Handy: Seite in diesem Link öffnen → Browser-Menü/Teilen → „Zum Startbildschirm hinzufügen“ – die App startet danach wie eine normale App, ohne Adressleiste.
Oben steht in einer Zeile: der Menü-Knopf ☰ (nur wenn der Bereich Unterseiten hat), der aktuelle Bereich mit Unterseite (z. B. „Lager · Eingang“), dein Kürzel und der Hilfe-Knopf. Unten ist das Hauptmenü:
Prognose-Werkzeug für eingehende, noch nicht ausgeführte Bestellungen – getrennt von der eigentlichen Ausgangsbuchung.
Neuer Reiter für die körperliche Bestandszählung je Lagerort.
Bei allen PDF-Uploads (Eingang, Ausgang, Bestellungen, Ankauf, Verkauf LEH) gilt: Datei hochladen, „Analysieren“ klicken, den ausgefüllten Vorschlag sorgfältig prüfen/korrigieren, erst dann speichern.
Neue Einträge, Änderungen und Uploads (PDF-Rechnungen, Shopify-CSV) im gesamten Bereich Handel sind auf Administratoren beschränkt. Alle Mitglieder können die Listen und Auswertungen weiterhin einsehen.
WaWi\EAN-Codes vom 02.10.2026); ändert sich die Excel-Liste, muss die App angepasst werden.Gilt für Gläser (bei anderen Einheiten optional/frei). Die Chargennummer setzt sich aus drei Teilen zusammen:
03260907/2029 – Imkerei Nr. 03 (Christian Grune / Grune), abgefüllt am 07.09.2026, MHD 2029.| Nr. | Kürzel | Name | Imkerei |
|---|---|---|---|
| 01 | GES | Gesine Conrad | Bienenklang |
| 02 | JOE | Jörg Weigelt | Weigelt |
| 03 | CHR | Christian Grune | Grune |
| 04 | KAR | Karsten Kalita | Pollenräuber |
| 05 | CWE | Christian Wendt | Wendt |
| 06 | UWE | Uwe Kabath | Biogemüse Watzkendorf |
| 07 | OLI | Oliver Devrient | Devrient |
| 98 | EXL | Lieferant extern | – |
| 99 | EXI | Imkerei extern | – |
| 00 | HTR | Honigtreu allgemein | – |
Nur für Admins – Stand Oktober 2026. Dieselbe Anleitung liegt als PDF im Ordner WaWi\Hilfe (automatisch aus diesem Text erzeugt) und dient auch als Übergabedokument für Nachfolger.
Die Lagerverwaltung ist die Web-App der Honigtreu eG für Lagerbestände je Sorte, Charge und Lagerort, Ein-/Ausgänge, Umlagerung, Abfüllen, Inventur, Bestellungen, „Mein Bestand“ der Imkereien und (nur Admins) den Bereich Handel.
Die App läuft komplett online bei Google Firebase. Es gibt keinen eigenen Server und keinen Build-Schritt: Die ganze App ist eine einzige Datei index.html (HTML, CSS, JavaScript ohne Framework).
| Teil | Wo | Wofür |
|---|---|---|
| App (Hosting) | https://honigtreu-lagerverwaltung.web.app | Aufruf durch alle Mitglieder, auch am Handy (als App installierbar) |
| Datenbank (Firestore) | Firebase-Projekt honigtreu-lagerverwaltung | Alle Daten: Bestände, Buchungen, Bestellungen, Handel, Mitglieder |
| Anmeldung (Auth) | dasselbe Firebase-Projekt | Login per Google-Konto oder E-Mail/Passwort |
| KI-Belegerkennung | Cloud Function sampleJson, Region europe-west3 | Liest hochgeladene Lieferscheine/Rechnungen (PDF) über die Anthropic-API aus |
| Quellcode | Ordner WaWi (bisher OneDrive von Christian) | Hier wird geändert; per firebase deploy hochgeladen |
| Firebase-Werkzeug (CLI) | auf dem Rechner des Admins (Node.js/npm) | Offizielles, kostenloses Programm von Google (firebase-tools). CLI = „Command Line Interface“, ein Programm ohne Fenster, das über eingetippte Befehle bedient wird (Eingabeaufforderung oder PowerShell). Nur zum Hochladen; Update-Hinweise betreffen nur das Werkzeug, nicht die App |
rolle (admin, mitglied, inaktiv, extern) plus admin: true/false, auf das die Sicherheitsregeln prüfen. Sich selbst kann ein Administrator die Rechte nicht entziehen.ANTHROPIC_API_KEY bei Google. Neuen Key hinterlegen: firebase functions:secrets:set ANTHROPIC_API_KEY, danach firebase deploy --only functions.serviceAccountKey.json ist ein Generalschlüssel mit vollem Datenbankzugriff ohne Anmeldung. Nie kopieren, mailen oder weitergeben. Bei Bedarf selbst erzeugen (Projekteinstellungen → Dienstkonten → „Neuen privaten Schlüssel generieren“). Aufbewahrt wird er nur im Ordner WaWi/Vertraulich/, nie im Ordner firebase/public.npm install -g firebase-tools, dann firebase login.WaWi\firebase wechseln und mit firebase projects:list prüfen, ob honigtreu-lagerverwaltung erscheint (Zuordnung steht in .firebaserc).pip install reportlab.npm install -g --allow-scripts=protobufjs,re2 firebase-tools.| Datei / Ordner | Inhalt |
|---|---|
firebase/public/index.html | Die komplette App, inkl. Hilfe (help-panel) und dieser Admin-Anleitung (admin-help-panel) |
firebase/firestore.rules | Zugriffsregeln der Datenbank |
firebase/firebase.json, .firebaserc | Konfiguration des Werkzeugs. "public": "public" – veröffentlicht wird nur der Ordner firebase/public |
firebase/public/sw.js, manifest.json, icons/ | Installierbarkeit am Handy; sw.js lädt App-Seite und Hilfe-PDF zuerst aus dem Netz |
firebase/public/hilfe/kurzanleitung.pdf | Kurzanleitung für Mitglieder (aus der Hilfe erzeugt) |
firebase/functions/ | Cloud Function für die KI-Belegerkennung (Node 22) |
firebase/migrate*.js, verify-*.js, package.json, node_modules/ | Einmalige Migrationsskripte der Datenübernahme (erledigt; für den Betrieb nicht nötig, können entfernt werden – functions/node_modules dagegen bleibt) |
firebase/README.md | Einrichtungsanleitung für einen Neuaufbau von null |
firebase-maerkte/public/ | Märkte-App (eigene Adresse honigtreu-maerkte.web.app), gleiche Regeln: nur public wird veröffentlicht |
Werkzeuge/deploy_pruefung.js | Läuft automatisch vor jedem Hosting-Deploy (beide Apps) und bricht ab, wenn im Ordner public etwas anderes liegt als index.html, sw.js, manifest.json, icons/*.png, hilfe/kurzanleitung.pdf |
Vertraulich/ | Schlüssel und Rohdaten (serviceAccountKey.json, migration-data.zip) – nie veröffentlichen, nie weitergeben |
Werkzeuge/hilfe_dokumente_erzeugen.py | Erzeugt beide Hilfe-PDFs (Kurzanleitung und Admin-Anleitung) aus index.html |
Sicherung/ | Frühere App-Stände und Excel-Sicherungen |
Hilfe/ | Kurzanleitung für Mitglieder und diese Admin-Anleitung als PDF (nicht öffentlich) |
Seit 30.09.2026 wird nur noch der Unterordner public veröffentlicht (vorher der ganze Ordner firebase – dabei waren u. a. serviceAccountKey.json und migration-data.zip öffentlich abrufbar). In public gehören ausschließlich die App-Dateien; Werkzeuge, Skripte, Schlüssel, Daten und Dokumente nie dort ablegen. Die Prüfung Werkzeuge/deploy_pruefung.js verhindert einen Deploy, falls doch. Welche Dateien zuletzt hochgeladen wurden, steht in firebase/.firebase/hosting..cache.
index.html nach Sicherung/ kopieren (Dateiname mit Datum).firebase/public/index.html vornehmen und testen.help-panel) und, falls Aufbau, Zugänge oder Abläufe betroffen sind, diese Admin-Anleitung (admin-help-panel) in index.html anpassen. Danach im Ordner WaWi ausführen: python Werkzeuge/hilfe_dokumente_erzeugen.py – das erzeugt im Ordner Hilfe/ die Kurzanleitung und die Admin-Anleitung als PDF und legt zusätzlich eine Kopie der Kurzanleitung nach firebase/public/hilfe/kurzanleitung.pdf (die in der App verlinkte, öffentliche Version). Die PDFs nie direkt bearbeiten, sondern immer diesen Text.webapp-stand-kontext.md im Claude-Projekt „Honigtreu Lagerverwaltung“).Alle Befehle im Ordner WaWi\firebase ausführen. Vor jedem Hosting-Deploy prüft Werkzeuge/deploy_pruefung.js automatisch den Ordner public (braucht Node.js); meldet sie „Deploy abgebrochen“, die genannten Dateien aus public entfernen.
| Befehl | Wann |
|---|---|
firebase deploy --only hosting | Nach Änderungen an index.html, sw.js, Hilfe-PDF (Normalfall) |
firebase deploy --only firestore:rules | Nach Änderungen an firestore.rules |
firebase deploy --only storage,functions | Nach Änderungen an storage.rules bzw. der Funktion dateiHolen (Dateiablage für Lieferscheine und Fotos). Beim ersten Mal fragt die CLI, ob Storage auf Firestore zugreifen darf (für die Mitgliederprüfung) – mit Y bestätigen. |
firebase deploy --only functions | Nach Änderungen im Ordner functions oder neuem API-Key |
firebase deploy | Alles zusammen |
firebase login --reauth | Wenn die Anmeldung abgelaufen ist |
npx firebase-tools deploy --only hosting | Wenn „firebase“ nicht gefunden wird |
Was beim Deploy passiert: Die Firebase CLI prüft zuerst mit deploy_pruefung.js, ob in public nur erlaubte Dateien liegen. Dann vergleicht sie die Dateien mit dem, was online ist, und lädt nur die geänderten zu Google Firebase Hosting hoch; bei firestore:rules werden die Sicherheitsregeln übertragen. Nach wenigen Sekunden ist die neue Version unter der App-Adresse für alle erreichbar. Geöffnete Apps laden sich beim nächsten Zurückholen aus dem Hintergrund bzw. spätestens nach 30 Minuten selbst neu (Abfrage des ETag von index.html, gemeinsamer Kern createAutoUpdate in beiden Apps); bei ungespeicherten Eingaben erscheint nur ein Hinweis. Fenster mit einer alten Version ohne diese Funktion lädt der Service Worker (sw.js, beide Apps) neu: Bei jeder neuen sw.js fragt er alle offenen Fenster per Nachricht ab; wer nicht als aktuelle Version antwortet, wird neu geladen, sobald er im Hintergrund ist (spätestens nach rund 24 Stunden, wenn der Browser die neue sw.js holt). Damit der Browser keine alte Kopie aus seinem Zwischenspeicher nimmt, setzt firebase.json für alle Dateien Cache-Control: no-cache (Prüfung per ETag, unverändert = kein erneuter Download). Die Daten in der Datenbank werden dabei nicht verändert. Welche Dateien hochgeladen wurden, steht danach in firebase/.firebase/hosting.cHVibGlj.cache.
Warum kein Passwort abgefragt wird: Bei firebase login meldet man sich einmal im Browser mit dem Google-Konto an. Die CLI speichert daraufhin einen Anmeldeschlüssel im Windows-Benutzerprofil (nicht im Ordner WaWi) und meldet sich damit bei jedem Deploy selbst an – ähnlich wie „angemeldet bleiben“ im Browser. Folgen:
firebase logout meldet ab (danach wieder firebase login); abgelaufene Anmeldung: firebase login --reauth.npm install -g firebase-tools und firebase login (Abschnitt 3). Das Google-Passwort wird nur im Google-Anmeldefenster eingegeben, nie in der Kommandozeile.Alternativen: In der Firebase-Konsole lassen sich für Hosting keine Dateien hochladen (nur Versionen ansehen und zurückholen); die Sicherheitsregeln kann man dort aber von Hand einfügen und veröffentlichen. Ein automatischer Deploy über GitHub wäre möglich, braucht aber mehr Einrichtung und einen dort hinterlegten Schlüssel – für Honigtreu nicht nötig. Zugangsdaten zum Firebase-Projekt nie an Dritte oder an eine KI weitergeben; der Deploy bleibt beim Admin.
Zurück auf einen früheren Stand: Datei aus Sicherung/ als firebase/public/index.html einsetzen und erneut deployen – oder in der Firebase-Konsole unter Hosting → Versionsverlauf eine frühere Version wiederherstellen.
createRahmen + CSS-Block „Rahmen“, in beiden Dateien identisch halten): Kopfzeile: Menü-Knopf #hdr-menue (☰, nur am Handy und nur mit Unterseiten), #hdr-titel zeigt „Bereich · Unterseite“; kein Logo in der Kopfzeile; die Unterseiten sind das Element mit Klasse subnav-quelle im Inhaltsbereich (Lager: .group-subnav, #handel-subnav, #mb-subnav, #etk-modus; Märkte: Verwaltungs-Chips) – am Handy als aufklappende Liste, ab 900 px als Leiste. Hauptmenü unten (Lager: #tabs mit data-group, Märkte: #bottom-nav). Kopfzeile/Leiste werden beim Herunterscrollen ausgeblendet (body.rahmen-weg), die Leiste beim Tippen am Handy (body.tippt). Kürzel #user-badge öffnet „Mein Bereich“ (Reiter profil); Abmelden nur dort (window.APP_LOGOUT).state hält jede Firestore-Sammlung als Liste; je Sammlung ein onSnapshot-Listener über abo(sammlung, feld), Änderungen erscheinen sofort bei allen. Beim Start werden nur die Kern-Daten abonniert (Artikel, Buchungen, Bestellungen, Zugänge, Etiketten); die Daten von „Mein Bestand“, „Handel“, Inventur und Sicherung erst beim ersten Öffnen des Bereichs (ABO_GRUPPEN, TAB_DATEN, abosFuer) – neue Sammlungen dort eintragen. Die Vollsicherung wartet, bis alles geladen ist (datenDa). maybeRerenderOnData() fasst Datenänderungen kurz hintereinander zu einem Neuaufbau des sichtbaren Reiters zusammen (40 ms). Das Protokoll zeigt seitenweise 200 Buchungen (PROTOKOLL_SEITE).claude.use('db') / claude.use('downloads'); ein Block am Anfang von index.html bildet das auf Firebase ab. Neue Funktionen genauso schreiben.movements (Eingang +, Ausgang −) je Sorte, Charge und Lagerort. Bestände nie direkt ändern, sondern immer über Buchungen oder Inventur.FEHLBESTAND und wird in der Übersicht per „ausgleichen“ einer echten Charge zugeordnet (bewegungsart: 'ausgleich', gemeinsame ausgleichId).firestore.googleapis.com). Offline: Hinweis #netz-panel, nur Etikettendruck (HT_startOffline, Artikel-Cache localStorage htl_etk_cache, Mitglied htl_member_cache). Während der Sitzung: Prüfung alle 30 s und bei online/offline-Ereignissen; ohne Verbindung roter Balken und alle Schreibvorgänge (add/set/update/delete/commit) werden abgelehnt. Beim Schließen Warnung, falls ein Schreibvorgang noch nicht bestätigt ist. Firestore-Offline-Speicher ist bewusst NICHT aktiv.sw.js, Cache v3): App-Seite network-first, Firebase-Programmteile (gstatic.com/firebasejs/8.10.1) werden zwischengespeichert, damit die App offline startet; Daten nie aus dem Cache.renderIke); Stammdaten in imkereiEtikett, offline aus localStorage htl_ike_cache; Vorbelegung der Anschrift aus mk_standorte (Wohnort der Märkte-App). Druck 80×50 mm oder A4 (2×5, 80×50 mit 10/5 mm Abstand). Gebinde nur Karton/Eimer/Fass (kein Einzelglas); Eimer/Fass: Startnummer wird fortlaufend hochgezählt (ikeFolge), je Gebinde eigenes Gewicht netto (Rahmen oben rechts) und Wassergehalt. Karton: Gewicht brutto = Anzahl × Glas brutto (IKE_GLAS_BRUTTO, Werte aus der GS1-Liste). GS1-Werte fest in ETK_GS1 (Abgleich mit der Excel-Liste bei Änderungen nötig); Zuordnung etkGs1Treffer: speziellere Sorte vor basis-Sorte; Abgleich etkGs1Ziel. Karton-Nr. 30er: Zähler etkZaehler/{JJJJ} (Feld stand, darf laut Regeln nur steigen) per Transaktion, Protokoll je Nummer in etkKartonNr (jahr, nr, nummer, sorte, charge, mhd, geraet, offline, geprueft); offline vergebene Nummern in localStorage htl_etk_nr, Nachtrag beim Online-Start (etkNrSync); Doppelte = gleiche nummer mehrfach im Protokoll. Fußzeile wird nach gemessener Textbreite umbrochen (ikeFussHtml; mit EAN max. 54 mm). Honigtreu-Karton: Sortenname-Vorschlag = Artikelname ohne Glasgröße (etkSorteAusName).etiketten; Design 80×50 mm fest (siehe Projekt-Dokument etikett-design-karton.md). Strichcode als 1-Bit-Bild, 3 Druckpunkte je Modul (203 dpi), auf ganze Druckpunkte positioniert – nicht verändern, sonst nicht lesbar.bestellungId. Löschen einer solchen Buchung nimmt die ganze Ausführung zurück und setzt die Bestellung wieder auf „offen“.| Sammlung | Inhalt |
|---|---|
members | Freigeschaltete Nutzer (Dokument-ID = E-Mail klein geschrieben; kuerzel, name, admin) |
products | Artikel/Sorten mit Einheit und Kategorie; gtin = Glas-EAN; kartons = Liste {anzahl, ean, mitGlasEan} für Karton-Etiketten (Pflege nur Admins im Reiter Etiketten) |
| Dateiablage (Storage) | Firebase Storage, Bucket honigtreu-lagerverwaltung.firebasestorage.app (Region europe-west3). lieferscheine/{bestellungId}.pdf (Feld bestellungen.lieferschein = pfad, name, groesse, am, von) und Fotos der Märkte-App mk_fotos/{marktId}/{kontaktId}-{n}.jpg (Feld mk_kontakte.fotos), Preislisten der Märkte-App mk_preislisten/{ketteId}.pdf (Feld mk_ketten.preislistePdf; hochladen/löschen nur Admins und Markt-Admins). Regeln in firebase/storage.rules: nur angemeldete Mitglieder (Prüfung gegen members), PDF max. 6 MB, Fotos max. 5 MB; Lesen ist für die Apps gesperrt. Angezeigt wird nur über die Cloud Function dateiHolen (Region europe-west3): sie prüft die Mitgliedschaft, liest die Datei und gibt sie direkt an die App zurück, die sie lokal (blob:-Adresse) anzeigt – es entstehen keine weitergebbaren Download-Links. Deploy: firebase deploy --only storage,functions. |
| Marktbezug | bestellungen und verkaeufe_leh haben optional marktId, marktName, gln (Verkauf zusätzlich marktKette) = Dokument-ID in mk_maerkte. Zuordnung über die GLN des Belegs (belegGlns, Prüfziffer, eigene Nummern 426241354… ausgeschlossen; zusätzlich KI-Feld kunde.gln), unbekannte GLN wird nach Auswahl beim Markt gespeichert (mk_maerkte.gln, glnQuelle: 'Beleg'). Kennungen eines Markts (gln, glnQuelle, glnAm, marktnr, kundennr) darf jedes Mitglied bei jedem Markt ändern; alles andere am Markt nur Admins bzw. das betreuende Mitglied, Lieferantennr./GLN Honigtreu am Markt nur Admins. |
| Kundendaten & Preise (Märkte-App) | mk_ketten/{ketteId} (z. B. rewe, edeka, marktkauf, terra, honigtreuallgemein): kundennr, lieferantennr, glnHonigtreu, stammVon (Marktkauf → EDEKA), beliefertUeber (Bio Company → Terra), felder, preisblatt {gueltigAb, hinweis, positionen[artikel, einheit, ek, vk, gtin, sorteId, ekGH nur allgemein]}, preislistePdf. Lesen alle Mitglieder (auch für die Lager-App nutzbar), schreiben nur Admins/Markt-Admins. Artikel ohne Preis gelten als nicht gelistet; ohne eigenes Preisblatt gilt honigtreuallgemein (EK Einzelhandel für Strecke, EK Großhandel für Großhandel). Die Märkte-App zeigt daraus je Markt „Lieferungen“ und „Umsatz“. |
etkZaehler, etkKartonNr | Karton-Nummern der Honigtreu-30er-Etiketten: Zähler je Jahr (Dokument-ID = Jahr, Feld stand) und Protokoll aller vergebenen Nummern (Sorte, Charge, MHD, Gerät, offline, geprüft). Zählerstand korrigieren nur nach oben (Regeln) |
movements | Alle Lagerbuchungen (Charge, Lagerort, Menge, ggf. bewegungsart, bestellungId, zusatzArtikel) |
bestellungen | Bestellungen mit Positionen und Status offen/ausgeführt; nach dem Ausführen ggf. zusatzPositionen (nicht bestellte, zusätzlich gelieferte Artikel) |
inventuren | Belege der Lager-Inventuren |
imkereiEtikett | Stammdaten für eigene Etiketten je Imkerei (Dokument-ID = Kürzel): name, strasse, plz, ort, telefon, email, logo (Logo als Graustufen-PNG, data-URL, max. 600×240 px). Lesen: alle Mitglieder; schreiben: die Imkerei selbst und Admins (Regel in firestore.rules) |
member… | Mein Bestand je Imkerei: memberErnte = Rohware, memberAbfuellung = Glasware (je mit verfuegbarHonigtreu), dazu Anlieferungen, Korrekturen, Inventuren |
ankaeufe, verkaeufe_*, preise, verguetungssaetze | Bereich Handel (nur Admins dürfen schreiben) |
members eingetragene Adressen dürfen lesen/schreiben.preise und verguetungssaetze dürfen nur Admins ändern (alle dürfen lesen).products: alle Mitglieder dürfen Artikel anlegen/ändern, die Etiketten-Felder gtin (Glas-EAN) und kartons aber nur Admins.etkZaehler: alle Mitglieder lesen/hochzählen, der Stand darf nur steigen; etkKartonNr: alle Mitglieder lesen/anlegen, ändern nur den Vermerk „geprüft“, löschen nur Admins.imkereiEtikett (Stammdaten eigene Etiketten): alle lesen; ändern nur die Imkerei selbst (Dokument-ID = eigenes Kürzel) oder Admins; Logo höchstens 400 kB.firestore.rules ändern und deployen, nie dauerhaft über die Konsole – sonst ist der lokale Stand veraltet.members, products, movements usw. lassen sich von Hand ansehen und reparieren.members das eigene Dokument (ID = eigene E-Mail, klein geschrieben) öffnen oder anlegen und admin auf true setzen.node migrate-update-2026-09.js, falls noch vorhanden bzw. aus einer Sicherung): brauchen Node.js, npm install im Ordner firebase und vorübergehend eine serviceAccountKey.json (aus Vertraulich/ in den Ordner firebase kopieren – nicht nach public – und danach wieder löschen). Alle bisherigen Skripte sind idempotent. Vorher eine Excel-Sicherung ziehen.WaWi/Sicherung).gcloud firestore export (Google-Cloud-CLI, braucht einen Cloud-Storage-Bucket) – für den Fall einer Massenlöschung.serviceAccountKey.json und node_modules ausschließen (.gitignore).Für die Arbeit in der App genügt Schritt 1. Wer die Apps auch pflegen und weiterentwickeln soll, braucht zusätzlich die Schritte 2 bis 6.
WaWi per OneDrive freigeben – aber ohne Vertraulich/: Den Ordner vorher aus WaWi herausnehmen oder nur die Unterordner firebase, firebase-maerkte, Werkzeuge, Hilfe, Sicherung freigeben. Besser für die Zukunft: privates Git-Repository (Abschnitt 11). Absprechen, wer gerade ändert – zwei gleichzeitige Änderungen an index.html über OneDrive erzeugen Konflikt-Kopien.npm install -g firebase-tools, firebase login mit dem eigenen Google-Konto, Python 3 mit pip install reportlab (Abschnitt 3). Test: im Ordner WaWi\firebase den Befehl firebase projects:list ausführen – das Projekt honigtreu-lagerverwaltung muss erscheinen.firebase/README.md (Neuaufbau), das Änderungsprotokoll webapp-stand-kontext.md und die Konzepte im Claude-Projekt „Honigtreu Lagerverwaltung“. Ein Claude-Projekt lässt sich nur innerhalb eines Team-/Enterprise-Tarifs mit anderen teilen; sonst die Projekt-Dokumente herunterladen und dem neuen Admin geben (enthalten keine Schlüssel).Was der neue Admin vorfindet:
firebase/public/index.html) und Märkte-App (firebase-maerkte/public/index.html) – jeweils eine Datei, ohne Build-Schritt, mit jedem Texteditor änderbar (z. B. Visual Studio Code).WaWi/Werkzeuge, für diese Apps erstellt): deploy_pruefung.js (Sicherheitsprüfung vor jedem Deploy, läuft automatisch), hilfe_dokumente_erzeugen.py (Kurzanleitung + Admin-Anleitung als PDF), markt_hilfe_erzeugen.py (Kurzanleitung der Märkte-App), etiketten_erzeugen.py (Muster-Etiketten als PDF; der Etikettendruck selbst läuft in der App).firebase/firestore.rules und die Cloud Function in firebase/functions.serviceAccountKey.json und der Anthropic-API-Key. Wird der Schlüssel doch einmal gebraucht (Notfall, Abschnitt 9), erzeugt der Admin selbst einen eigenen in der Firebase-Konsole und löscht ihn danach wieder (Projekteinstellungen → Dienstkonten).Admin scheidet aus: In der App die Rolle auf „Mitglied“ bzw. „Mitglied inaktiv“ stellen oder den Zugang entfernen, in der Firebase-Konsole aus „Nutzer und Berechtigungen“ entfernen, OneDrive-Freigabe beenden; hatte er einen eigenen Dienstkonto-Schlüssel, diesen unter Dienstkonten löschen.
Zusätzlich zu den bisherigen Adressen (honigtreu-lagerverwaltung.web.app, honigtreu-maerkte.web.app, beide bleiben gültig):
honigtreu-lagerverwaltung → „Benutzerdefinierte Domain hinzufügen“ → lager.honigtreu.de. Die Konsole nennt die DNS-Einträge (meist ein TXT-Eintrag zur Bestätigung und ein A- oder CNAME-Eintrag); diese beim Domain-Anbieter von honigtreu.de für die Subdomain lager anlegen. Dasselbe für die Website honigtreu-maerkte mit maerkte.honigtreu.de.lager.honigtreu.de und maerkte.honigtreu.de hinzufügen (sonst geht die Google-Anmeldung dort nicht).Christian Grune, Vorstand Honigtreu eG – bisheriger Projektinhaber des Firebase-Projekts.
Lager, Bestellungen und Buchungen brauchen eine Internetverbindung, damit alle mit demselben Bestand arbeiten. Bitte Hotspot (Handy) oder WLAN verbinden und dann „Erneut prüfen“ tippen.
Etiketten offline drucken geht erst, nachdem die App auf diesem Gerät einmal mit Internet geöffnet wurde.