Commit Graph
67 Commits
Author SHA1 Message Date
rootandClaude Opus 5.5 e6d603cd0c Kontaktkarte: CTA-Button mit 4,5:1 Kontrast (Weiß auf dunklerem Blau)
Weiß auf #0793CF kam nur auf 3,45:1 (hell und dunkel). Der Button auf der
Kontaktkarte nutzt jetzt hsl(198 93% 35%) = 4,76:1, beim Hovern
hsl(198 93% 30%) = 6,08:1. Der Test nimmt den Button nicht mehr aus,
sondern prüft Ruhe- und Hover-Farbe aller Buttons auf den Karten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:10:27 +00:00
rootandClaude Sonnet 5.5 003f9e67aa Tests: 404-Konsolenrauschen unterdrückt, Glow-Beschreibung präzisiert
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:56:02 +00:00
rootandClaude Sonnet 5.5 897d594dde Karten im hellen Modus lesbar: Kartenfarbe nach Theme
Die BorderGlow-Karten in Values, Kontaktabschnitt und Über uns hatten
dunkle Hintergründe fest verdrahtet, ihr Text nutzt aber Theme-Farben
(Kontrast 1,07:1 im hellen Modus). BorderGlow kennt jetzt
lightBackgroundColor und wählt die Kartenfarbe per CSS nach Theme
(--card-bg-dark / --card-bg-light, html:not(.dark)), ohne Flackern beim
Laden. Dunkel behält exakt die bisherigen Farben (hsl(0 0% 6%), #120F17,
hsl(0 0% 4%)); hell nutzt hsl(0 0% 96%) mit sichtbarem Rand. Der
Kantenschein wird im hellen Modus normal statt mit plus-lighter gemischt
und in Violett gezeichnet, sonst wäre er auf Weiß unsichtbar.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:48:36 +00:00
rootandClaude Sonnet 5.5 194301c6af Glow-Überschriften: Fix A aus der Hover-Analyse
Der Glow der Überschriften (Leistungen, Ablauf) wacht jetzt etwa 180 px
vor der SVG-Box auf (Zeiger-Tracking am window, nur feine Zeiger), bildet
den Mauszeiger über getScreenCTM korrekt auf die viewBox ab, blendet
weich per Opacity ein und aus und klebt auf Touch-Geräten nicht mehr.
Screenreader hören das Wort einmal (role=img mit aria-label, Textknoten
aria-hidden). Der Diff aus /root/reports/webklar-relaunch-2026-10-01/
hover/fix/text-hover-effect.fixA.diff ließ sich unverändert anwenden.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:43:43 +00:00
rootandClaude Sonnet 5.5 0d12bbc06a Navigation: Theme-Schalter und Kontakt-Button bekommen wieder Mausklicks
Der Link-Container der Desktop-Navigation ist "absolute inset-0" (hält die
Links mittig), lag dadurch aber über .navbar-actions und schluckte alle
Mausklicks auf Theme-Schalter und Kontakt-Button ab 1024 px. Der Container
ist jetzt pointer-events-none, die Links pointer-events-auto; Position und
Optik bleiben identisch, die Hover-Pille der Links funktioniert weiter.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:43:29 +00:00
rootandClaude Sonnet 5.5 b2e17d96c2 Hintergrundbilder nur im Dark Mode
problem_blitz.jpg, loesung.jpg und backgroud_effect.webp sind dunkle
Bilder mit 30 % Deckkraft und wurden im hellen Modus zu harten grauen
Quadraten. Die Bild-Ebenen sind jetzt "hidden dark:block"; der dunkle
Modus bleibt unverändert.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:43:16 +00:00
rootandClaude Sonnet 5.5 2e65829e15 Anker: scroll-margin-top von 6rem für section[id]
Sprünge zu #features, #services, #process und #contact landeten unter
dem fixen Header; die Sektionen halten jetzt 6rem Abstand nach oben.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:43:01 +00:00
rootandClaude Sonnet 5.5 77672b55d3 Seitentitel und Beschreibung für Abo-, AGB-, Impressum- und 404-Seite
usePageMeta setzt jetzt auch auf /wartungs-abo, /hosting-abo, /agb,
/impressum und der 404-Seite Titel (Wartungs-Abo, Hosting-Abo, AGB,
Impressum, Seite nicht gefunden; der Hook ergänzt " | WEBklar") und
Beschreibung. Die Abo-Beschreibungen nennen nur Preis, Mindestlaufzeit und
Leistungen, die auf der jeweiligen Seite stehen; Impressum nennt Winnweiler
wie die Seite selbst. Die 404-Seite behält die Standardbeschreibung.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:42:43 +00:00
rootandClaude Sonnet 5.5 f0ae8c0be2 Kontaktformular: Datenschutzhinweis unter dem Senden-Button
"Wir verwenden Ihre Angaben nur, um Ihre Anfrage zu beantworten. Mehr dazu
in unserer Datenschutzerklärung." als kleiner, gedämpfter Text mit Link auf
https://project.webklar.com/datenschutz.html (gleiches Ziel wie im Footer).
Textfarben sind die Theme-Token (muted-foreground / foreground), in Hell
und Dunkel über 4,5:1.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:42:27 +00:00
rootandClaude Sonnet 5.5 80099cbdb4 Schreibweise: WEBklar statt Webklar im sichtbaren Markennamen
Header (Desktop und Mobil) und die Kopfzeilen der Unterseiten (Kontakt,
Über uns, AGB, Impressum, Wartungs-Abo, Hosting-Abo) schrieben die Marke
"Webklar". Rechtstexte bleiben unverändert, nur der Marken-Schriftzug in
der Kopfzeile ändert sich.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:42:08 +00:00
rootandClaude Sonnet 5.5 8d3424967c 404-Seite auf Deutsch mit lesbaren Theme-Farben
Überschrift "Seite nicht gefunden", Hinweis "Diese Seite gibt es nicht
oder nicht mehr." und Link "Zur Startseite" statt der englischen Vorlage.
bg-background/text-foreground statt festem grauen Hintergrund, damit der
Text in Hell und Dunkel lesbar ist. Der HTTP-Status bleibt 200 (Serveränderung
außerhalb dieses Pakets).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:41:54 +00:00
rootandClaude Sonnet 5.5 900d3a9ab5 Unterseiten: gemeinsamer Footer über ein Layout
/kontakt, /ueber-uns, /agb, /impressum, /wartungs-abo, /hosting-abo und
die 404-Seite bekommen den vorhandenen Footer (Impressum, Datenschutz,
Kündigen/Widerrufen) über ein gemeinsames Layout in src/routes.tsx. Die
Seiten selbst bleiben unverändert, damit die bestehenden Abo- und
AGB-Tests nicht auf doppelte Footer-Links stoßen. Die Startseite behält
ihren eigenen Footer, /datenschutz leitet weiter und bleibt ohne.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:41:38 +00:00
rootandClaude Sonnet 5.5 c75befe8e5 Erfolgsversprechen entschärft, tote Sektionen gelöscht
"Planbare Neukunden" wird zur Karte "Kundenportal", das Umsatzversprechen
in der Lösungs-Überschrift entfällt, Punkt 04 heißt "Hosting & Betreuung"
statt "SEO & Betreuung" (Sichtbar bei Google), Schritt 4 im Ablauf und die
Über-uns-Karte verweisen auf das Wartungs-Abo statt auf offene Optimierung.
AgitationSection und DifferentiationSection waren nirgends eingebunden und
sind gelöscht.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:41:15 +00:00
rootandClaude Sonnet 5.5 f337102c7a Antwortzeit: "spätestens am nächsten Werktag" statt 24 Stunden
index.html (Meta-Beschreibung), Standard-Beschreibung im Meta-Hook,
Startseiten-Meta, Kontaktseite (Meta, Einleitung) und Erfolgsmeldung des
Formulars versprechen jetzt nur noch eine Antwort spätestens am nächsten
Werktag. Weitere 24-Stunden-Versprechen gibt es im Quelltext nicht.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:41:06 +00:00
rootandClaude Sonnet 5.5 b897ae834f Eine Telefonnummer überall: 0176 23726355
Footer, Kontaktabschnitt der Startseite und Kontaktseite zeigten noch
0170 4969375, Impressum und Abo-Seiten schon 0176 23726355. Jetzt überall
0176 23726355 mit tel:+4917623726355.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:40:17 +00:00
rootandClaude Sonnet 5.5 c246b9811f Projekte-Bereich ausgeblendet: erfundene Referenzen entfernt
ProjectShowcase (vier erfundene Referenzen mit Unsplash-Hotlinks) ist
gelöscht, aus der Startseite genommen und der Nav-Punkt "Projekte"
(#projects) fällt in Desktop- und Mobil-Menü weg. Kein Link auf
#projects bleibt übrig.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:40:05 +00:00
rootandClaude Sonnet 5.5 a27b1fe255 Hero: ehrliche Fakten statt Zahlenleiste
Die Leiste mit Projektzähler (/api/projects), "Am Markt"-Ticker,
99,9 % Systemverfügbarkeit und Flagge ist ersetzt durch drei belegbare
Fakten ohne Count-up: Falkenstein (Server in Deutschland), Live-Vorschau
(im Kundenportal) und ab 20 € (Hosting im Monat). Einspaltig auf dem
Handy, ab md drei Spalten. Der zweite Button "Projekte ansehen" ist
entfernt, ebenso Projekt-Query, FOUNDING_DATE und src/lib/projects.ts.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:39:46 +00:00
rootandClaude Sonnet 5.5 79c3551934 Routen in eigene Datei ausgelagert
AppRoutes in src/routes.tsx, damit die Tests die echte Routenliste im
MemoryRouter rendern können. Keine Verhaltensänderung. setup.ts bekommt
Attrappen für IntersectionObserver und ResizeObserver (jsdom kennt sie nicht).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-01 10:35:48 +00:00
rootandClaude Opus 5.5 72f278b478 AGB § 9: Zeiterfassung in 15-Minuten-Schritten und Unterstützung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:27:33 +00:00
rootandClaude Opus 5.5 034892c899 AGB § 11 Haftung: wirksame Regel nach dem Muster der Abo-Bedingungen
Die alte Fassung schloss die Haftung für Umsatzausfälle, Datenverlust,
Systemausfälle und externe Dienste aus, haftete nur bei Vorsatz und
grober Fahrlässigkeit und deckelte auf den Auftragswert. Gegenüber
Verbrauchern unwirksam (§ 309 Nr. 7 a/b BGB), bei wesentlichen
Vertragspflichten auch gegenüber Unternehmern (§ 307 BGB).

Neu, wie § 13 der Abo-Bedingungen (v4-Entwurf): unbeschränkt bei
Vorsatz, grober Fahrlässigkeit, Leben/Körper/Gesundheit, nach dem
Produkthaftungsgesetz und bei Garantie; bei leichter Fahrlässigkeit
nur für wesentliche Vertragspflichten und nur für den vertragstypischen,
vorhersehbaren Schaden; Datenverlust außer in den Fällen von Absatz 1
nur in Höhe des Wiederherstellungsaufwands aus den Kopien, die der
Kunde aufbewahrt; gilt auch zugunsten von Mitarbeitern und Beauftragten.

src/test/agb-haftung.test.tsx hält die Kernsätze und die Reihenfolge
der Absätze fest. vitest.config.ts lädt @vitejs/plugin-react statt des
nicht installierten @vitejs/plugin-react-swc (vitest startete auf main
nicht); dieselbe Änderung wie auf feature/hosting-abo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 15:26:43 +00:00
rootandClaude Opus 5.5 3c9a879d4a Hosting-Abo: Preis 15 € -> 20 € pro Monat
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 16:29:29 +00:00
rootandClaude Fable 5.1 044f788835 AGB: Verbraucher-Kündigung als Ausnahme formuliert
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 08:41:26 +00:00
rootandClaude Fable 5.1 2bffca4b33 AGB: Haftungssatz Modul C entfällt, Kündigung nach Verlängerung für Verbraucher, Tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-28 08:16:17 +00:00
rootandClaude Fable 5.1 2c1a4c150c Website: Abo-Seiten an die Vertragsbedingungen angeglichen (Wechsel, Zusatzspeicher, Sicherheit), AGB-Verweise, Tests
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-27 20:10:07 +00:00
rootandClaude Fable 5.1 dc27e508dd Hosting-Abo-Seite, Wartungs-Abo mit beliebig vielen Postfächern, AGB Modul C (Entwurf)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-27 19:43:26 +00:00
rootandClaude Opus 5.5 1637a4a45d Favicon: WEBklar-Logo statt Lovable-Herz
favicon.ico war noch das Lovable-Vorlagen-Icon. Manche Browser und
Suchmaschinen nehmen die .ico statt favicon.svg. Ersetzt durch dieselbe
Datei wie im Kundenbereich (aus public/favicon.svg gerendert,
16/32/48/64/128/256 px).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 11:16:40 +00:00
rootandClaude Opus 5.5 5cc8b5f66b Performance: Animationen pausieren, Footer-Raster entschärft, WebGL nachladen
- Footer-Schriftzug (FlickeringGrid): Textmaske einmal pro Größe statt
  ~14.500 getImageData-Aufrufe pro Frame, nur flackernde Quadrate neu
  zeichnen (69–86 ms -> 0,1–0,2 ms pro Frame, Darstellung pixelgleich)
- PixelBlast: WebGL erst in Viewport-Nähe anlegen, unsichtbar pausieren
  (autoPauseOffscreen war nie angeschlossen), Shader asynchron kompilieren,
  beim Unmount aufräumen (Render-Schleifen liefen nach Seitenwechsel
  weiter); kein MSAA, keine erzwungene High-Performance-GPU
- Silk (Hero): nur rendern, solange sichtbar; DPR max. 1,5
- LightRays: keine verwaiste Render-Schleife mehr bei schnellem Vorbeiscrollen
- BorderGlow (Kontaktkarte): Sweep nur, solange die Karte sichtbar ist
- Silk, PixelBlast, LightRays als eigene Chunks (React.lazy):
  Haupt-Bundle 1,6 MB -> 646 KB (gzip 470 -> 207 KB)
- backgroud_effect und Emailsorter-Vorschaubild als WebP
  (974 KB -> 15 KB, 1,2 MB -> 11 KB), Projekt-Vorschaubilder lazy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 21:47:17 +00:00
rootandClaude Opus 5.5 f74ddfb5ae Kontakt-E-Mail: support@webklar.com statt privater Adresse
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 18:30:14 +00:00
rootandClaude Opus 5.5 b159f79070 Wartungs-Abo-Seite: Mindestlaufzeit 12 Monate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 17:59:50 +00:00
rootandClaude Opus 5.5 ff9f1bd37e Rechtliches: Impressum (DDG, Gesellschafter), Datenschutz, Abo-Seite, lokale Schriften
- Impressum: § 5 DDG, vertreten durch Kenso Grimm und Justin Klein
  (einzeln vertretungsberechtigt), Notizsatz und RStV-Abschnitt entfernt,
  Haftung nach DSA statt TMG, OS-Plattform-Link entfernt (abgeschaltet)
- /datenschutz leitet auf die gemeinsame Datenschutzerklaerung weiter
- /wartungs-abo: oeffentliche Leistungsbeschreibung (auch fuer Stripe)
- Footer: Datenschutz, 'Vertraege hier kuendigen', 'Vertrag widerrufen'
- Inter und Space Grotesk selbst gehostet statt Google Fonts; vier
  ungenutzte Google-Schriften entfernt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 14:16:46 +00:00
rootandClaude Opus 5 d12fa7d04f Projekte-Abschnitt zurück auf die alte Darstellung
Die Live-Kachelansicht aller Gitea-Repositories ist nicht gewollt: der
Abschnitt "Projekte" zeigt wieder die kuratierte Liste wie zuvor.

Dynamisch bleibt allein der Projektzähler im Hero – lib/projects.ts ist
deshalb auf fetchProjects + Snapshot-Typ eingedampft, ProjectCard.tsx
entfällt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 21:14:11 +00:00
rootandClaude Opus 5 60c827733f Hero: Projektzähler live statt hartkodierter 10+
Die Statistik-Zeile im Hero zeigte fest "10+ Projekte". Sie hängt jetzt
am selben /api/projects wie der Abschnitt "Projekte" (gleicher
react-query queryKey, also weiterhin nur ein Request) und zählt die
Repositories, die tatsächlich in Gitea liegen. Fallback bleibt 10,
falls die API nicht antwortet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 20:48:16 +00:00
rootandClaude Opus 5 a21441c0ca Projekte: Live-Ansicht aller Gitea-Repositories statt fester Liste
Der Abschnitt "Projekte" zog bisher aus einem hartkodierten Array mit
Unsplash-Platzhaltern. Jetzt kommt der Inhalt live von GET /api/projects,
das serverseitig alle Repositories aus Gitea mit den Hosting-Metadaten
aus Appwrite (websiteProjects) zusammenführt.

- Hybride Vorschau: öffentlich erreichbare und einbettbare Seiten laufen
  als echtes Live-Iframe (lazy, erst im Viewport, pointer-events: none),
  alles andere bekommt eine Live-Daten-Kachel mit Status, Sprache,
  letztem Commit und deterministischer Akzentfarbe.
- Filter-Chips je Kategorie, Volltextsuche, "Mehr laden" (12er-Schritte).
- Ladeskelett und Fehlerzustand mit Retry, damit der Abschnitt nie
  leer oder kaputt aussieht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 20:18:59 +00:00
knso 04e1fd537d Update preview config from ticket system 2026-07-12 09:37:18 +00:00
rootandClaude Opus 4.8 e821233ff6 Footer überarbeitet: neues Design mit Flickering-Grid-Schriftzug
Neues Footer-Layout (Link-Spalten mit Chevron-Hover + animierter
WEBklar-Schriftzug via FlickeringGrid). Inhalt (Branding, Seiten-,
Kontakt- und Rechtliches-Links) aus dem bisherigen Footer übernommen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-12 09:25:30 +00:00
knso 7e58e43e18 optimierte texte 2026-05-25 14:49:50 +02:00
knso f7dd547f8d big upgrade 2026-05-10 12:19:58 +02:00
JUSN 5bd2019fc6 logo änderung 2026-03-20 21:06:18 +01:00
root edb2ea6f8a createDocument: permissions [] explizit übergeben (403-Versuch) 2026-02-07 09:42:57 +00:00
root 8fa7c2c078 Entfernen: Debug-Instrumentierung (localhost:7243) aus Contact und Appwrite 2026-02-07 09:17:47 +00:00
root e3269518bd Fix: json-bigint stringify nutzt _isBigNumber (behebt e.isBigNumber in prepareRequest) 2026-02-07 09:07:20 +00:00
root 95c4cefef1 Fix: Komma im Debug-Log-Objekt (Build-Syntax) 2026-02-07 08:58:34 +00:00
root 37327cc2c8 Debug: Instrumentierung für isBigNumber-Fehler (Console-Log + Fetch) 2026-02-07 08:58:09 +00:00
root 80c03411ae Fix: Appwrite-Patch nutzt _isBigNumber statt isBigNumber (behebt 'e.isBigNumber is not a function' im Build) 2026-02-07 08:47:48 +00:00
knso ac40edc468 appwrite 22.0.0 patch 2026-02-07 09:35:49 +01:00
knso 0986bc8173 appwrite verbindung
auf local und domaene ueber ein plugin
2026-02-07 09:29:48 +01:00
Basilosaurusrex 305de38ff6 .env commit 2026-02-06 19:46:26 +01:00
Basilosaurusrex 82668796d6 appwrite anbindung 2026-02-06 18:22:04 +01:00
knso 6ad076473b pics 2026-02-03 20:30:54 +01:00
KNSONWS 591c0eb4c7 fix 2026-02-03 19:51:36 +01:00