Server-side ops (HEAD/Delete) keep the internal endpoint; presigned PUT/GET URLs handed to the browser now use S3_ENDPOINT (public) so the client can actually reach them.
- POST /api/cloud/uploads: presigned PUT URL + pending metadata row - POST /api/cloud/uploads/:id/confirm: mark ready, HEAD object to backfill size - GET /api/cloud/uploads: list metadata - GET /api/cloud/uploads/🆔 metadata + presigned GET download URL - DELETE /api/cloud/uploads/🆔 delete object + metadata - Auto-migrate app.uploads schema - S3 credentials exchange with expiry cache - Frontend: upload (direct PUT), list, download, delete UI - Drop 512MiB big.bin build (no longer needed)
Co-authored-by: Cursor <cursoragent@cursor.com>