Eric Gullickson
7f6e4e0ec2
fix: skip image preview for PDF receipt uploads (refs #182 )
...
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
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 >
2026-02-13 21:43:47 -06:00
Eric Gullickson
220f8ea3ac
fix: increase hybrid engine cloud timeout for WIF token exchange (refs #182 )
...
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
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 >
2026-02-13 21:38:05 -06:00
Eric Gullickson
5e4515da7c
fix: use PyMuPDF instead of pdf2image for PDF-to-image conversion (refs #182 )
...
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
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 >
2026-02-13 21:34:17 -06:00
Eric Gullickson
5877b531f9
fix: allow PDF uploads in backend OCR controller and service (refs #182 )
...
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
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 >
2026-02-13 21:27:40 -06:00
Eric Gullickson
653c535165
chore: add PDF support to receipt OCR pipeline (refs #182 )
...
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
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 >
2026-02-13 21:22:40 -06:00
Eric Gullickson
83bacf0e2f
chore: accept PDF files in receipt upload dialog (refs #182 )
...
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
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 21:14:22 -06:00
Eric Gullickson
812823f2f1
chore: integrate AddReceiptDialog into MaintenanceRecordForm (refs #184 )
...
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
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 >
2026-02-13 20:57:37 -06:00
Eric Gullickson
6751766b0a
chore: create AddReceiptDialog component with upload and camera options (refs #183 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 20:55:21 -06:00
Eric Gullickson
bc72f09557
feat: add desktop sidebar collapse to icon-only mode (refs #176 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 20:07:00 -06:00
Eric Gullickson
f987e94fed
chore: verify notification bell functionality and improve empty state (refs #180 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 20:02:56 -06:00
Eric Gullickson
da4cd858fa
chore: use display name instead of email in header greeting (refs #177 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 20:01:56 -06:00
Eric Gullickson
553877bfc6
chore: add upload date and file type icon to document cards (refs #172 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 20:00:49 -06:00
Eric Gullickson
daa0cd072e
chore: remove Insurance default bias from Add Document modal (refs #175 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:56:34 -06:00
Eric Gullickson
afd4583450
chore: show service type in maintenance schedule names for differentiation (refs #174 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:55:25 -06:00
Eric Gullickson
f03cd420ef
chore: add Maintenance page title and remove duplicate vehicle dropdown (refs #169 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:53:13 -06:00
Eric Gullickson
e4be744643
chore: restructure Fuel Logs to list-first with add dialog (refs #168 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:49:46 -06:00
Eric Gullickson
f2b20aab1a
feat: add recent activity feed to dashboard (refs #166 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:48:06 -06:00
Eric Gullickson
accb0533c6
feat: add call-to-action links in zero-state dashboard stats cards (refs #179 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:45:14 -06:00
Eric Gullickson
0dc273d238
chore: remove dashboard auto-refresh footer text (refs #178 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:43:57 -06:00
Eric Gullickson
56be3ed348
chore: add Year Make Model subtitle to vehicle cards and hide empty VIN (refs #167 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:41:23 -06:00
Eric Gullickson
bc9c386300
chore: differentiate Stations icon from Fuel Logs in bottom nav (refs #181 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:40:09 -06:00
Eric Gullickson
7a74c7f81f
chore: remove redundant Stations from mobile More menu (refs #173 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:39:16 -06:00
Eric Gullickson
73976a7356
fix: add Maintenance to mobile More menu (refs #164 )
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-13 19:38:21 -06:00
Eric Gullickson
0e8c6070ef
fix: sync mobile routing with browser URL for direct navigation (refs #163 )
...
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 >
2026-02-13 19:35:53 -06:00
Eric Gullickson
325cf08df0
fix: promote vehicle display utils to core with null safety (refs #165 )
...
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 >
2026-02-13 19:32:40 -06:00