4.8 KiB
4.8 KiB
CLAUDE.md · Website Friseur-Team VK
Architekturfakten für Agenten und Entwickler. Gestaltung: DESIGN.md. Entscheidungen: DECISIONS.md.
Überblick
- Statische Website für Friseur-Team VK (Kastanienallee 1, 21255 Tostedt), gebaut von Heidrich Digital.
- Astro 5,
output: 'static', Vanilla CSS, kein Framework, kein Tailwind. Zwei kleine Skripte (Menü-Escape, Anfrageformular, Vorher/Nachher-Regler). - Vorschau: https://vk-friseur.heidrich-digital.de (noindex). Repo:
till/vk-friseurauf git.heidrich-digital.de. - Deployment: Coolify-App
n101smck3800u4ajngvm2yjg, Build überDockerfile(node:22-alpine baut, nginx:1.27-alpine liefert auf Port 80).
Befehle
npm ci
npm run dev # http://localhost:4321
npm run build # nach dist/
Struktur
src/
data/site.ts EINZIGE Quelle für Adresse, Telefon, Öffnungszeiten, Team, Preise, Anliegen, Endpunkte
styles/tokens.css Farben (OKLCH), Schrift, Skala, Abstände, Bewegung
styles/global.css Grundlage, Typo, Knöpfe, Layout-Helfer, Scroll-Einblendung
styles/form.css Formular-Bausteine (nur Anfrage-Seite)
layouts/Base.astro <head>, Meta, noindex, JSON-LD (HairSalon + Breadcrumb + seiteneigene), Header/Footer/Leiste
components/ Header, Footer, MobileBar, Shot (Fotofläche), Reels, Rating, CtaBand, PageHero,
Steps, Faq, PriceList, LoyaltyCard, BeforeAfter, Hours, Pic, Icon, Logo, DraftNote
scripts/anfrage.ts Formularlogik (schrittweise, Prüfung, fetch, Bestätigung)
pages/ index, brautservice, balayage-farbe, haarverlaengerung, team, leistungen-preise,
kundenkarte, anfrage/index, anfrage/danke, kontakt, impressum, datenschutz, 404
assets/img, assets/logo Ausgangsbilder, werden von astro:assets zu AVIF/WebP/JPG in mehreren Breiten
public/
fonts/ Bodoni Moda + Archivo, selbst gehostet, beschnitten (LICENSE-FONTS.txt)
robots.txt, llms.txt, og.jpg, favicon.svg, favicon-32.png, apple-touch-icon.png, logo-vk.png
deploy/security-headers.conf CSP, HSTS, nosniff, Referrer-Policy, X-Robots-Tag
nginx.conf Caching, 301 alter Adressen, ohne Schrägstrich am Ende, 404
Regeln
- Fakten nur in
src/data/site.tsändern. Footer, Kontakt, Impressum, Schema und Formular lesen von dort. - Preise sind „ab“-Richtwerte (Platzhalter). Ein Wert in
priceGroupsändert Preisliste und Premium-Seiten. Die Hinweise im Formular stehen inanliegen[].hintund müssen mitgezogen werden. - Keine Inline-Styles und keine Inline-Skripte: Die CSP erlaubt nur
'self'. Werte zur Laufzeit perel.style.setProperty()(CSSOM ist erlaubt).build.inlineStylesheets: 'never', CSS als eine Datei (cssCodeSplit: false). - Keine Fremdanfragen. Karten, Instagram, Google-Bewertungen sind nur Links. Neue Fremdquellen erfordern CSP- und Datenschutz-Änderung.
- Bilder immer über
Pic.astro(astro:assets) mitsizes; Hero miteager. - Fehlende Arbeitsfotos über
Shot.astromit Motiv und Bildidee. Wenn Fotos kommen: Datei nachsrc/assets/img/,ShotdurchPicin.frameersetzen (Bogen: Klassearch). - Texte: Stimme des Salons („wir“, „Sie“), konkret, keine Superlative, keine erfundenen Zahlen oder Zitate, keine Gedankenstriche.
Anfrageformular
POST https://vk-karte.heidrich-digital.de/api/anfrage,multipart/form-data. Feldnamen exakt wie im Backend:anliegen, kundenstatus, haarlaenge, ausgangslage, wunsch, zeitraum, hochzeitsdatum, ort, personen, warteliste, preis_ok, name*, telefon*, email, rueckruf, datenschutz*, fotos (0 bis 3, je ≤ 6 MB), website (Honeypot).- Ohne JS: normaler Submit, Backend antwortet mit 303 auf
/anfrage/danke. - Mit JS: Prüfung im Browser,
fetchmitAccept: application/json, Antwort{ok:true,id}oder{ok:false,error}. Honeypot gefüllt: nichts senden, Bestätigung zeigen. - Vorauswahl per
?anliegen=braut|balayage|verlaengerung|typveraenderung|schnitt|sonstiges. - Backend muss CORS für
https://vk-friseur.heidrich-digital.deerlauben (und später für die Live-Domain).
Livegang (Checkliste)
- In
src/layouts/Base.astrodie Zeile<meta name="robots" content="noindex, nofollow" />löschen. - In
deploy/security-headers.confdie Zeileadd_header X-Robots-Tag ...löschen. siteinastro.config.mjsundSITE_URLinsrc/data/site.tsauf die Live-Domain setzen;robots.txtundllms.txtanpassen.- CORS und CSP (
connect-src,form-action) für die Live-Domain prüfen. - Footer-Hinweis „Vorschau der neuen Website …“ in
Footer.astroentfernen, Entwurfshinweise in Impressum und Datenschutz durch geprüfte Texte ersetzen. - 301-Weiterleitungen in
nginx.confmit der URL-Liste der Altseite abgleichen. - Preise, Öffnungszeiten, Team, WhatsApp-Nummer und Bildrechte vom Salon bestätigen lassen.