Verify mobile routing works with direct URL navigation (320px, 768px)
Verify Maintenance appears in mobile More menu
Verify no null values in vehicle names across all views
Verify Dashboard shows recent activity feed
Verify vehicle cards show Year Make Model subtitle
Verify Fuel Logs defaults to list view
Verify Maintenance page has title and single vehicle dropdown
Verify sidebar collapse to icon-only mode on desktop
Verify AddReceiptDialog upload and camera paths
Test all changes at 320px, 768px, and 1920px viewports
## Summary
Comprehensive UX design audit cleanup addressing 20 findings across 4 severity levels, plus the maintenance receipt upload-first flow redesign.
**Critical fixes:**
- Fix mobile routing so direct URL navigation renders the correct page (not Dashboard)
- Add Maintenance to mobile bottom-sheet More menu (was completely missing)
- Fix null model display on Settings vehicle list ("2022 Volkswagen null")
**High priority improvements:**
- Enrich Dashboard with recent activity feed (no more 60% white space)
- Vehicle cards show Year Make Model subtitle and hide empty VIN
- Fuel Logs defaults to list view instead of form-first
- Maintenance page gets proper title and removes duplicate vehicle dropdown
**Medium improvements:**
- Standardize empty field display across all views
- Document cards show upload date and file type icon
- Remove redundant Stations from mobile More menu
- Differentiate maintenance schedule names with service type
- Remove Insurance default bias from Add Document modal
- Desktop sidebar collapse to icon-only mode
**Minor polish:**
- Header greeting uses display name instead of email
- Remove "Dashboard updates every 7 minutes" footer text
- Add call-to-action links in zero-state stats cards
- Verify notification bell functionality and improve empty state
- Differentiate Stations icon from Fuel Logs in bottom nav
**Receipt flow redesign (#182):**
- New AddReceiptDialog component with drag-and-drop upload + camera option
- Integrated into MaintenanceRecordForm replacing old "Scan Receipt" button
Fixes #162
Fixes #163
Fixes #164
Fixes #165
Fixes #166
Fixes #167
Fixes #168
Fixes #169
Fixes #171
Fixes #172
Fixes #173
Fixes #174
Fixes #175
Fixes #176
Fixes #177
Fixes #178
Fixes #179
Fixes #180
Fixes #181
Fixes #182
Fixes #183
Fixes #184
Fixes #185
## Test plan
- [ ] Verify mobile routing works with direct URL navigation (320px, 768px)
- [ ] Verify Maintenance appears in mobile More menu
- [ ] Verify no null values in vehicle names across all views
- [ ] Verify Dashboard shows recent activity feed
- [ ] Verify vehicle cards show Year Make Model subtitle
- [ ] Verify Fuel Logs defaults to list view
- [ ] Verify Maintenance page has title and single vehicle dropdown
- [ ] Verify sidebar collapse to icon-only mode on desktop
- [ ] Verify AddReceiptDialog upload and camera paths
- [ ] Test all changes at 320px, 768px, and 1920px viewports
Create shared getVehicleLabel/getVehicleSubtitle in core/utils with
VehicleLike interface. Replace all direct year/make/model concatenation
across 17 consumer files to prevent null values in vehicle names.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
URL-to-screen sync on mount and screen-to-URL sync via replaceState
enable direct URL navigation, page refresh, and bookmarks on mobile.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The receipt extractor only accepted image MIME types, rejecting PDFs at
the OCR layer. Added application/pdf to supported types and PDF-to-image
conversion (first page at 300 DPI) before OCR preprocessing.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The backend SUPPORTED_IMAGE_TYPES set excluded application/pdf, returning
415 before the request ever reached the OCR microservice. Added PDF to
the allowed types in both controller and service validation layers.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
pdf2image requires poppler-utils which is not installed in the OCR
container. PyMuPDF is already in requirements.txt and can render PDF
pages to PNG at 300 DPI natively without extra system dependencies.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The 5s cloud timeout was too tight for the initial WIF authentication
which requires 3 HTTP round-trips (STS, IAM credentials, resource
manager). First call took 5.5s and was discarded, falling back to slow
CPU-based PaddleOCR. Increased to 10s to accommodate cold-start auth.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
URL.createObjectURL on a PDF creates a blob URL that cannot render in
an img tag, showing broken image alt text. Skip preview creation for
PDF files so the review modal displays without a thumbnail.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Comprehensive UX design audit cleanup addressing 20 findings across 4 severity levels, plus the maintenance receipt upload-first flow redesign.
Critical fixes:
High priority improvements:
Medium improvements:
Minor polish:
Receipt flow redesign (#182):
Fixes #162
Fixes #163
Fixes #164
Fixes #165
Fixes #166
Fixes #167
Fixes #168
Fixes #169
Fixes #171
Fixes #172
Fixes #173
Fixes #174
Fixes #175
Fixes #176
Fixes #177
Fixes #178
Fixes #179
Fixes #180
Fixes #181
Fixes #182
Fixes #183
Fixes #184
Fixes #185
Test plan