- nginx.conf: SPA fallback (try_files → index.html), bez niego /privacy zwracało 404
- Dockerfile: kopiuje nginx.conf do kontenera
- i18n/pl.ts + en.ts: nowa sekcja `privacy` z 6 podsekcjami (admin, formularz, Umami analytics, cookies, prawa, zmiany)
- PrivacyPolicyPage.tsx: strona polityki używająca useT(), sekcje z kotwicami (controller/contact/analytics/cookies/rights/changes)
- App.tsx: prosty routing po window.location.pathname — /privacy → PrivacyPolicyPage
- Footer.tsx: /privacy i /privacy#cookies zamiast martwych href="#"
Co do sekcji Umami: napisana na podstawie kodu (self-hosted stats.gethumanai.pl, cookie-free). Zweryfikuj treść przed publikacją.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- zamiana wszystkich adresów e-mail @gethumanai.com -> @gethumanai.pl
(CTASection, Footer, i18n pl/en)
- walidacja po stronie klienta przed wysłaniem (name niepuste,
email zawiera "@", message >= 5 znaków — zgodne z mailer.mjs)
- mapowanie kodów błędów mailera na czytelne komunikaty w i18n (pl/en),
pokazywane zamiast generycznego błędu; honeypot company bez zmian
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>