Download button now redirects to backend endpoint that generates
GCS signed URLs with Content-Disposition: attachment header,
forcing browser download instead of opening in new tab.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace arbitrary 100ms setTimeout with proper player.load() call and
loadedmetadata event listener. This fixes intermittent NotSupportedError
when switching from Sonauto streaming to final MP3.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>