Zurück zum Portfolio
WaterBaby Serres — Schwimmschule für Babys & Kinder

WaterBaby Serres — Schwimmschule für Babys & Kinder

WaterBaby Serres unterrichtet Babys ab vier Monaten und Kinder bis zehn Jahre in einem beheizten Hallenbad im Elpida Resort. Die Website sollte zuerst griechische Eltern ansprechen und erst danach englischsprachige Besucher, ohne zu zwei Websites zu werden. Deshalb steht jeder sichtbare Text zweimal in derselben Datei, und der Umschalter blendet nur eine der beiden aus: eine URL pro Seite, kein Neuladen, kein Fetch, kein zweiter Seitensatz zum Pflegen — und das Griechische liest sich auch ohne JavaScript vollständig. Sechs Seiten tragen das Ganze — Start, Über uns, die beiden Programme, Galerie und Kontakt — mit den vier Kinderstufen vom Anfänger bis zum Fortgeschrittenen, der Ausrüstung und den Unterlagen, die Eltern brauchen, und einem FAQ. GSAP und ScrollTrigger liegen lokal statt auf einem CDN, und jede Animation ist additiv: nichts wird per CSS vorab versteckt, ein fehlgeschlagenes Skript hinterlässt also eine vollständige Seite statt einer leeren. Die Ankunftsanimation der Startseite lässt einmal pro Sitzung eine Welle durch das Viewport ablaufen und räumt sich über CSS-Keyframes selbst ab — sie kann niemanden hinter einem Overlay zurücklassen, selbst wenn das JavaScript stirbt. Strukturierte Daten decken Kurse, FAQ, Galerie und Breadcrumbs ab; eine llms.txt nennt die geprüften Fakten für KI-Assistenten und ist durch die Tests an die Seiten gebunden, damit beide nicht auseinanderlaufen. Einundzwanzig Node-Tests halten alles zusammen — Seitenstruktur, griechische Texte, die Weiterleitungs-Stubs, die Sicherheitseigenschaften des Loaders und den WCAG-Kontrast auf jeder orangefarbenen Fläche.

Technologien

HTML5 CSS3 Vanilla JS (ES Modules) GSAP 3 ScrollTrigger JSON-LD i18n (EL/EN) Node Test Runner WCAG 2.2 AA SEO

Herausforderungen

Eine zweisprachige Website bedeutet normalerweise alles doppelt — zwei Seitensätze, zwei URLs, zwei Gelegenheiten, das eine zu aktualisieren und das andere zu vergessen. Hier pflegt eine einzelne Trainerin die Seite, eine zweite Kopie jeder Seite wäre also Last statt Funktion. Griechisch musste zudem der echte Standard sein, lesbar bevor irgendein Skript läuft, denn das Publikum sind Eltern vor Ort. Und genau die Extras, die sich eine Schwimmschule wünscht — Ankunftsanimation, Scroll-Reveals, ein Lightbox — hinterlassen eine leere Seite, wenn ein Skript auf einem Handy mit schwachem Signal scheitert.

Lösungen

Beide Sprachen liegen inline in jeder Datei, und der Umschalter kippt nur ein hidden-Attribut: eine Seite zum Bearbeiten, eine URL zum Teilen, nichts zu synchronisieren; die Vorliebe steht im localStorage, und der Wechsel feuert ein Custom Event, auf das die Galerie hört. Nicht-Text-Strings — aria-labels, Platzhalter, Meta-Beschreibungen, sogar der Dokumenttitel — übersetzen über gepaarte Data-Attribute in derselben Funktion, damit eine übersetzte Seite keine unübersetzten Ecken hat. Bewegung ist per Regel additiv, und ein Test erzwingt es: CSS darf ein animiertes Element nie vorab verstecken, ein nicht geladenes GSAP kostet also nur die Animation. Das Ankunfts-Overlay wird hidden ausgeliefert und nur durch eine Klasse sichtbar, die JavaScript setzt, während sein Abgang ein CSS-Keyframe mit fill-mode forwards ist — ob das Skript aus, blockiert oder abgestürzt ist, das Overlay räumt sich ab. Bibliotheken liegen lokal, damit ein CDN-Ausfall die Bewegung nicht mitnimmt, und jeder der einundzwanzig Tests wurde geprüft, indem gezielt kaputt gemacht wurde, was er schützt.