Do not file a public GitHub issue for a security vulnerability.
- Go to the repository's Security tab.
- Click Report a vulnerability.
- Describe the issue, ideally with reproduction steps and the affected version (commit SHA or tag).
If GitHub PVR is unavailable, email [email protected] with
subject prefixed [SECURITY]. If you require encrypted transport for
a highly sensitive report, mention this in your first message and the
maintainer will share a GPG key on request.
- Triage acknowledgement: within 3 business days.
- Initial assessment + severity: within 7 calendar days.
- Fix landed in a release: within 30 days for Critical/High, 90 days for Medium, best-effort for Low.
If you do not receive an acknowledgement within 7 days, please follow up directly via email — the maintainer is solo and a missed report is more likely than a deliberate non-response.
Only the latest tagged release is actively patched. If you self-host, update to the latest release before reporting; we may decline reports against versions older than 6 months.
In scope:
- Application code in this repository (
src/,web/,scripts/). - The default deployment configuration documented in
README.mdanddocs/deploy.md.
Out of scope (report to the respective vendor):
- Third-party services this app talks to (Gemini API, FatSecret, Stripe, Strava, Fitbit, Resend).
- Cloudflare / GCP infrastructure providing the hosted instance.
The hosted instance at https://macro.anirudhtopiwala.com/macro_app/
is operated by the maintainer. For vulnerabilities affecting that
specific deployment (vs. the codebase), use the same channels above and
prefix the report subject [hosted-instance] so we route it as an
incident, not a code patch.
We do not currently run a paid bug-bounty program. We will credit you in release notes if you'd like, and we will not pursue legal action against good-faith research that:
- stays within your own account,
- does not access other users' data,
- does not run automated scanners that materially impact availability,
- gives us a reasonable disclosure window before going public.
If you operate your own MacroShot instance you take on full operator responsibility for security. Before exposing it to anyone but yourself:
JWT_SECRET— required. Set to a high-entropy value (openssl rand -hex 32). The app refuses to start in production with the default.OAUTH_TOKEN_KEY— required if you enable Strava / Fitbit / Oura. Fernet key for encrypting OAuth refresh tokens at rest. Seedocs/deploy.mdfor generation.APP_ENV=production— enables stricter CORS, disables API docs, turns on full security headers.chmod 600 .env— keys leak to other users on a shared box at the default 644.- TLS reverse proxy (Caddy / nginx / Cloudflare) in front of uvicorn. Never expose uvicorn directly.
- Run unprivileged + sandbox the systemd unit. See
docs/deploy.mdfor the bundled unit template. - Privacy / legal: running a public instance? Replace the bundled
Privacy Policy + Terms to name yourself as data controller — see
docs/self-hosting-legal.md.
Please give us a reasonable window (typically 30–90 days) to ship a fix before public disclosure. We will coordinate timing with you and credit you in the release notes if you'd like.