Backend streaming
Jobs store the upload/payload under storage/<job_id>, precompute a preview,
and expose /api/jobs/{job_id}/stream that emits window, traj, and box chunks as SSE.
Automatic cancellation checks and status JSON keep things responsive.