| gateway | Caddy | everything | TLS, per-route rate limits, body size caps, security headers |
| shell | Java, Spring Boot, Thymeleaf | /, /admin/* | admin login, 512 MB memory limit |
| ingest | Rust | POST /api/prnu/analyze | sandboxed decode, pixel and size limits, fuzz-tested, read-only fs |
| prnu | Python, FastAPI | /api/prnu/jobs/* | no image decoders, process per job, tmpfs scratch, read-only fs |
| renderer | Go, C | GET /api/renderer/* | fixed scene list, rlimits, timeout, read-only fs |
| rendering, game | WebGL2, C++/WASM | /static/rendering/*, /static/game/* | static files only, read-only mounts |