433 Commits
Author SHA1 Message Date
ClaudeandClaude Sonnet 5.5 822387e4f7 Design: UI-Bausteine rendern die neuen Klassen (Button, Badge, Card, Kopf, Reiter, Stat)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Sonnet 5.5 5a0307c9d6 Design: Geruest mit Textmenue, Schublade fuers Handy, Logo; Footer und Einklappen entfallen
Weisses Geruest (.shell, feste Seitenleiste, Dokument-Scroll), Menue als Textliste mit Zaehlern und Serverpuls-Punkt, Schublade mit Scrim und Esc auf dem Handy, Logo-Komponente und Favicon. Footer, Einklappen (lib/sidebar.js) und das alte Menue-CSS (.side*, .app-*) sind entfernt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Sonnet 5.5 c19e19968d Design: KOMPAT-Schicht fuer Altklassen, tote Regeln und !important entfernt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Sonnet 5.5 c18a29c748 Design: Bausteine aus dem Prototyp, gleichnamige Altregeln ersetzt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Sonnet 5.5 2e82be3c1a Design: weisse Tokens, Aliase, Basis und Hilfsklassen, Systemschrift
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Haiku 4.5 bb110a734e Ticketstatus: statusTone fuer die neuen Badge-Toene
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 3179b9cb41 Plan P1: Menue-Icon-Pruefung erst in Task 5, genauere Pruefung auf doppelte Grundregeln
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 74e70c654f Plaene: Werkzeug-Vertrag nach P0-Review (Ausschluss per !, feste Uhr, missing-asset, bad-text)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 18e8f3bda5 LeadsPage und useLeads entfernt (seit Lead-Pause unbenutzt)
Ausgangswerte: 312 Tests, JS 680818 B, CSS 64433 B

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 e28162eabf node_modules nicht mehr im Repo (Deploy installiert ohnehin neu)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 9a60698a87 Plaene: TP2-Pruefung gegen den lokalen Branch (nie gepusht)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 4af78f0bad Plaene fuer das weisse Design (Uebersicht, P0-P10)
Umsetzungsplaene je Paket mit gemeinsamen Regeln (env.sh/check.sh,
Gate-Schema, CSS-Reihenfolge, TP2-Pruefung vor jedem Paket) und den
Schnittstellen aus P1. Gegen Spec und untereinander geprueft (zwei
Pruefer, Korrekturrunde, Nachpruefung).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 9d604aa550 Konzept: weisses Design fuer WOMS (Spec + Umbaukarte)
Steriles Weiss, kaum Rahmen, kaum Icons, Akzent Schwarz, Ticket als
eigene Seite. Pakete P0-P10, jedes einzeln ueber ein Tag live.
Gegen den Code geprueft (4 Pruefer + Gegenpruefung, 66 Befunde
eingearbeitet).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:02:54 +00:00
ClaudeandClaude Opus 5.5 00fa229235 Shop Review B I-8: Webshop ohne Zahlung nur mit Zustimmung in Textform aktivieren
Das Textform-Formular (Haken, Datum, Weg, Chat-Vorlage) gilt wie beim Terminplaner auch
fuer den Webshop, wenn das Portal im Feld shop textformNoetig meldet. Kaestchentext und
Chat-Vorlage nennen die Unterlagen des Webshops, die Fassung und die Erklaerungen, die das
Portal im Nachweis speichert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 09:45:31 +00:00
ClaudeandClaude Opus 5.5 919d96f7a0 Öffnungszeiten: Status "Leisten live – Einbau läuft" nur bei einbau angestossen
In der Einrichtung nennt der Statustext "Leisten live – Einbau läuft" nur noch, wenn der Neubau angestossen ist.
Bei einbau manuell oder leer steht "Einbau läuft (Team setzt die Skript-Zeile von Hand)"; "wartet auf die Zeiten des Kunden" geht weiter vor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 09:10:45 +00:00
ClaudeandClaude Opus 5.5 0a2eab85d5 Webshop: Funktionen-Karte mit Anfrage annehmen/ablehnen, Stripe-Stand, Kennzahlen und Rechtliches-Karten
Webshop als Funktion im Reiter Funktionen (Aktionen wie beim Terminplaner), Panel je Projekt mit Anfrage,
Entscheidung mit Begruendung, Stripe-Status und Zahlen; Karten Leistungsbeschreibung und AVV Webshop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 08:47:19 +00:00
ClaudeandClaude Opus 5.5 3d67aa88cf Öffnungszeiten: Team-Panel, Ersatz-HTML und Rechtliches-Karte
Panel unter der Zeile Öffnungszeiten live (Header-Selektor, Kontakt-/Hinweis-Leiste aus, Speichern mit teamVersion,
Ersatz-HTML kopieren je Plan), Meldung zum Ersatz-Ticket nach dem Abschalten, Hindernis an aktionen, Statustext der Zeiten,
Team-API (GET ersatz, PATCH team), Karte Leistungsbeschreibung Öffnungszeiten live in setup-legal (Schlüssel höchstens 36 Zeichen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 07:12:04 +00:00
ClaudeandClaude Opus 5.5 4c3f67eadc Merge origin/test in feature/terminplaner-tp2 (Projekte: Anlegen, Archiv, Vorlage)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 07:12:04 +00:00
ClaudeandClaude Opus 5.5 878a530bd7 Terminplaner: Warnung im Dialog, wenn K16 mit den Unterlagen nicht rausging
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 07:05:44 +00:00
ClaudeandClaude Opus 5.5 994347408d Öffnungszeiten: Register und Texte im Ticketsystem
Funktionen-Reiter kennt "Öffnungszeiten live" (zeiten) hinter dem Terminplaner:
Bestätigungstexte, Site-Key, Aktionen je Zustand (Abnahme nur ohne Hindernis
"zeiten_fehlen"). Neues Modul zeitenView.js: Statustext (Einbau läuft / wartet
auf die Zeiten des Kunden / Abo-Ende mit Frist), navSelektorFehler (Spiegel
der Portal-Regel) und teamBody für PATCH .../zeiten/team. Protokoll-Label
für zeiten_gespeichert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 07:02:30 +00:00
ClaudeandClaude Sonnet 5.5 72eedeb59c Terminplaner: Abschalten-Dialog nennt Löschung nach 30 Tagen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 06:36:12 +00:00
ClaudeandClaude Sonnet 5.5 89f5bd4bc6 Rechtliches: Schlüssel höchstens 36 Zeichen
Der Test der Karten-Schlüssel prüft jetzt die Appwrite-Grenze für eigene
Dokument-IDs (36 Zeichen) statt 64.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 05:45:27 +00:00
ClaudeandClaude Sonnet 5.5 225e2f1b74 Rechtliches: Karten für Leistungsbeschreibung, AVV und Widerrufsbelehrung des Terminplaners
Das Setup-Skript legt drei weitere Karten an (sort 7 bis 9, liveUrl = Alias-Seiten
ohne Fassungsdatum). Es legt nur Karten an (idempotent); Ausfuehrung mit API-Key
und Upload der Versionen macht der Inhaber.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 05:08:42 +00:00
ClaudeandClaude Sonnet 5.5 45e5dc30dc Terminplaner: Staff-Aktivierung nur mit Zustimmung in Textform (Modus on), WOMS
Im Dialog "Terminplaner ohne Zahlung aktivieren?" erscheinen, wenn das Portal
termine.textformNoetig meldet, der Haken (Leistungsbeschreibung und AVV in
der Fassung, Ausschluss Gesundheitsbereich), das Datum der Zustimmung und der
Weg (Chat | E-Mail) sowie die Textvorlage fuer den Chat mit Kopierknopf
(versionierte Adressen aus dem Portal). "Ja" bleibt gesperrt, bis alles
stimmt (canSubmitTextform mit minDate = Fassung); der Rumpf traegt
textformDate und textformChannel. News und Abschalten bleiben unveraendert.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 05:07:37 +00:00
ClaudeandClaude Sonnet 5.5 857e001911 WOMS: Einbauanleitung als Panel mit Kopierknoepfen, Abnahme-Knopf und Ticket nachlegen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 02:08:04 +00:00
ClaudeandClaude Sonnet 5.5 c0015544c4 WOMS: Aktionen und Anleitungs-Logik fuer den Terminplaner
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 01:54:24 +00:00
ClaudeandClaude Opus 5.5 603d08c9c2 Projekte: zur Vorlage gemachtes Projekt verschwindet nicht mehr
Vorlagen stehen absichtlich nur in der Ansicht "Vorlagen" (Admins). Nach
dem Speichern als Vorlage fiel das Projekt deshalb kommentarlos aus
"Aktive Projekte" (SHK-vorlage, 04.10.2026).

- nach dem Bearbeiten in die Ansicht wechseln, in der das Projekt jetzt
  steht, mit Hinweis ("steht jetzt unter Vorlagen")
- Suche zeigt Treffer in ausgeblendeten Ansichten (Vorlagen, Archiv) mit
  Klick zum Wechseln
- Hilfen viewShowing / matchesSearch / hiddenMatches in lib/projectList.js

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 20:01:38 +00:00
ClaudeandClaude Sonnet 5.5 6f0371283e Funktionen-Reiter: Abschaltgrund und Löschdatum des Terminplaners
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:44:23 +00:00
ClaudeandClaude Opus 5.5 c262268015 Projekte: neue Gitea-Repos beim Oeffnen der Projekte-Seite abholen; Review-Kleinigkeiten
- Projekte-Seite holt neue/archivierte Repos selbst ab (vorher bis zu 10 Minuten unsichtbar)
- Import-Drossel: nach einem Fehler sofort neuer Versuch
- Zuordnen-Assistent nennt den Status einer vorhandenen Preview
- Ticket "Neues Projekt": ungueltige Subdomain wird abgewiesen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 13:33:40 +00:00
ClaudeandClaude Opus 5.5 f4c8b235b9 Projekte im Ticketsystem: Anlegen, Archiv und Anzeige repariert
- Neues Projekt (Projekte-Seite): Repo-Name blieb nach dem ersten
  Buchstaben der Subdomain stehen ("m" statt "musterfirma")
- Ticket "Projekt waehlen": archivierte Repos nach Flag ausblenden, nicht
  nach status (reaktivierte fehlten, archivierte wurden angeboten)
- Projektliste: "Aktive Projekte" + neue Ansicht "Alle inkl. Archiv";
  Liste wird auch nach einem Anlege-Fehler neu geladen
- Kundenauswahl: "Kein Kunde" entfernt Kunde und Ticket wirklich (mit
  Rueckfrage); beim Kundenwechsel bleibt kein fremdes Ticket haengen
- Zuordnen-Assistent ueberschreibt eine vorhandene Website nicht mehr
- Neues Projekt am Ticket bekommt die Art Website
- Umlaute in Subdomains wie im Portal (mueller statt m-ller)
- Preview-Block nur mit gespeicherter Subdomain; archivierte Projekte
  erst reaktivieren, bevor sie bearbeitet werden
- Repo-Import beim Aufklappen hoechstens einmal pro Minute

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 13:23:01 +00:00
ClaudeandClaude Opus 5.5 78bc99a73b Login nur fuer Mitarbeiter (Label), Kunden-Konten werden abgewiesen
Kunden haben Konten im selben Appwrite-Projekt und konnten sich mit ihrem
Portal-Passwort im Ticketsystem anmelden; dabei entstand sogar automatisch ein
employees-Eintrag.

- lib/staffAccess.js: Zugang nur mit Label "mitarbeiter" oder "admin"
- AuthContext: Konto ohne Label -> Sitzung sofort beenden, Hinweis aufs
  Kundenportal (Login, Neuladen, nach dem 2FA-Code); employees-Eintrag nur
  noch fuer Mitarbeiter
- setup-legal.mjs: Rechte nur fuer die Labels (ein erneuter Lauf oeffnet
  nichts mehr fuer "users")

Die eigentliche Sperre sind die Appwrite-Rechte (Kundenportal
scripts/mitarbeiter-zugang.mjs --rechte).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 10:54:16 +00:00
ClaudeandClaude Sonnet 5.5 65e9931f2c Terminplaner: Abschluss – Site-Key des Terminplaners im Funktionen-Reiter mit Kopierknopf
Die Zeile Terminplaner zeigt den siteKey aus der Antwort des Portals in kleiner Schrift mit fester
Breite und einem Kopierknopf (copyText aus CopyableCredential, mit Ersatzweg ohne Zwischenablage).
Damit braucht der Einbau (Schritt L4 des Pilots) keinen Datenbankzugriff mehr.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 01:49:23 +00:00
ClaudeandClaude Sonnet 5.5 426a5d6654 Funktionen-Reiter: News und Terminplaner je Projekt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:57:03 +00:00
ClaudeandClaude Opus 5.5 36eb55b81b Sidebar: Projekt-Admin entfernt (Admin-Panel abgeschaltet)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 03:55:04 +00:00
ClaudeandClaude Opus 5.5 feda436936 Listen der Admin-Bereiche stapeln nach verfuegbarer Breite (Tablet quer, halbes Fenster)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 03:16:33 +00:00
ClaudeandClaude Opus 5.5 281c49d406 Abo-Angebote im Ticketsystem: Sammelliste, neues Angebot, Kunden-Reiter Abo & Angebote
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 03:05:12 +00:00
ClaudeandClaude Opus 5.5 109aef6805 Gutschriften im Ticketsystem: Sammelliste, Pruefung und Entscheidung, Kunden-Reiter
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 03:02:24 +00:00
ClaudeandClaude Opus 5.5 cef0d5465e Kundenseite: Abo-Status und Funktionen; Seite E-Mail-Speicher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 02:58:37 +00:00
ClaudeandClaude Opus 5.5 91d526e909 Team-API, Sidebar-Zaehler und Format-Hilfen fuer Gutschriften, Angebote und E-Mail-Speicher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 02:55:48 +00:00
ClaudeandClaude Opus 5.5 813c6a7e18 Chat: Korrekturen aus dem Abschlussreview
- Gespraech startet nicht neu, wenn der Kundenname nachlaedt (Entwurf bleibt, kein verwaister Timer)
- Neue Nachricht an Kunde: erst die eindeutige Beschriftung Name · E-Mail · Kd.-Nr. oeffnet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:46:51 +00:00
ClaudeandClaude Opus 5.5 eb0b889203 Chat im Ticketsystem: Messenger unter Kunden, Reiter Chat auf der Kundenseite
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:35:59 +00:00
ClaudeandClaude Opus 5.5 005875d970 Sidebar: Chat als Unterpunkt von Kunden mit Zahl der ungelesenen Nachrichten
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:32:24 +00:00
ClaudeandClaude Opus 5.5 717a3323fa Chat: Team-API und Laden des Chat-Bausteins vom Kundenportal
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 23:31:19 +00:00
ClaudeandClaude Opus 5.5 fce2f41463 Kundenseite: Kundenansicht oeffnen, letzter Login, Preview per Einmal-Link
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:44:50 +00:00
ClaudeandClaude Opus 5.5 370724a9a7 Kundenseite: Reiter in der Adresse, Uebersicht mit Umlaut, Protokoll der Kundenansicht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:40:42 +00:00
ClaudeandClaude Opus 5.5 8c7a3fcced Team-API des Kundenportals und Oeffnen im neuen Tab ohne Pop-up-Sperre
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:39:15 +00:00
ClaudeandClaude Opus 5.5 52968b3017 Analyse: Einschalten im WOMS nur mit Datum und Weg der Zustimmung in Textform
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 19:02:05 +00:00
ClaudeandClaude Sonnet 5.5 72f07410fe Finanzen: Rueckfrage vor dem Senden, Anschrift des Kunden pruefen, Fehlermeldungen im Bild
Senden einer Rechnung (Dialog und Entwurf in der Tabelle) fragt vorher: "Rechnung fuer
<Kunde> ueber <Betrag> jetzt festschreiben und an <E-Mail> senden? Danach laesst sie sich
nur noch stornieren."

Fehlt dem Kunden Strasse, PLZ oder Ort, zeigen Rechnungsdialog und Kundenansicht die
Warnung "Adresse des Kunden unvollstaendig ..." mit Weg zur Uebersicht, und Senden ist
ueber 250 € gesperrt (§ 14 Abs. 4 Nr. 1 UStG, Kleinbetragsrechnung); Entwuerfe bleiben
moeglich. Reine Helfer addressComplete und invoiceSendGate samt Tests.

Fehlermeldungen in Rechnungs- und Zuordnen-Dialog werden per scrollIntoView
({ block: 'nearest' }) in den sichtbaren Bereich geholt.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 15:22:00 +00:00
ClaudeandClaude Sonnet 5.5 1e72faf97c Finanzen: Portal-Client mit deutschen Fehlertexten fuer Proxy-Fehler und abgelaufene Anmeldung
Der Anfrage-Kern liegt jetzt in financeRequest.js (rein, fetch und createJWT werden
injiziert, unter Node testbar). 502/503/504 ohne JSON-Antwort und Netzfehler melden
"Das Kundenportal ist gerade nicht erreichbar."; scheitert createJWT, kommt
"Anmeldung abgelaufen. Bitte neu anmelden." (status 401). Meldungen des Portals bleiben.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 15:21:53 +00:00
ClaudeandClaude Sonnet 5.5 e9cfae28ee Finanzen: Steuerkarte mit Orientierungshinweis und neuer Anteilsformulierung, Ladetext auf Deutsch
TaxCard zeigt am Ende immer "Orientierungswert, ersetzt keine Steuerberatung."; der
Anteil heisst "<x> % der Grenze von 25.000 €" statt "<x> % der 25.000-€-Grenze".
AdminRoute zeigt "Wird geladen …" statt "Loading...".

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 15:21:53 +00:00