blumeops/docs/explanation
Erich Blume a36a18aaa6
All checks were successful
Deploy Fly.io Proxy / deploy (push) Successful in 35s
C0: black-hole /mirrors/* at Fly edge + name-and-shame scrapers
A $29.60 Fly bill traced to ~1.25 TB/30d egress on forge.eblu.me (99.95% of
all proxy egress), ~71% of it AI scrapers (Meta meta-externalagent, OpenAI
GPTBot, Amazonbot, Bytespider) crawling the public mirror repos' infinite
git-history URL space and timing out Forgejo. robots.txt already disallowed
/mirrors/ but those agents ignore it, so enforce at the edge: return 403 (^~
to beat the regex asset locations), served as a roll-of-dishonour page with an
X-Naughty-Scrapers header. Mirrors stay reachable on the tailnet via
forge.ops.eblu.me. Tier 2 (UA denylist + Anubis) and the Cloudflare rejection
are documented in docs/explanation/ai-scraper-mitigation.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 20:52:20 -07:00
..
agent-change-process.md Switch container builds to manual-only workflow dispatch 2026-04-16 14:25:14 -07:00
ai-scraper-mitigation.md C0: black-hole /mirrors/* at Fly edge + name-and-shame scrapers 2026-06-01 20:52:20 -07:00
architecture.md Update docs for Caddy routing and direct WireGuard peering 2026-04-18 09:57:30 -07:00
federated-login.md Deploy Mealie recipe manager (#299) 2026-03-16 21:59:10 -07:00
no-helm-policy.md Migrate 1Password Connect from Helm to kustomize (1.8.1 → 1.8.2) (#326) 2026-04-06 07:31:40 -07:00
security-model.md Fix frontmatter field name for Quartz date display (#158) 2026-02-11 16:45:12 -08:00
spork-strategy.md Build custom Kingfisher container from sporked deploy branch (#318) 2026-03-30 06:34:49 -07:00
why-gitops.md Review why-gitops doc (#184) 2026-02-13 16:48:06 -08:00