2026-02-02 - 2026-03-02
Overview
34 Pull requests merged by 1 user
Merged
#236 feat: Migrate Gemini SDK to google-genai (#231)
Merged
#230 fix: increase VIN decode timeout for Gemini cold start
Merged
#229 feat: Replace NHTSA VIN decode with Google Gemini via OCR service (#223)
Merged
#222 chore: Update email FROM address and fix unsubscribe link
Merged
#219 chore: migrate user identity from auth0_sub to UUID
Merged
#218 refactor: Clean up subscription admin override and Stripe integration (#205)
Merged
#204 feat: Add online user guide with screenshots (#203)
Merged
#202 feat: Redesign dashboard with vehicle-centric layout (#196)
Merged
#195 fix: Wire up Add Maintenance button on vehicle detail page (#194)
Merged
#193 fix: Mobile login redirects to homepage without showing Auth0 login page (#188)
Merged
#191 fix: Desktop sidebar clips logo after collapse-mode UX changes (#187)
Merged
#186 chore: UX design audit cleanup and receipt flow improvements
Merged
#161 feat: Maintenance Receipt Upload with OCR Auto-populate (#16)
Merged
#147 feat: Expand OCR with fuel receipt scanning and maintenance extraction (#129)
Merged
#128 feat: Google Vision primary OCR with Auth0 WIF and monthly usage cap (#127)
Merged
#126 feat: Improve VIN decode confidence reporting and make/model/trim editability (#125)
Merged
#124 feat: Improve VIN photo capture camera crop (#123)
Merged
#122 feat: Improve OCR process - replace Tesseract with PaddleOCR (#115)
Merged
#114 fix: VIN OCR scanning fails with "No VIN Pattern found" on all images (#113)
Merged
#112 feat: Add Grafana dashboards and alerting (#105)
Merged
#104 fix: rename ipWhiteList to ipAllowList for Traefik v3 (#103)
Merged
#102 chore: upgrade logging stack - mirrors, Alloy, Loki, Grafana (#96, #97, #98, #99)
Merged
#94 docs: add unified logging system documentation and CI/CD integration (#87)
Merged
#93 feat: add Promtail, Loki, and Grafana log aggregation stack (#86)
Merged
#92 feat: Frontend Logger Module (#84)
Merged
#91 feat: migrate backend logging from Winston to Pino with correlation IDs (#82)
Merged
#90 chore: Docker Logging Configuration + Rotation (#85)
Merged
#89 chore: configure Traefik X-Request-Id header forwarding (#83)
Merged
#88 chore: Logging Config Generator Script (#81)
Merged
#79 feat: Owner's Manual OCR Pipeline (#71)
Merged
#78 feat: Receipt Capture Integration (#70)
Merged
#77 feat: Receipt OCR Pipeline (#69)
Merged
#76 feat: VIN Capture Integration (#68)
Merged
#75 feat: VIN Photo OCR Pipeline (#67)
135 Issues closed from 1 user
Closed
#233 feat: Migrate GeminiEngine to google-genai with Google Search grounding (#231)
Closed
#234 feat: Migrate MaintenanceReceiptExtractor to google-genai (#231)
Closed
#235 feat: Update test mocks for google-genai SDK (#231)
Closed
#231 feat: Migrate Gemini SDK to google-genai and enable Google Search grounding for VIN decode
Closed
#232 feat: Update OCR dependency to google-genai (#231)
Closed
#228 feat: Update frontend and tests for Gemini VIN decode (#223)
Closed
#227 chore: Remove NHTSA code and update documentation (#223)
Closed
#226 feat: Rewire vehicles controller to use OCR VIN decode (#223)
Closed
#225 feat: Add backend OCR client method and types for VIN decode (#223)
Closed
#224 feat: Add VIN decode endpoint to OCR Python service (#223)
Closed
#223 feat: Replace NHTSA VIN decode with Google Gemini via OCR service
Closed
#221 chore: Update email FROM address and fix unsubscribe link
Closed
#220 bug: Post-migration bugs from UUID identity migration (#206)
Closed
#211 chore: Database migration SQL - auth0_sub to UUID (#206)
Closed
#212 chore: Auth plugin and admin guard UUID migration (#206)
Closed
#213 chore: Admin system refactor for UUID migration (#206)
Closed
#214 chore: User profile repository refactor for UUID (#206)
Closed
#215 chore: Feature repository UUID validation (#206)
Closed
#216 chore: Supporting code UUID updates (#206)
Closed
#217 chore: Test fixtures and documentation for UUID migration (#206)
Closed
#206 chore: Migrate user identity from auth0_sub to MVP-generated UUID
Closed
#205 refactor: Clean up subscription admin override and Stripe integration
Closed
#207 refactor: Database migration for nullable stripe_customer_id (#205)
Closed
#208 refactor: Repository updates for nullable stripe_customer_id (#205)
Closed
#209 refactor: Remove resolveStripeCustomerId and harden tier sync (#205)
Closed
#210 refactor: Update Stripe flows for nullable stripe_customer_id (#205)
Closed
#203 feat: Add online user guide with screenshots to public website
Closed
#196 feat: Redesign dashboard with vehicle-centric layout
Closed
#197 feat: Dashboard types and vehicle health data layer (#196)
Closed
#198 feat: VehicleRosterCard component (#196)
Closed
#199 feat: Dashboard ActionBar component (#196)
Closed
#200 feat: DashboardScreen composition and cleanup (#196)
Closed
#201 feat: Dashboard redesign tests (#196)
Closed
#194 fix: Wire up "Add Maintenance" button on vehicle detail page
Closed
#188 fix: Mobile login redirects to homepage without showing Auth0 login page
Closed
#189 fix: Callback route guard allows Auth0 code exchange to complete (#188)
Closed
#190 fix: Detect and clear stale IndexedDB auth tokens on mobile (#188)
Closed
#192 fix: Add pre-auth session clear mechanism on HomePage (#188)
Closed
#187 fix: Desktop sidebar clips logo after collapse-mode UX changes
Closed
#181 chore: differentiate Stations icon from Fuel Logs in bottom nav (#162)
Closed
#183 chore: create AddReceiptDialog component (#182)
Closed
#184 chore: integrate AddReceiptDialog into MaintenanceRecordForm (#182)
Closed
#185 chore: viewport testing for maintenance receipt flow (#182)
Closed
#175 chore: remove Insurance default bias from Add Document modal (#162)
Closed
#176 chore: add desktop sidebar collapse to icon-only mode (#162)
Closed
#177 chore: header greeting use display name instead of email (#162)
Closed
#178 chore: remove dashboard auto-refresh footer text (#162)
Closed
#179 chore: add call-to-action links in zero-state stats cards (#162)
Closed
#180 chore: hide notification bell if non-functional (#162)
Closed
#165 fix: null model display on Settings vehicle list (#162)
Closed
#166 chore: enrich Dashboard with meaningful content (#162)
Closed
#167 chore: vehicle cards show Year Make Model and hide empty VIN (#162)
Closed
#168 chore: Fuel Logs default to list view instead of form-first (#162)
Closed
#169 chore: add Maintenance page title and remove duplicate vehicle dropdown (#162)
Closed
#171 chore: standardize empty field display across all views (#162)
Closed
#172 chore: improve document card with upload date and file type icon (#162)
Closed
#173 chore: remove redundant Stations entry from mobile More menu (#162)
Closed
#174 chore: differentiate identical maintenance schedule names (#162)
Closed
#162 chore: UX design audit cleanup
Closed
#163 fix: mobile routing renders Dashboard instead of correct page (#162)
Closed
#164 fix: add Maintenance to mobile bottom-sheet More menu (#162)
Closed
#182 chore: change maintenance receipt flow to upload-first with camera option (#162)
Closed
#170 fix: FAB button overlaps content and bottom nav on mobile (#162)
Closed
#149 feat: Email Receipt Ingestion via Resend Webhooks
Closed
#158 feat: Vehicle association and record creation (#149)
Closed
#159 feat: Email ingestion notifications and error emails (#149)
Closed
#160 feat: Pending vehicle association resolution UI (#149)
Closed
#16 feat: Maintenance Receipt Upload with OCR Auto-populate
Closed
#150 feat: Maintenance receipt extraction pipeline in OCR microservice (#16)
Closed
#151 feat: Backend migration and API updates for maintenance receipt linking (#16)
Closed
#152 feat: Maintenance receipt OCR hook and review modal (#16)
Closed
#153 feat: Form integration, tier gating, and receipt display (#16)
Closed
#154 feat: Email ingestion database schema and types (#149)
Closed
#155 feat: Resend inbound client and webhook endpoint (#149)
Closed
#156 feat: Email ingestion processing service (#149)
Closed
#157 feat: Receipt classifier and OCR integration (#149)
Closed
#148 fix: Scheduled maintenance list not displaying schedules (#129)
Closed
#138 feat: Tier guard middleware (#129)
Closed
#139 feat: Backend OCR receipt proxy endpoint (#129)
Closed
#140 feat: Tier gating and frontend receipt OCR flow (#129)
Closed
#141 feat: Station matching from receipt (#129)
Closed
#142 feat: Gemini engine module and configuration (#129)
Closed
#143 feat: Manual extractor Gemini rewrite (#129)
Closed
#144 feat: Backend OCR manual proxy endpoint (#129)
Closed
#145 feat: Frontend manual extraction flow (#129)
Closed
#146 docs: Documentation for OCR expansion (#129)
Closed
#129 feat: Expand OCR with fuel receipt scanning and owners manual maintenance extraction
Closed
#130 feat: Backend OCR receipt proxy endpoint (#129)
Closed
#131 feat: Tier gating and frontend receipt OCR flow (#129)
Closed
#132 feat: Station matching from receipt (#129)
Closed
#133 feat: Gemini engine module and configuration (#129)
Closed
#134 feat: Manual extractor Gemini rewrite (#129)
Closed
#135 feat: Backend OCR manual proxy endpoint (#129)
Closed
#136 feat: Frontend manual extraction flow (#129)
Closed
#137 docs: Documentation for OCR expansion (#129)
Closed
#127 feat: Google Vision primary OCR with Auth0 WIF and monthly usage cap
Closed
#125 feat: Improve VIN decode confidence reporting and make/model/trim editability
Closed
#123 feat: Improve VIN photo capture camera crop experience
Closed
#121 chore: Update OCR tests and documentation (#115)
Closed
#115 feat: Improve OCR process - replace Tesseract with PaddleOCR and add cloud fallback for VIN scanning
Closed
#116 feat: OCR engine abstraction layer and PaddleOCR integration (#115)
Closed
#117 feat: Migrate VIN extractor to engine abstraction (#115)
Closed
#118 feat: Optional Google Vision cloud fallback engine (#115)
Closed
#119 chore: Docker and infrastructure updates for PaddleOCR (#115)
Closed
#120 fix: Diagnose and fix crop tool regression (#115)
Closed
#113 fix: VIN OCR scanning fails with "No VIN Pattern found in image" on all images
Closed
#105 feat: Add Grafana dashboards and alerting for application observability
Closed
#106 feat: Grafana dashboard provisioning infrastructure (#105)
Closed
#107 feat: Application Overview Grafana dashboard (#105)
Closed
#108 feat: API Performance Grafana dashboard (#105)
Closed
#109 feat: Error Investigation Grafana dashboard (#105)
Closed
#110 feat: Infrastructure Grafana dashboard (#105)
Closed
#111 feat: Grafana alerting rules and documentation (#105)
Closed
#95 [Chore]: Upgrade container image versions and migrate Promtail to Grafana Alloy
Closed
#103 [Bug]: Grafana unreachable - Traefik v3 ipWhiteList middleware renamed to ipAllowList
Closed
#101 [Docs]: Update documentation for container image upgrades
Closed
#100 [Chore]: Upgrade OCR Python base image from 3.11 to 3.13
Closed
#99 [Chore]: Upgrade Grafana 10.0.0 to 12.4.0
Closed
#98 [Chore]: Upgrade Loki 2.9.0 to 3.6.1
Closed
#97 [Chore]: Replace Promtail with Grafana Alloy
Closed
#96 [Chore]: Update base image mirror script for container upgrades
Closed
#80 [Feature]: Implement Unified Debug Logging System with Centralized Log Aggregation
Closed
#87 [Sub-issue #80-G]: CI/CD Integration + Documentation
Closed
#86 [Sub-issue #80-F]: Promtail + Loki + Grafana Stack
Closed
#84 [Sub-issue #80-D]: Frontend Logger Module
Closed
#82 [Sub-issue #80-B]: Backend Pino Migration + Correlation IDs
Closed
#85 [Sub-issue #80-E]: Docker Logging Configuration + Rotation
Closed
#83 [Sub-issue #80-C]: Traefik X-Request-Id Middleware
Closed
#81 [Sub-issue #80-A]: Logging Config Generator Script
Closed
#68 feat: VIN Capture Integration
Closed
#12 feat: OCR-powered smart capture for VIN, receipts, and owner's manuals
Closed
#71 feat: Owner's Manual OCR Pipeline
Closed
#70 feat: Receipt Capture Integration
Closed
#69 feat: Receipt OCR Pipeline
Closed
#67 feat: VIN Photo OCR Pipeline
128 Issues created by 0 users
Opened
#80 [Feature]: Implement Unified Debug Logging System with Centralized Log Aggregation
Opened
#81 [Sub-issue #80-A]: Logging Config Generator Script
Opened
#82 [Sub-issue #80-B]: Backend Pino Migration + Correlation IDs
Opened
#83 [Sub-issue #80-C]: Traefik X-Request-Id Middleware
Opened
#84 [Sub-issue #80-D]: Frontend Logger Module
Opened
#85 [Sub-issue #80-E]: Docker Logging Configuration + Rotation
Opened
#86 [Sub-issue #80-F]: Promtail + Loki + Grafana Stack
Opened
#87 [Sub-issue #80-G]: CI/CD Integration + Documentation
Opened
#95 [Chore]: Upgrade container image versions and migrate Promtail to Grafana Alloy
Opened
#96 [Chore]: Update base image mirror script for container upgrades
Opened
#97 [Chore]: Replace Promtail with Grafana Alloy
Opened
#98 [Chore]: Upgrade Loki 2.9.0 to 3.6.1
Opened
#99 [Chore]: Upgrade Grafana 10.0.0 to 12.4.0
Opened
#100 [Chore]: Upgrade OCR Python base image from 3.11 to 3.13
Opened
#101 [Docs]: Update documentation for container image upgrades
Opened
#103 [Bug]: Grafana unreachable - Traefik v3 ipWhiteList middleware renamed to ipAllowList
Opened
#105 feat: Add Grafana dashboards and alerting for application observability
Opened
#106 feat: Grafana dashboard provisioning infrastructure (#105)
Opened
#107 feat: Application Overview Grafana dashboard (#105)
Opened
#108 feat: API Performance Grafana dashboard (#105)
Opened
#109 feat: Error Investigation Grafana dashboard (#105)
Opened
#110 feat: Infrastructure Grafana dashboard (#105)
Opened
#111 feat: Grafana alerting rules and documentation (#105)
Opened
#113 fix: VIN OCR scanning fails with "No VIN Pattern found in image" on all images
Opened
#115 feat: Improve OCR process - replace Tesseract with PaddleOCR and add cloud fallback for VIN scanning
Opened
#116 feat: OCR engine abstraction layer and PaddleOCR integration (#115)
Opened
#117 feat: Migrate VIN extractor to engine abstraction (#115)
Opened
#118 feat: Optional Google Vision cloud fallback engine (#115)
Opened
#119 chore: Docker and infrastructure updates for PaddleOCR (#115)
Opened
#120 fix: Diagnose and fix crop tool regression (#115)
Opened
#121 chore: Update OCR tests and documentation (#115)
Opened
#123 feat: Improve VIN photo capture camera crop experience
Opened
#125 feat: Improve VIN decode confidence reporting and make/model/trim editability
Opened
#127 feat: Google Vision primary OCR with Auth0 WIF and monthly usage cap
Opened
#129 feat: Expand OCR with fuel receipt scanning and owners manual maintenance extraction
Opened
#130 feat: Backend OCR receipt proxy endpoint (#129)
Opened
#131 feat: Tier gating and frontend receipt OCR flow (#129)
Opened
#132 feat: Station matching from receipt (#129)
Opened
#133 feat: Gemini engine module and configuration (#129)
Opened
#134 feat: Manual extractor Gemini rewrite (#129)
Opened
#135 feat: Backend OCR manual proxy endpoint (#129)
Opened
#136 feat: Frontend manual extraction flow (#129)
Opened
#137 docs: Documentation for OCR expansion (#129)
Opened
#138 feat: Tier guard middleware (#129)
Opened
#139 feat: Backend OCR receipt proxy endpoint (#129)
Opened
#140 feat: Tier gating and frontend receipt OCR flow (#129)
Opened
#141 feat: Station matching from receipt (#129)
Opened
#142 feat: Gemini engine module and configuration (#129)
Opened
#143 feat: Manual extractor Gemini rewrite (#129)
Opened
#144 feat: Backend OCR manual proxy endpoint (#129)
Opened
#145 feat: Frontend manual extraction flow (#129)
Opened
#146 docs: Documentation for OCR expansion (#129)
Opened
#148 fix: Scheduled maintenance list not displaying schedules (#129)
Opened
#149 feat: Email Receipt Ingestion via Resend Webhooks
Opened
#150 feat: Maintenance receipt extraction pipeline in OCR microservice (#16)
Opened
#151 feat: Backend migration and API updates for maintenance receipt linking (#16)
Opened
#152 feat: Maintenance receipt OCR hook and review modal (#16)
Opened
#153 feat: Form integration, tier gating, and receipt display (#16)
Opened
#154 feat: Email ingestion database schema and types (#149)
Opened
#155 feat: Resend inbound client and webhook endpoint (#149)
Opened
#156 feat: Email ingestion processing service (#149)
Opened
#157 feat: Receipt classifier and OCR integration (#149)
Opened
#158 feat: Vehicle association and record creation (#149)
Opened
#159 feat: Email ingestion notifications and error emails (#149)
Opened
#160 feat: Pending vehicle association resolution UI (#149)
Opened
#162 chore: UX design audit cleanup
Opened
#163 fix: mobile routing renders Dashboard instead of correct page (#162)
Opened
#164 fix: add Maintenance to mobile bottom-sheet More menu (#162)
Opened
#165 fix: null model display on Settings vehicle list (#162)
Opened
#166 chore: enrich Dashboard with meaningful content (#162)
Opened
#167 chore: vehicle cards show Year Make Model and hide empty VIN (#162)
Opened
#168 chore: Fuel Logs default to list view instead of form-first (#162)
Opened
#169 chore: add Maintenance page title and remove duplicate vehicle dropdown (#162)
Opened
#170 fix: FAB button overlaps content and bottom nav on mobile (#162)
Opened
#171 chore: standardize empty field display across all views (#162)
Opened
#172 chore: improve document card with upload date and file type icon (#162)
Opened
#173 chore: remove redundant Stations entry from mobile More menu (#162)
Opened
#174 chore: differentiate identical maintenance schedule names (#162)
Opened
#175 chore: remove Insurance default bias from Add Document modal (#162)
Opened
#176 chore: add desktop sidebar collapse to icon-only mode (#162)
Opened
#177 chore: header greeting use display name instead of email (#162)
Opened
#178 chore: remove dashboard auto-refresh footer text (#162)
Opened
#179 chore: add call-to-action links in zero-state stats cards (#162)
Opened
#180 chore: hide notification bell if non-functional (#162)
Opened
#181 chore: differentiate Stations icon from Fuel Logs in bottom nav (#162)
Opened
#182 chore: change maintenance receipt flow to upload-first with camera option (#162)
Opened
#183 chore: create AddReceiptDialog component (#182)
Opened
#184 chore: integrate AddReceiptDialog into MaintenanceRecordForm (#182)
Opened
#185 chore: viewport testing for maintenance receipt flow (#182)
Opened
#187 fix: Desktop sidebar clips logo after collapse-mode UX changes
Opened
#188 fix: Mobile login redirects to homepage without showing Auth0 login page
Opened
#189 fix: Callback route guard allows Auth0 code exchange to complete (#188)
Opened
#190 fix: Detect and clear stale IndexedDB auth tokens on mobile (#188)
Opened
#192 fix: Add pre-auth session clear mechanism on HomePage (#188)
Opened
#194 fix: Wire up "Add Maintenance" button on vehicle detail page
Opened
#196 feat: Redesign dashboard with vehicle-centric layout
Opened
#197 feat: Dashboard types and vehicle health data layer (#196)
Opened
#198 feat: VehicleRosterCard component (#196)
Opened
#199 feat: Dashboard ActionBar component (#196)
Opened
#200 feat: DashboardScreen composition and cleanup (#196)
Opened
#201 feat: Dashboard redesign tests (#196)
Opened
#203 feat: Add online user guide with screenshots to public website
Opened
#205 refactor: Clean up subscription admin override and Stripe integration
Opened
#206 chore: Migrate user identity from auth0_sub to MVP-generated UUID
Opened
#207 refactor: Database migration for nullable stripe_customer_id (#205)
Opened
#208 refactor: Repository updates for nullable stripe_customer_id (#205)
Opened
#209 refactor: Remove resolveStripeCustomerId and harden tier sync (#205)
Opened
#210 refactor: Update Stripe flows for nullable stripe_customer_id (#205)
Opened
#211 chore: Database migration SQL - auth0_sub to UUID (#206)
Opened
#212 chore: Auth plugin and admin guard UUID migration (#206)
Opened
#213 chore: Admin system refactor for UUID migration (#206)
Opened
#214 chore: User profile repository refactor for UUID (#206)
Opened
#215 chore: Feature repository UUID validation (#206)
Opened
#216 chore: Supporting code UUID updates (#206)
Opened
#217 chore: Test fixtures and documentation for UUID migration (#206)
Opened
#220 bug: Post-migration bugs from UUID identity migration (#206)
Opened
#221 chore: Update email FROM address and fix unsubscribe link
Opened
#223 feat: Replace NHTSA VIN decode with Google Gemini via OCR service
Opened
#224 feat: Add VIN decode endpoint to OCR Python service (#223)
Opened
#225 feat: Add backend OCR client method and types for VIN decode (#223)
Opened
#226 feat: Rewire vehicles controller to use OCR VIN decode (#223)
Opened
#227 chore: Remove NHTSA code and update documentation (#223)
Opened
#228 feat: Update frontend and tests for Gemini VIN decode (#223)
Opened
#231 feat: Migrate Gemini SDK to google-genai and enable Google Search grounding for VIN decode
Opened
#232 feat: Update OCR dependency to google-genai (#231)
Opened
#233 feat: Migrate GeminiEngine to google-genai with Google Search grounding (#231)
Opened
#234 feat: Migrate MaintenanceReceiptExtractor to google-genai (#231)
Opened
#235 feat: Update test mocks for google-genai SDK (#231)