Business Adjacent · Flight Log · FL-006
·reviewtube·locked
Upload freeze — silent wait is a product bug
Signal
Small video upload left the customer UI frozen or stuck at a dead 0%.
Wrong turn
Gate upload on IndexedDB; wait forever on Stream webhook; show “Uploading 0%” during setup.
Correction
IDB optional; live byte progress via XHR; honest phases; soft-timeout never lies about Ready; Stream self-heal on read paths.
The user does not experience “async encoding.” They experience a screen that stopped talking to them.
We traced multiple root causes: client no-ops when storage was blocked, progress that only updated after whole parts finished, UI that claimed readiness before Stream was playable, and board lists that never reconciled a missed webhook.
The fix set is a reliability stack, not a spinner. Getting ready, starting transfer, sending real percent, saving the master, making it playable — language that matches physics. Self-heal on asset GET and board so the database does not wait for a human to open the cut.