Deployment
Single-box, docker-compose, kubernetes — same code.
Local single-box
filed under · bash.bash
uv sync
scrape-api &
cd web && pnpm devDocker compose
The full stack — API, web, Redis, Prometheus, Grafana — comes up with one command:
filed under · bash.bash
docker compose -f ops/compose.yml up -dSet SCRAPE_JWT_SECRET in your env or compose overrides for production.
Kubernetes
Two Deployments (api, web) + a PVC for the SQLite file (or swap to managed Postgres via DATABASE_URL). We ship a starter Helm chart in ops/helm.
Storage migration
SQLite is fine to ~100k pages/day. Beyond that, set DATABASE_URL=postgres://... and run the migration script. Raw HTML moves from local FS to S3 / GCS / R2 transparently — same content-addressed paths.