Stripe live endpoint we_1TzDNHDV0RPXOyxGCOftavHV posts to https://hesychia.ai/api/finance/webhooks/stripe/. On 2026-10-09 the chat_web_app prod vhost returned HTTP 405 fifteen times (request_time 0.000, User-Agent Stripe). pending_webhooks stayed 1.
try_files falls through to index.html, and nginx rejects POST on that static file. The Django handler on chat_backend never sees the body.
chat_web_app now proxies /api/finance/webhooks/ to the same-env chat_backend port (8003 prod, 8013 beta) via host.docker.internal. Host is the backend public hostname so ALLOWED_HOSTS matches. Other static apps are unchanged.
Test plan
ansible-playbook playbooks/site.yml --syntax-check (or the web-static portion) renders without error
Redeploy web-static (scripts/deploy.sh path that runs the web-static role) so nginx.conf reloads
curl -i -X POST http://127.0.0.1:8082/api/finance/webhooks/stripe/ from an app host reaches Django (400 invalid signature or 503 missing secret), not 405
Stripe Dashboard: resend a failed event to the Hesychia.ai endpoint and confirm 2xx
## Summary
- Closes #41.
- Stripe live endpoint `we_1TzDNHDV0RPXOyxGCOftavHV` posts to `https://hesychia.ai/api/finance/webhooks/stripe/`. On 2026-10-09 the `chat_web_app` prod vhost returned HTTP 405 fifteen times (`request_time` 0.000, User-Agent Stripe). `pending_webhooks` stayed 1.
- `try_files` falls through to `index.html`, and nginx rejects POST on that static file. The Django handler on `chat_backend` never sees the body.
- `chat_web_app` now proxies `/api/finance/webhooks/` to the same-env `chat_backend` port (`8003` prod, `8013` beta) via `host.docker.internal`. `Host` is the backend public hostname so `ALLOWED_HOSTS` matches. Other static apps are unchanged.
## Test plan
- [ ] `ansible-playbook playbooks/site.yml --syntax-check` (or the web-static portion) renders without error
- [ ] Redeploy web-static (`scripts/deploy.sh` path that runs the web-static role) so `nginx.conf` reloads
- [ ] `curl -i -X POST http://127.0.0.1:8082/api/finance/webhooks/stripe/` from an app host reaches Django (400 invalid signature or 503 missing secret), not 405
- [ ] Stripe Dashboard: resend a failed event to the Hesychia.ai endpoint and confirm 2xx
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
we_1TzDNHDV0RPXOyxGCOftavHVposts tohttps://hesychia.ai/api/finance/webhooks/stripe/. On 2026-10-09 thechat_web_appprod vhost returned HTTP 405 fifteen times (request_time0.000, User-Agent Stripe).pending_webhooksstayed 1.try_filesfalls through toindex.html, and nginx rejects POST on that static file. The Django handler onchat_backendnever sees the body.chat_web_appnow proxies/api/finance/webhooks/to the same-envchat_backendport (8003prod,8013beta) viahost.docker.internal.Hostis the backend public hostname soALLOWED_HOSTSmatches. Other static apps are unchanged.Test plan
ansible-playbook playbooks/site.yml --syntax-check(or the web-static portion) renders without errorscripts/deploy.shpath that runs the web-static role) songinx.confreloadscurl -i -X POST http://127.0.0.1:8082/api/finance/webhooks/stripe/from an app host reaches Django (400 invalid signature or 503 missing secret), not 405