llms.txt and robots.txt were served without a charset, so browsers
decoded the valid UTF-8 as Windows-1252 and showed mojibake (â€", für).
- Add `charset utf-8;` (+ charset_types) so text responses carry
`; charset=utf-8`.
- Add an explicit `location ~* \.txt$` that serves the file as plain
text, returns 404 instead of falling back to the SPA index.html, and
sets `Access-Control-Allow-Origin: *` so any AI crawler/tool can fetch
llms.txt / llms-full.txt cross-origin.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Container-ready via docker/ compose (frontend nginx + backend Node). Compose adjusted for Coolify on the prod server: frontend uses expose:80 (no host binding — host 8080 is taken by the Coolify proxy; Traefik routes visigine.de), backend ALLOWED_ORIGINS=https://visigine.de. Secrets stay in server/.env (git-ignored); see server/.env.example.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>