PR #20 merged: Vision timeout 30s + raise PHP upload limits to 100M (#12 + transcription uploads)
Two small API-robustness fixes (bundled for one deploy):
1. Vision timeout → 30s (#12)
At 60s the live full-res OCR still got Cloudflare's opaque error code: 504 (request returned at 61.6s) — the edge cutoff is ~60s, so our app 504 lost the race. 30s gives margin for our actionable {"error":"…downscale or crop…"} JSON to flush first, while clearing every healthy call (detect ~19s, caption ~11s, OCR crop ~7s).
2. PHP upload limits → 100M (transcription audio)
crunch.ini left upload_max_filesize=2M / post_max_size=8M at PHP defaults, so /transcribe audio over those limits was rejected with 413 by ValidatePostSize before reaching the queue. Both raised to 100M (under Cloudflare's ~100MB edge ceiling).
Verify post-deploy: full-res /ocr → our JSON 504 at ~30s; a >8MB audio upload → 202 (job created), not 413.