- Add scannedCardsRef to track latest queue state
- Use functional updater in setScannedCards to avoid stale mergeScannedCardEntry input
- Return cardEntry.id synchronously from handleCardScanned so onScanImageUploaded fires
This fixes the scanner queue stopping after 1 card (required page refresh to see more).
Show scan notices and camera/identify errors in the page toast, patch scanImageUrl after background upload completes, and fix debug upload logging.
Co-authored-by: Cursor <cursoragent@cursor.com>
Give /scanner a md+ camera, live match inspector, and history strip
(with device picker, batch scan, and tips) without regressing the
mobile immersive checkout.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Start scanner-mobile-checkout convoy for the cart-then-commit phone flow.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Ship a cart-then-commit mobile scanner so phone sessions stay on the camera.
Scan matches enqueue locally instead of auto-writing ownership, checkout happens in a sheet, and audit fixes cover stale commit detection, returnUrl open redirects, nested Escape, and ember detection chrome.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>