All serverFetch calls were going to https://api.marktvogt.de (public gateway), creating a second nginx hop for every SSR operation. Slow LLM calls (merge-plan, research-plan) hit the 60s proxy_read_timeout. - Add PRIVATE_API_BASE_URL=http://marktvogt-backend to web Helm config - serverFetch now builds SERVER_API_BASE from PRIVATE_API_BASE_URL at runtime (falls back to PUBLIC_API_BASE_URL when not set) - apiFetch accepts optional baseURL param; client-side calls unchanged