Commit Graph

7 Commits

Author SHA1 Message Date
Claude
bed738d8bd fix: verwaiste Projekte archivierbar (Gitea-Repo 404 nicht mehr hart abbrechen)
- archiveRepo: fehlt das Gitea-Repo (404), wird nur das Appwrite-Dokument
  (ent)archiviert statt hart zu scheitern -> orphaned Projekte lassen sich
  aus der Liste entfernen
- Reaktivierungs-Redeploy wird bei fehlendem Repo uebersprungen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 09:19:25 +00:00
Claude
376a8ae34d feat: Projekt-Typ Vorlage (template) - login-geschuetzt, isTemplate-Flag
- neuer Typ template: hasWebsite wie preview, isPublic=false, isTemplate=true
- deriveProjectType erkennt isTemplate; Appwrite-Update schreibt isTemplate
- .webklar-preview.json bekommt template-Flag

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 09:09:57 +00:00
Claude
617d463a5a fix: updateWebsiteProject - kein hasPreview-Attribut, TLS-Sync nach Appwrite-Update
- hasPreview existiert im Live-Schema nicht -> Appwrite lehnte Update ab
- syncPreviewTls muss NACH updateDocument laufen, sonst liest es isPublic
  noch im alten Zustand (oeffentlicher Router bekam faelschlich preview-auth)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 00:30:24 +00:00
Claude
b474c4aa48 feat: Website-Projekte bearbeiten (Name/Subdomain/Typ) + Archivierung
- updateWebsiteProject: synct Name/Subdomain/Typ nach Gitea (.webklar-preview.json,
  Repo-Beschreibung), Preview-Deploy (Redeploy+Teardown+TLS) und Appwrite
- Projekt-Typen: preview (Login), website (oeffentlich ohne Login), project (kein Hosting)
- syncPreviewTls erzeugt fuer isPublic-Projekte Router ohne preview-auth
- archiveRepo: Gitea archived + Appwrite-Flag + Preview-Teardown; Reaktivieren redeployt
- syncReposToAppwrite uebernimmt repo.archived
- Routen: PATCH /:id, POST /:id/archive, POST /:id/unarchive

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 00:21:50 +00:00
d4bd510dcd feat: Kundenportal-Ausbau - Tabs, Projekt-Einblicke, Git-Zeiterfassung, Rechnungen, Chat
Kunden-Dashboard:
- Tab-Navigation: Projekte | Was wurde gemacht | Rechnungen | Chat
- Projekt-Details pro Projekt: letzte Git-Commits (Titel+Beschreibung),
  Projektgroesse, Datei-Uebersicht (Top-Level aggregiert), Ticket-Arbeiten
- Rechnungen: gestylte Liste mit Status-Pillen, Ansehen/Zahlen-Link,
  PDF-Download ueber Server-Proxy (IDOR-geschuetzt)
- Chat mit dem Webklar-Team (Polling, Ungelesen-Badge, viewAs blockiert)

Admin-Dashboard:
- Chat-Tab: Konversationsliste + Thread + Antwortfeld, Ungelesen-Badge

Backend:
- giteaAdmin: getRepoInfo, listRepoCommits, getRepoTreeSummary
- projectInsights: 5-min-Cache, Invalidierung per Gitea-Webhook
- /api/projects/:id/git|files|work mit Ownership-Check (404)
- /api/chat/* (Kunde) + /api/portal-admin/chats/* (Admin), portalMessages-Collection
- mailer: E-Mail-Benachrichtigung an Admins bei Kundennachricht (15-min-Throttle)
- gitWorksheet: dd.mm.yyyy, voller Commit-Body, startTime leer (Zeit-Nachtrag),
  Auto-Webpage-Ticket bei Push auf Projekt ohne Ticket (ensureProjectTicket)
- customerActivity: Git-Push-Eintraege fuer Kunden sichtbar

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 18:01:24 +00:00
cc57cf887a feat: HTTPS-TLS-Sync nach Deploy, Projekte ohne Subdomain, portalPassword-Feld
- previewDeploy.syncPreviewTls(): schreibt Traefik-Router (Host-Regeln) fuer alle
  Preview-Subdomains nach preview-hosts.yml, damit Let's Encrypt Zertifikate
  ausstellt. Laeuft nach jedem Deploy und beim Serverstart (ersetzt das nie
  aufgerufene bash-Script sync-preview-tls.sh).
- createProjectFromTemplate: Subdomain optional. Ohne Subdomain wird nur das
  Gitea-Repo angelegt (projectType 'repo', Status 'created'), kein Deploy.
- customerAdmin: Portal-Passwort liegt jetzt im Feld customers.portalPassword
  statt als __portalPassword__-Prefix in den Notizen; Legacy-Notizen werden
  beim naechsten Update bereinigt. CRM-Stufe (lead/customer) wird beim Setzen
  des Portal-Passworts nicht mehr auf 'active' ueberschrieben.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 16:34:23 +00:00
cf4b3ce4d1 chore: aktuellen Live-Stand sichern (Admin-API, Services, Auth-Erweiterungen)
Sichert den bisher uncommitteten Produktionsstand des Kundenbereich-Servers,
damit kuenftige Deploys (git reset --hard) nichts mehr verwerfen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 16:24:53 +00:00