Select Existing Receipt Image from Device Photo Library
From the bottom sheet action menu opened by the Camera Capture Widget, the user can select 'Choose from Library' to open the native photo picker. After selecting an image, it follows the same processing pipeline as a newly captured photo: client-side compression, upload to Supabase Storage, and thumbnail display. This fallback ensures that mentors who photographed a receipt before opening the app, or who use a different camera app, are not blocked from attaching documentation.
User Story
Acceptance Criteria
- Given the Camera Capture Widget action sheet is shown, when the user selects 'Choose from Library', then the native device photo picker opens
- Given the user selects an image from their library, when they confirm, then the image is processed and uploaded using the same pipeline as a camera capture
- Given a library image is selected, when the upload succeeds, then a thumbnail is shown in the receipt grid identical in appearance to a camera-captured receipt
- Given the user cancels the photo picker without selecting an image, when they return to the Receipt Upload Screen, then no new receipt is added and the existing state is unchanged
Business Value
Photo library selection accommodates real-world user behaviour where receipts are photographed at the point of payment but expenses are registered later when back at home or the office. Providing this option significantly increases the percentage of expenses with attached receipts and reduces coordinator follow-up requests.
Components
- Camera Capture Widget ui
- Receipt Processing Service service
- Receipt Storage Repository data
- Image Storage Backend infrastructure