Add a comprehensive video review feature to the Final Review page that allows
reviewers to watch videos with caption overlays and add timestamped notes.
Backend:
- New ReviewNote model for MongoDB with job_id, asset_key, timestamp, content
- CRUD API endpoints at /jobs/{job_id}/review-notes
- Owner-only edit/delete permissions (admins can bypass)
- Database indexes for efficient querying
Frontend:
- VideoReviewPlayer component with video player and caption overlay
- NotesSidebar for viewing/adding notes with auto-highlight when video reaches timestamp
- SyncedCaptionList with auto-scroll and click-to-seek
- AssetTabs for switching between languages and accessible videos
- React Query hooks with 30s polling for collaborative updates
Features:
- Notes persist to database and are shared across all reviewers
- Notes highlight for 5 seconds when video playback reaches their timestamp
- Click note to seek video to that position
- Pause video to add note at current timestamp
- Accessible videos use retimed captions when available
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
24 lines
746 B
Python
24 lines
746 B
Python
"""Review Note model for timestamped video review notes."""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class ReviewNote(BaseModel):
|
|
"""A timestamped note attached to a video asset during review."""
|
|
|
|
id: Optional[str] = Field(None, alias="_id")
|
|
job_id: str
|
|
asset_key: str # e.g., "en", "es", "en_accessible"
|
|
timestamp_seconds: float # Video timestamp when note was created
|
|
content: str # Note text content
|
|
user_id: str # Author's user ID
|
|
user_name: str # Author's display name (denormalized for display)
|
|
created_at: datetime
|
|
updated_at: Optional[datetime] = None
|
|
|
|
class Config:
|
|
populate_by_name = True
|
|
use_enum_values = True
|