Barcode Scanning
The ScanPick mobile app uses the device camera for barcode scanning. Workers point the camera at product barcodes and the app provides immediate visual feedback.
Scanning Flow
Section titled “Scanning Flow”- The worker opens the mobile app and logs in with their PIN.
- Assigned waves appear. Tapping a wave shows the pick list.
- Tapping a pick task opens the camera viewfinder.
- The worker scans the barcode at the product’s bin location.
- The app validates the barcode and registers the pick (or shows an error).
Barcode Validation
Section titled “Barcode Validation”When a barcode is scanned, the app checks it against the expected barcode for the current pick task:
| Result | Visual Feedback | What Happens |
|---|---|---|
| Match | Green flash + confirmation | Scan is queued and synced |
| Mismatch | Red Expected {product} overlay | Scan is rejected immediately |
The validation happens on the device before any network request. Even offline, mismatched barcodes are caught in real-time.
Manual Entry Fallback
Section titled “Manual Entry Fallback”If the camera cannot read a barcode (scratched, damaged, or poor lighting):
- Wait 3 seconds after the viewfinder opens.
- A “Type barcode” button appears.
- Tap it and type the barcode manually.
This ensures picking is never blocked by a damaged label.
Offline Tolerance
Section titled “Offline Tolerance”Scans work without an internet connection:
- Online: scans are sent to the API immediately via HTTP.
- Offline: scans queue locally on the device using MMKV storage.
- Reconnecting: the queue drains automatically as connectivity returns.
- Idempotency: each scan carries a client-generated UUID. The server deduplicates, so replaying the queue is safe.
For full details, see the Offline Queue architecture guide.
Barcode Formats
Section titled “Barcode Formats”ScanPick supports common 1D barcode formats:
- EAN-13 (most common — 13 digits)
- UPC-A (12 digits)
- Code 128 (variable length)
- Code 39 (variable length)
- ITF (Interleaved 2 of 5)
The barcode is stored as a string on the Product record. Whatever the scanner outputs is compared directly — no format-specific parsing.
Expected Barcode Display
Section titled “Expected Barcode Display”The mobile app shows the expected barcode inside the viewfinder:
┌─────────────────────┐ │ │ │ [Viewfinder] │ │ │ │ Expected: 59012... │ │ ┌───────────────┐ │ │ │ Scan here │ │ │ └───────────────┘ │ │ │ │ [Type barcode] │ └─────────────────────┘This helps the worker confirm they are at the correct location before scanning.