Docker's layer cache was reusing old images even after code changes.
Adding --no-cache ensures the Python code is always freshly copied.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- loadResults() now checks resultData.status before calling showSuccess()
- Only shows success UI when status is "success", shows failure UI for "fail"
- Added null check to renderLyrics() to prevent crash on null lyrics
- Added null check in showSuccess() before calling renderLyrics()
Fixes crash when navigating to result page while submission is still processing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Handle both old (audio_path) and new (audio_blob_path) keys in create_video
task to support tasks that were queued before the GCS migration deployed.
Also properly detect local vs GCS paths for photo_path.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add google-cloud-storage dependency to requirements.txt
- Add GCS configuration settings to config.py
- Create storage.py utility module with upload/download/delete operations
and temp file context managers for video generation
- Update submissions.py to upload photos to GCS and return full GCS URLs
- Update results.py to return full GCS URLs for video and record image
- Update workers.py to use GCS for audio download, video creation, and cleanup
- Update result.js to use audio_url directly from API response
- Update docker-compose.yml with GCS credentials mount
Storage now uses GCS bucket vday2026 in project holiday-project-india.
Database stores blob paths; URLs constructed at API response time.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds server-side image safety check to ensure users upload pet photos instead
of human images. Uses NudeNet with 0.5 confidence threshold and fail-open
behavior. Frontend shows loading state during analysis and error UI when
humans are detected.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add profanity detection using better-profanity library with:
- Real-time API validation during typing (500ms debounce)
- Defense-in-depth server-side validation on form submission
- Visual feedback with red borders and warning message
- Submit button disabled when profanity detected
- Fail-open behavior on API errors to not block users
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Allows frontend to access the MP3 audio URL as soon as download
completes, even while video generation is still in progress.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>