Capture flow — six states, one URL.
Mobile-first. Each state is a screen of the same fullscreen route. The URL doesn't change; the internal state machine drives transitions: preflight → brief → record → review → upload → done.
01
Preflight
Device + permissions
9:41📶84%
Let's check your setup.
✓
Camera
Permission granted
✓
Microphone
Ambient audio
!
Storage
1.2 GB free · 2 GB needed
✓
Resolution
1080p available
✓
Battery
84%
✓
Network
Strong · 25 Mbps
Free up space first →
02
Brief
SOP keyframe
9:42📶84%
Capture this.
Operator manipulating the kettle from the start of pour through return to surface.
~ 30 seconds per take
Privacy
Avoid recording faces. If anyone enters frame for more than a moment, pause and re-take.
Start recording →
03
Recording
Fullscreen · live preview
00:24
📶84%
⚠ Hold steady · slight blur detected
PAUSE
×
04
Recorded
Review & submit
9:46📶84%
Review your clip.
Duration
15:08
Resolution
1080p
Issues
2
2 minor issues detected
Slight blur at 0:12 · Low light at 4:48
Re-take
Save
Submit
05
Uploading
Background-safe
9:47📶84%
Sending to QA.
71%
Background-safe
You can close the app — upload continues.
Cancel upload
06
Uploaded
Confirmation · auto-redirect 5s
9:48📶84%
Clip 02 is in QA.
You'll get a notification when the publisher reviews it. Usually within 24 hours.
Submitted2 / 3
Capture next clip →
Back to task
Never lose a clip.
MediaRecorder flushes to disk every 2 seconds. If the app is killed mid-record, IndexedDB keeps what's there. On next open, a recovery banner appears app-wide.
Recovery banner
A clip from 15 minutes ago wasn't uploaded. ~ 28 MB · captured locally
Discard
Recover
Offline
You're offline · 2 clips captured and queued. Uploads resume when network returns.
QUEUED · 56 MB
Blocked
Camera permission was denied. Open browser settings to allow camera access for openphysix.ai.
Open settings
On desktop browsers, /dashboard/working/[id]/capture shows
"Open this on your phone" with a QR code linking to the same URL on mobile.