chore: UX design audit cleanup and receipt flow improvements #186

Merged
egullickson merged 25 commits from issue-162-ux-design-audit-cleanup into main 2026-02-14 03:50:23 +00:00
Owner

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
## 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
egullickson added 19 commits 2026-02-14 03:03:40 +00:00
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 <noreply@anthropic.com>
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 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore: integrate AddReceiptDialog into MaintenanceRecordForm (refs #184)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 3m31s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 22s
Deploy to Staging / Verify Staging (pull_request) Successful in 9s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 8s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
812823f2f1
Replace ReceiptCameraButton with "Add Receipt" button that opens
AddReceiptDialog. Upload path feeds handleCaptureImage, camera path
calls startCapture. Tier gating preserved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:14:27 +00:00
chore: accept PDF files in receipt upload dialog (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 3m39s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 23s
Deploy to Staging / Verify Staging (pull_request) Successful in 9s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 8s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
83bacf0e2f
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:22:44 +00:00
chore: add PDF support to receipt OCR pipeline (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 38s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 22s
Deploy to Staging / Verify Staging (pull_request) Successful in 8s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
653c535165
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 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:27:43 +00:00
fix: allow PDF uploads in backend OCR controller and service (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 3m41s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 52s
Deploy to Staging / Verify Staging (pull_request) Successful in 9s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
5877b531f9
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 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:34:21 +00:00
fix: use PyMuPDF instead of pdf2image for PDF-to-image conversion (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 37s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 52s
Deploy to Staging / Verify Staging (pull_request) Successful in 9s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
5e4515da7c
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 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:38:08 +00:00
fix: increase hybrid engine cloud timeout for WIF token exchange (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 37s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 51s
Deploy to Staging / Verify Staging (pull_request) Successful in 9s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 8s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
220f8ea3ac
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 <noreply@anthropic.com>
egullickson added 1 commit 2026-02-14 03:43:51 +00:00
fix: skip image preview for PDF receipt uploads (refs #182)
All checks were successful
Deploy to Staging / Build Images (pull_request) Successful in 3m30s
Deploy to Staging / Deploy to Staging (pull_request) Successful in 51s
Deploy to Staging / Verify Staging (pull_request) Successful in 8s
Deploy to Staging / Notify Staging Ready (pull_request) Successful in 7s
Deploy to Staging / Notify Staging Failure (pull_request) Has been skipped
7f6e4e0ec2
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 <noreply@anthropic.com>
egullickson merged commit c816dd39ab into main 2026-02-14 03:50:23 +00:00
egullickson deleted branch issue-162-ux-design-audit-cleanup 2026-02-14 03:50:26 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: egullickson/motovaultpro#186