Die Links auf die anderen Tickets des Kunden hatten keine eigene Farbe und
erschienen im dunklen Design in Browser-Blau (#0000ee), kaum lesbar, dazu
unterstrichen. Sie nutzen jetzt die normale Textfarbe ohne Unterstreichung,
wie die übrigen Listenzeilen (.list-row).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Menüpunkt, die Seiten /roadmaps und /roadmaps/:id, der Roadmap-Kasten im Ticket
und die Plan-Automatik (Auto-Ticket, Knoten-Kommentare, automatischer Abschluss)
sind entfernt. Alte Links landen bei den Tickets. Die Projekt-Kontextbox im
Ticket bleibt und zeigt das zugewiesene Projekt samt den anderen Tickets des
Kunden, nur ohne Plan-Link. Die Daten in roadmaps/roadmapNodes bleiben in
Appwrite unangetastet; das Kundenportal liest sie nicht.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Im Details-Reiter steht eine Projektliste mit Zuweisen, Lösen und
"Neues Projekt"; der Knopf "Projekte zuweisen / bearbeiten", der
Dialog und die zweite Projektliste sind weg.
- Zuweisen bietet nur passende Projekte an: gleicher Kunde oder ohne
Kunde, nicht archiviert, keine Vorlage.
- Lösen nimmt ein Projekt nur noch vom Ticket. Bisher wurde dabei auch
die Kundenzuordnung gelöscht und der Kunde sah seine Vorschau im
Portal nicht mehr.
- Projektkarten ohne README-Vorschau (kostete je Karte einen Abruf) und
ohne nie befüllte Felder (Live-Domain, Commit-Box, "Preview: aktiv");
react-markdown entfällt damit (Lockfile mit Node 20 erzeugt).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Status-Reiter, die Zahlen "Neu"/"Gewonnen" und das Status-Abzeichen
lasen crmStatus, das seit dem 16.07. niemand mehr pflegt (gearbeitet
wird im Akquise-Ticket). Suche, Sucheinstellungen, Pipeline und
Lead-Karten bleiben.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kundenliste startet bei "Feste Kunden" (105 von 110 Einträgen sind
Leads der Lead-Automatik); Reihenfolge Feste Kunden, Leads, Alle, Archiv.
- Der zweite Kunden-Editor im Admin ist weg. Admins legen feste Kunden
mit Portal-Zugang jetzt unter Kunden an ("Neuer Kunde") und löschen sie
auf der Kundenseite ("Kunde löschen", mit Rückfrage); beides wie bisher
über die Admin-API des Kundenportals. Die Kundenseite hat das Feld
Standort, das es bisher nur im Admin gab.
- Die Kundenliste liest direkt aus Appwrite: die Admin-API lieferte
Admins gekürzte Daten, Stern und InvoiceNinja-Abzeichen fehlten dort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Acht Einträge ohne Gruppenüberschriften: Tickets, Planboard, Roadmaps,
Projekte, Kunden, Leads, Finanzen und für Admins Admin.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Finanzen: Liste, Zahlen, PDF und Link zu InvoiceNinja bleiben. Das
Formular "Rechnung erstellen" (auf der Seite und als "Rechnung aus
Ticket erstellen" im Ticket) ist weg; Rechnungen entstehen direkt in
InvoiceNinja. Das Verknüpfen von Kunden mit InvoiceNinja bleibt.
- Filter "Bezahlt" repariert: InvoiceNinja liefert status_id als Text.
- FinancePage.jsx und InvoicePanel.jsx waren Windows-1252 kodiert und
zeigten live "�"; jetzt UTF-8, dazu Umlaute in den Texten.
- Dashboard entfernt (doppelte Finanzzahlen, "Offen" zählte falsch);
alte Links führen zu den Tickets.
- Admin: Reiter "Konfiguration" (nur noch Prioritäten, die seit Paket B
niemand liest) mit useAdminConfig entfernt; Admin startet bei Kunden.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paperless enthält 0 Dokumente, der Upload wurde nie benutzt. Weg sind:
die Seite Dokumente (alte Links führen zu den Tickets), der Menüpunkt,
der Reiter Dokumente in Ticketkarte und Kundenseite, der Upload-Dialog
(legte Dateien zusätzlich ungelesen im Appwrite-Bucket ab), das Feld
"Paperless-Korrespondent" und das Abzeichen "Docs", auf dem Dashboard
die Kachel Dokumente und "Dokument hochladen", im API-Client die
Paperless-Aufrufe. Gespeicherte Daten bleiben unverändert; die
Paperless-Routen im Backend ticket-integrations sind nicht angefasst.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Status: 6 statt 10, auf Deutsch (Offen, In Arbeit, Wartet auf Kunde,
Prüfung, Erledigt, Storniert). Gespeichert werden die Werte, die das
Kundenportal für die Fortschrittsleiste kennt; alte Werte wie Assigned
werden weiter angezeigt ("Eingeplant"), sind aber nicht mehr wählbar.
- Zuweisen ändert den Status nicht mehr; neue Tickets starten "Offen".
- Priorität: Schalter "Dringend" statt fünf Stufen (dringend = 4, normal
= 2; alte Stufen Hoch/Kritisch gelten als dringend), rotes Abzeichen.
- Ticketliste: Standardansicht "Aufträge" ohne Akquise-Tickets; Filter
Typ (Aufträge/Webpage/Migration/Projekt/Akquise/Alle), 6 Status-Gruppen,
"Nur dringende". Die toten Felder Kunde, Benutzer/Thema und Datum sind
durch eine echte Suche ersetzt (Kunde, Betreff, Angefragt von, WOID).
Deep-Link ?woid= zeigt das Ticket weiter unabhängig von Art und Status.
- Formulare "Neues Ticket" und "Arbeitsblatt" auf Deutsch; raus sind
Workload Estimate, Requested for und die Service-Art am Ticket
(gespeichert wird weiter Fernwartung).
- Ticketkarte: Projekt/Preview im Details-Reiter (4 statt 5 Reiter), eine
Zusammenfassungszeile statt der großen Statistik, doppelter
Projekte-Stift weg, Service-Abzeichen weg.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Der Knopf "+ Abo" / "✓ Abo" (Arbeitszeit vom Stundenguthaben des
Wartungs-Abos abziehen) war seit cf1d653 nur in der toten Ticketzeile
angeschlossen und deshalb nie sichtbar. Jetzt hängt er an der echten
Ticketkarte: bei jedem Arbeitsblatt mit Arbeitszeit, auch bei Git-Pushes
mit nachgetragener Zeit; Kommentare und offene Pushes haben keinen.
Der Hinweis "Abo-Stunden" ist jetzt lesbar (weiße Schrift, Abstand).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
three, postprocessing, motion, clsx, tailwind-merge sowie @types/react
und @types/react-dom brauchte nur der gelöschte tote Code (bzw. es gibt
kein TypeScript). Das spart bei jedem Deploy die Installation von
three.js & Co. Lockfile mit Node 20 (wie der Deploy-Container) erzeugt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 Einrichtungs- und Fix-Notizen vom Dezember 2025 beschrieben das alte
Appwrite (cloud.appwrite.io bzw. alte Projekt-IDs), zufällige WOIDs und
Felder, die es so nicht mehr gibt. Das README beschreibt jetzt den echten
Stand: Deploy über Branch test (Achtung: jeder gepushte Branch geht live),
Datenmodell in Kurzform und das Zusammenspiel mit Kundenportal und
ticket-integrations. LOCAL_DEV.md bleibt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher lud jeder Seitenaufruf Lato und das ungenutzte Open Sans von
fonts.googleapis.com; dabei gingen die IP-Adressen der Mitarbeiter an
Google. Jetzt liegt Lato Regular 1.105 (SIL Open Font License, Lizenz
daneben) im Repo. Gemessen gegen Google: gleiche Textbreite und
Zeilenhöhe; wie bisher nur der Schnitt 400.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
isDemoMode war nie aktiv: appwrite.js hat immer eine Projekt-ID als
Fallback. Weg sind die Demo-Zweige in Anmeldung und Hooks sowie die
Beispieldaten aus der alten IT-Welt (Serverausfall, Drucker, Kunde A–E).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AuthContext schickte bei jedem Seitenaufruf einen Debug-Eintrag an
http://127.0.0.1:7284 (Überbleibsel einer Fehlersuche). Live landete er
im Nichts; neuere Browser können für solche Aufrufe ins lokale Netzwerk
eine Rückfrage anzeigen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nie importierte Dateien (rund 1.900 Zeilen): die alte Ticketzeile
TicketRow mit ihren Hilfsdialogen EditWorksheetTimeModal und
ResponseDropdown, TicketFilters, WebpageProjectPanel, ModernSidebar
(+ lib/utils), die three.js-Animation PixelBlast und createDummyTicket.
Dazu die Helfer, die nur diese Dateien benutzt haben
(isTemplateProject/getAvailableProjects, WEBPAGE_TICKET_TYPE,
PREVIEW_TEMPLATE_NAME), die nicht existierenden Collections users und
attachments, getWorksheetsByEmployee und der nur von TicketRow benutzte
zweite "Zeit nachtragen"-Weg in der Arbeitsblatt-Liste.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- "Schnelluebersicht" war eine englische Alt-Tabelle ("WOMS Ticket Quick
Overview ... EOL =)"), die nur die Ticketliste wiederholte.
- Der "Verlauf"-Knopf zeigte nur Statuswechsel aus Arbeitsblättern (bisher
zwei); jeder Wechsel steht weiterhin im jeweiligen Arbeitsblatt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die drei Seiten hatten keine Funktion (feste Nullen, ein alert(),
drei Beispielsätze). Alte Links und unbekannte Adressen führen jetzt
zu den Tickets statt auf eine leere Seite; Menügruppen ohne Eintrag
werden nicht mehr angezeigt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Git-Pushes bleiben orange mit "Zeit offen", bis Beginn und Minuten
nachgetragen sind; danach grün mit "Zeit eingetragen".
- Kommentare sind blau statt grün, damit Grün nur noch "erledigt" heißt.
- Hinweise im farbigen Kopf in weißer Schrift (vorher kaum lesbar).
- Pro Ticket werden alle Arbeitsblätter geladen (Appwrite lieferte ohne
limit nur 25), zugeklappte Ticketkarten laden gar keine mehr.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
70 von 78 Arbeitsblättern sind Git-Pushes, die das Kundenportal mit
employeeId "gitea" anlegt; in employeeName steht der Gitea-Name des
Pushers ("knso", "ANDJ", "JUSN" oder der volle Name). Sie gehören dem
Mitarbeiter mit diesem Kürzel oder Namen - der eigene employees-Eintrag
kommt jetzt aus dem AuthContext.
Bei offenen Pushes heißt der Button "Zeit nachtragen": Beginn ist Pflicht,
das Ende ist der Push. Beim Speichern wird isComment false, damit die Zeit
in der Arbeitszeit zählt (wie früher im Modal der alten Ticketzeile).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eigene Arbeitsblätter (employeeId = angemeldeter Benutzer, kein reiner
Kommentar) bekommen im Kopf den Button "Zeiten bearbeiten". Der Dialog
ändert Beginn, Ende und Arbeitszeit; die Minuten rechnen wie beim Anlegen
mit, von Hand eingetragene Minuten bleiben stehen. Gespeichert werden nur
die fünf Zeitfelder, wieder als dd.mm.yyyy / hhmm.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Start und Ende mit Kalender und Uhrzeitfeld (gemeinsame Komponente
DateTimeInput, auch im Ticketformular); gespeichert weiter als
dd.mm.yyyy / hhmm, das Ende rückt mit, wenn der Start später liegt
- Service Type nur noch "Fernwartung (remote)" oder "Vor Ort beim Kunden",
vorbelegt vom Ticket; COMMENT entfällt (dafür gibt es "Nur Kommentar")
- Minuten werden aus den Uhrzeiten berechnet (über Mitternacht weiter)
- Minutenfeld nimmt ganze Minuten: mit step 15 ließ der Browser berechnete
Zeiten wie 70 Minuten nicht absenden
- Arbeitsblatt-Liste und -Statistik zeigen die Service-Art auf Deutsch
(Remote und altes Off Site zusammen als Fernwartung)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Arbeitsblatt: Feld "New Response Level" entfernt; ein Statuswechsel
schreibt am Ticket nur noch den Status
- Arbeitsblatt-Verlauf: Zeile "Response Level: alt -> neu" entfernt
- Ticketkarte: System-Badge alter Tickets entfernt
- Schnellübersicht: Spalte "System" entfernt
- Ticketfilter: Auswahl "System" entfernt (wurde ohnehin nie abgefragt)
- Kundendetails: Ticketzeile zeigt nur noch die Art statt "Art · System"
Die Werte bleiben in der Datenbank erhalten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ticketkarte: Response-Level-Auswahl entfernt; Service Type als
"Fernwartung" / "Vor Ort" (altes "Off Site" zählt als Fernwartung)
- Admin > Konfiguration: Ticketarten, Systeme, Reaktions- und Leistungsarten
ausgeblendet, da das Formular sie fest vorgibt; editierbar bleiben die
Prioritäten, die Listen bleiben beim Speichern im Config-Dokument erhalten
- Kaputtes Trennzeichen "�" wieder "·" (Ticketkarte, Kundenliste, Kundendetails)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Work Order Type nur noch Webpage und neu Migration (Kunde kommt von anderem Anbieter)
- Affected System, Response Level und Benachrichtigungsfelder entfernt
- Service Type: Fernwartung (remote) oder Vor Ort beim Kunden, Standard Fernwartung;
gespeichert werden weiter "Remote" / "On Site"
- Start und Ende mit Kalender und Uhrzeitfeld; gespeichert weiter als dd.mm.yyyy / hhmm
- Requested by/for schlagen Kunden, Mitarbeiter und Namen aus den letzten Tickets vor,
die des gewählten Kunden zuerst
- Neue Tickets speichern Kundenname und Ort (die Karte zeigte sonst "Unbekannt")
- Ticketfilter kennt Webpage und Migration
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Haken beim Anlegen + Umschalter in der Worksheet-Liste setzen
worksheets.countsToPlan. Nur markierte Arbeitszeit wird im Kundenportal
vom Abo-Stundenguthaben abgezogen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Das Planboard war eine Huelle - sieben Spalten mit "Keine Termine". Es zeigt
jetzt die terminierten Tickets der Woche: Uhrzeit, Kunde, Betreff, Kuerzel des
Zustaendigen. Klick fuehrt ueber den vorhandenen Deep-Link /tickets?woid=... ins
Ticket. Heute ist hervorgehoben, "Heute" springt zurueck.
Ein Termin ist bewusst kein eigener Datensatz, sondern die Ticketfelder
startDate/startTime/endTime/assignedTo. Die Rechnungsanalyse im Kundenportal
schreibt genau diese Felder, deshalb steht ein dort vereinbarter Termin ohne
Umweg hier - und Ticket und Termin koennen nicht auseinanderlaufen.
Die Aufbereitung liegt in src/lib/planboard.js, damit sie ohne UI testbar ist:
Datum kommt als Text und real auch einstellig ("22.5.2026"), Uhrzeit als
"hhmm"; beides wird tolerant gelesen, Unsinn faellt raus statt zu verrutschen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Leads-Tab zeigt/verfolgt nur noch die Automatisierung; Status & Doku laufen im Akquise-Ticket (WOID-Chip). Alte Notizen bleiben read-only sichtbar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Vorschau-Button (Auge, primary) je Lead -> previewUrl der deployten Website
- previewUrl live gejoint (Lead->Kunde per E-Mail->websiteProjects status deployed/ready); Preview haengt an anderem Repo als lead.repoUrl -> Kunden-Join
- attachWoids -> attachLeadLinks (haengt jetzt woid + previewUrl an)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Maps/Website/Repo nur noch Icon (title/aria-label bleiben)
- WOID je Lead als klickbarer Chip -> /tickets?woid= (Lead->Kunde->Akquise-Ticket, live in useLeads gejoint)
- useWorkorders: woid server-seitig filterbar (macht den bisher wirkungslosen WOID-Filter nutzbar)
- TicketsPage: ?woid= Deep-Link liest Param, filtert ueber alle Status
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Leads parken jetzt nach Schritt 3 am Anreicherungs-Gate, bis die taegliche
Cloud-Routine Bilder/Logo/Text-Feinarbeit liefert (POST /webklar-hook/enrich).
PipelineBar zeigt dafuer ein eigenes Label statt des (manuell)-Fallbacks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Neue Seite /leads unter CRM: Lead-Karten (Score, Google-Bewertung,
Website-Status, Kontakt, Maps/Website/Repo-Links), KPI-Zeile,
Status-Workflow (neu/kontaktiert/interessiert/gewonnen/abgelehnt),
Notizen, Portal-Zugangsdaten
- Sucheinstellungen (Branche, Staedte oder ganz Deutschland, max. Leads
pro Stadt, Mindestbewertung, E-Mail-Pflicht, Website-Kriterium,
Zusatzhinweise) -> Appwrite leadSettings, gelesen von der Routine
ueber webklar-hook /config
- Ersetzt die Excel-Masterliste als Lead-Ansicht
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Aktualisieren-Button ohne Text-Label, konsistent zur Toolbar; Spinner
auch beim Hosten. Tooltips via title/aria-label.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Dritter Aktions-Button neben Bearbeiten/Vorschau: stoesst fuer bereits
gehostete/deployte Projekte den Deploy erneut an (updateWebsiteProject
mit gleichem Typ), damit eine ueberarbeitete Website neu geladen wird.
Spinner waehrend der Aktualisierung.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Sync/Neu als Icon-Buttons (Tooltip statt Text), Sync-Icon dreht beim Laden
- Textsuche nach Titel/Subdomain/Repo
- Filter nach Kunde (Dropdown)
- Filter nach Mitarbeiter (ueber zugeordnetes Ticket -> assignedTo)
- alle Filter kombinierbar mit der bestehenden Kategorie-Auswahl
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Karten zeigen fuer Hosting-Typen (Preview/Website/Vorlage) einen Status:
gehostet (ready/deployed) vs nicht deployt (synced etc.)
- nicht-deployte Projekte: Button "Jetzt hosten" -> deployt via PATCH-Route
(setzt status=deployed/ready), danach funktioniert die Preview
- deployte Projekte zeigen weiterhin den Preview-Link
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Kunden:
- Neues Feld customers.archived; Archivieren/Wiederherstellen-Button in der
Kundendetailseite, 'Archiviert'-Badge
- CustomersPage: vierter Filter-Tab 'Archiviert'; archivierte Kunden aus
Alle/Leads/Feste Kunden ausgeblendet, nur im Archiv-Tab sichtbar
Tickets:
- Status-Mehrfachauswahl per Checkbox im Filterbereich; Default alle Status
ausser 'Closed' (= archiviert). 'Standard' / 'Alle inkl. Archiv' Shortcuts
- useWorkorders: Statusfilter serverseitig via Query.equal(array) statt
Client-Filter nach dem Limit (behebt Bug, bei dem archivierte Tickets die
neuesten Slots belegten und aktive verdraengten)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>