What happened?
The REST API listed under Live Demo in README.md is down. https://openshield-api.onrender.com
returns HTTP 503 on every path, with a Render placeholder page titled Service Suspended:
$ curl -s -o /dev/null -w "%{http_code}\n" https://openshield-api.onrender.com/
503
$ curl -s -o /dev/null -w "%{http_code}\n" https://openshield-api.onrender.com/health
503
$ curl -s -o /dev/null -w "%{http_code}\n" https://openshield-api.onrender.com/api/health
503
The other two services in the same table are fine — the dashboard and the project website both
return 200. This is only the API.
The wider problem is that the URL is not just documentation. It is hardcoded as the production
fallback in the frontend:
frontend/src/utils/api.js:9
frontend/src/utils/aiApi.js:15
Both read import.meta.env.DEV ? 'http://localhost:5000' : 'https://openshield-api.onrender.com'.
Unless VITE_API_URL is set in the Vercel project, the deployed dashboard calls a suspended
backend on every page load, and the committed frontend/dist bundle already has the URL baked in.
Seven source files reference it:
| File |
Context |
README.md |
Live Demo table, plus the VITE_API_URL= frontend setup snippet |
frontend/src/utils/api.js |
production fallback base URL |
frontend/src/utils/aiApi.js |
production fallback base URL |
website/content.js |
two curl examples shown to visitors, and an FAQ answer |
docs/api-render-deploy.md |
four smoke-test commands |
docs/azure-setup.md |
referenced as the deployed API |
docs/superpowers/plans/2026-07-12-terraform-oidc.md |
planning doc, low priority |
What did you expect?
Either a reachable API behind the documented URL, or documentation and frontend defaults that do
not point at a suspended service.
Steps to reproduce
curl -i https://openshield-api.onrender.com/health — observe 503 and the Service Suspended body.
- Open the deployed dashboard at
https://openshield-gules.vercel.app without VITE_API_URL
configured — API calls resolve to the suspended host.
- Follow the README Live Demo table or the
curl examples on the project website — both fail.
Environment
- OpenShield version:
dev @ f1a7e45
- Python version: n/a (hosting and docs issue)
- OS: n/a
Logs or screenshots
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Service Suspended</title>
</head>
Possible resolutions
Not making the call here — this depends on whether the Render service is coming back.
- Restore the service. Everything above is then correct as written and only the deploy needs attention.
- Retire the hosted API. Drop the Live Demo row or relabel it as suspended, replace the
curl
examples with self-host instructions, and change the frontend fallback to http://localhost:5000
(or leave it unset and fail with a clear message) so the dashboard does not silently call a dead host.
Either way the frontend fallback should be addressed, since that is the only part affecting users
rather than readers.
Raised while working on #228 / #230, which touch the same README section but deliberately leave
this alone as out of scope.
What happened?
The REST API listed under Live Demo in
README.mdis down.https://openshield-api.onrender.comreturns HTTP 503 on every path, with a Render placeholder page titled
Service Suspended:The other two services in the same table are fine — the dashboard and the project website both
return 200. This is only the API.
The wider problem is that the URL is not just documentation. It is hardcoded as the production
fallback in the frontend:
frontend/src/utils/api.js:9frontend/src/utils/aiApi.js:15Both read
import.meta.env.DEV ? 'http://localhost:5000' : 'https://openshield-api.onrender.com'.Unless
VITE_API_URLis set in the Vercel project, the deployed dashboard calls a suspendedbackend on every page load, and the committed
frontend/distbundle already has the URL baked in.Seven source files reference it:
README.mdVITE_API_URL=frontend setup snippetfrontend/src/utils/api.jsfrontend/src/utils/aiApi.jswebsite/content.jscurlexamples shown to visitors, and an FAQ answerdocs/api-render-deploy.mddocs/azure-setup.mddocs/superpowers/plans/2026-07-12-terraform-oidc.mdWhat did you expect?
Either a reachable API behind the documented URL, or documentation and frontend defaults that do
not point at a suspended service.
Steps to reproduce
curl -i https://openshield-api.onrender.com/health— observe 503 and theService Suspendedbody.https://openshield-gules.vercel.appwithoutVITE_API_URLconfigured — API calls resolve to the suspended host.
curlexamples on the project website — both fail.Environment
dev@ f1a7e45Logs or screenshots
Possible resolutions
Not making the call here — this depends on whether the Render service is coming back.
curlexamples with self-host instructions, and change the frontend fallback to
http://localhost:5000(or leave it unset and fail with a clear message) so the dashboard does not silently call a dead host.
Either way the frontend fallback should be addressed, since that is the only part affecting users
rather than readers.
Raised while working on #228 / #230, which touch the same README section but deliberately leave
this alone as out of scope.