## Summary
- Add Python-based OCR service container (`mvp-ocr`) as the 6th service in docker-compose
- Python 3.11-slim with FastAPI/uvicorn for the API framework
- Tesseract OCR with English language pack for text extraction
- pillow-heif for HEIC image support (iPhone photos)
- opencv-python-headless for image preprocessing
- Health endpoint at `/health` returns `{"status": "healthy"}`
- Unit tests verify health endpoint, HEIC support, and Tesseract availability
## Test plan
- [x] `mvp-ocr` container builds successfully
- [x] Container starts and passes health check
- [x] FastAPI app responds at `/health` with `{"status": "healthy"}`
- [x] pillow-heif can load HEIC images (unit test)
- [x] Tesseract can process a test image (unit test)
- [x] Container integrates with existing backend network
- [x] docker-compose.yml shows 6 services configured
Closes #64
---
Generated with [Claude Code](https://claude.ai/code)
Add Python-based OCR service container (mvp-ocr) as the 6th service:
- Python 3.11-slim with FastAPI/uvicorn
- Tesseract OCR with English language pack
- pillow-heif for HEIC image support
- opencv-python-headless for image preprocessing
- Health endpoint at /health
- Unit tests for health, HEIC support, and Tesseract availability
Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add OCR image build/push to staging workflow
- Add OCR service with image override to staging compose
- Add OCR service with image override to blue-green compose
- Add OCR image pull/deploy to production workflow
- Include mvp-ocr-staging in health checks
The OCR container is a shared service (like postgres/redis),
not part of blue-green deployment.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
The documents migration 003_reset_scan_for_maintenance_free_users.sql
depends on user_profiles table which is created by user-profile feature.
Move user-profile earlier in MIGRATION_ORDER to fix staging deployment.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Backend with fresh migrations can take ~3 minutes to start.
Increased from 10x5s (50s) to 24x10s (240s) to accommodate.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
The CI was failing because Docker marked the backend unhealthy before the CI
wait loop completed. The backend needs time to run migrations and seed vehicle
data on startup.
Changes:
- start_period: 40s -> 180s (3 minutes)
- retries: 3 -> 5 (more tolerance)
Total time before unhealthy: 180s + (5 × 30s) = 5.5 minutes
Co-Authored-By: Claude Opus 4.5 <[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
mvp-ocr) as the 6th service in docker-compose/healthreturns{"status": "healthy"}Test plan
mvp-ocrcontainer builds successfully/healthwith{"status": "healthy"}Closes #64
Generated with Claude Code