## Ergebnis ### Hohe Priorität: Referenzen - **Keine echten Referenzbilder vorhanden:** Alle 6 Referenzen verwenden `/images/reference-hero.jpg` als Platzhalter. Die Datei existiert, ist aber bei allen Projekten identisch. - **Platzhalter sind zu dominant:** Sowohl Karten als auch Detailseiten reservieren grosse Bildflächen; zusätzlich erscheint eine grosse „Galerie vorbereitet“-Fläche (`ReferenceCard.astro:18–29`, `referenzen/[slug].astro:45–55, 90–111`). Empfehlung: Ohne freigegebene Bilder nur eine kompakte Kennzeichnung anzeigen und Galerie/Hero-Fläche ganz ausblenden oder stark reduzieren. - **Brittle Placeholder-Erkennung:** Der Status wird über `image.includes('reference-hero')` ermittelt. Besser im Content-Schema explizit modellieren, z. B. `mediaStatus: pending | approved` und optionale Bilddaten. - **Echte Medien priorisieren:** Sobald Bilder eintreffen, Sortierung auf `approved media → featured → year` umstellen. Derzeit wird nur nach `featured` und dem freien String `year` sortiert (`referenzen/index.astro:7–10`). - **Ungültig strukturierte Jahresangabe:** Eine Referenz hat `year: "Referenz"` statt eines Jahres. Das freie Stringfeld verhindert verlässliche Sortierung. Empfehlung: `year` als Zahl/nullable und separater Anzeige-Fallback. - **Galeriefilter kann Platzhalter mitrendern:** Sobald mindestens ein reales Bild existiert, wird die gesamte gefilterte Galerie ausgegeben. Platzhalter sollten vor dem Rendern vollständig entfernt werden. - **Bild-Metadaten fehlen:** Für gute Accessibility und redaktionelle Qualität Medien als Objekte modellieren: `src`, `alt`, optional `caption`, `beforeAfter`, `credit`. - **Unbestätigte Aussagen:** Generierte Fallback-Texte wie „Gasser übernahm …“ oder Aussagen zu Prioritäten/Ergebnis können wie verifizierte Projektfakten wirken (`referenzen/[slug].astro:20–36`). Nur bestätigte Inhalte veröffentlichen; fehlende Case-Felder lieber auslassen. - **Freigabe/Privatsphäre nicht modelliert:** Die Dokumentation verlangt Veröffentlichungseinwilligung, das Schema enthält aber keinen Freigabe- oder Anonymisierungsstatus. Empfohlen: `publicationApproved`, `imageApproved`, `anonymizedLocation`; nicht freigegebene Projekte beim Build ausschliessen. ### Filter mit Query-Support Aktuell sind Kategorien nur dekorative ``-Elemente; es gibt keinen Filter und keine Query-Auswertung (`referenzen/index.astro:12, 23–25`). Empfohlene Umsetzung: - Kanonischer Parameter, z. B. `/referenzen/?kategorie=umbauten`. - Whitelist der bekannten Kategorie-Slugs; unbekannte Werte führen zu „Alle“, nicht zu leerer Seite. - Filter als Links oder Buttons mit `aria-current` beziehungsweise `aria-pressed`. - Clientseitig beim Laden sowie bei `popstate` auswerten und URL über History API synchronisieren. - Karten über `hidden` ausblenden; Ergebniszahl in einer gezielten `role="status"`-Region melden. - Ohne JavaScript alle Referenzen sichtbar lassen. - Filterzustand bei Zurück-Navigation erhalten. - Kein serverseitiges Auslesen von `Astro.url.searchParams` als alleinige Lösung: Bei statischem Hosting würde die Query nicht neu gebaut beziehungsweise serverseitig gerendert. ### Projektanfrage/Wizard - **Keine Validierung:** „Weiter“ wechselt immer zum nächsten Schritt; kein Feld ist `required` (`ProjectInquiryWizard.astro:19–69, 141–147`). - Pro Schritt native Constraints prüfen. - Empfohlenes Minimum: Ort, Beschreibung, Name sowie mindestens Telefon **oder** E-Mail. - Telefon/E-Mail-ODER-Regel mit `setCustomValidity`. - Bei Fehler Schritt nicht wechseln, verständliche Fehlermeldung anzeigen und erstes ungültiges Feld fokussieren. - **Kein localStorage:** Es existiert keinerlei Persistenz. - Versionierter Schlüssel und Schema, z. B. `gasser-project-inquiry:v1`. - Wegen personenbezogener Daten Speicherung transparent erklären. - Idealerweise explizites „Entwurf auf diesem Gerät speichern“; alternativ Autosave mit kurzer Aufbewahrung, Restore-Hinweis und „Entwurf löschen“. - Keine Dateien speichern; Fehler bei deaktiviertem/vollem Storage abfangen. - Nach `mailto:` nicht automatisch als „gesendet“ löschen, da nicht bekannt ist, ob die Mail verschickt wurde. - **`mailto:` ist irreführend beschriftet:** „Zusammenfassung per E-Mail senden“ versendet nichts, sondern öffnet nur ein lokal eingerichtetes Mailprogramm (`ProjectInquiryWizard.astro:75, 143–147`). - Umbenennen in **„E-Mail vorbereiten“**. - Vorher klar sagen: „Es werden noch keine Daten an Gasser übertragen.“ - Fallback „Zusammenfassung kopieren“ anbieten, falls kein Mailprogramm eingerichtet ist. - Mailtext kompakt halten, da lange `mailto:`-URLs abgeschnitten werden können. - Empfängeradresse aus `company.ts` beziehen statt hardcodieren. - **Upload-Platzhalter widerspricht aktueller Anforderung:** Disabled File-Input und Hosting-Interna entfernen (`ProjectInquiryWizard.astro:43–50`). Stattdessen kurz erklären, dass Fotos nach Öffnen der E-Mail manuell angehängt oder per WhatsApp gesendet werden können. Die ältere Dokumentation fordert ausdrücklich noch einen Upload-Platzhalter (`digital-inquiry-and-hosting-notes.md:69–76`) und sollte bei der späteren Implementierung synchronisiert werden, damit er nicht zurückkehrt. - **No-JS-Falle:** Durch `display:none` bleiben ohne JavaScript alle Schritte ausser dem ersten unzugänglich. Entweder erst nach erfolgreicher JS-Initialisierung in den Wizard-Modus wechseln oder einen `