Vimero
Service-oriented video platform with queue-backed processing and realtime state.
Problem
Video upload, processing, and playback pull in different directions: the interface should stay responsive while expensive media work happens outside the request path.
Constraints
- Keep upload and processing work separated so slow transcoding does not block user-facing flows.
- Expose status changes clearly enough for the frontend to explain what is happening.
- Use infrastructure pieces that make queueing, realtime state, and delivery boundaries visible.
Architecture
The system is framed as separate upload, processing, realtime, and delivery responsibilities connected by a queue and shared status state.
Next.js interface
Upload/API service
RabbitMQ work queue
Media processing worker
Redis status channel
Delivery/viewing path
Interface sends upload intent to the API service
API service queues processing work instead of doing media work inline
Worker consumes queued jobs and updates processing state
Redis-backed status lets the interface show progress without polling every service
Processed media moves through the delivery path for playback
Tradeoffs
- Splitting services makes scaling boundaries easier to discuss, but it also increases local development and deployment coordination.
- Queueing protects request paths from media work, but it introduces job ordering, retry, and visibility concerns.
- Realtime status improves feedback, but every status transition needs a clear source of truth.
Failure modes
- A processing worker can fail after accepting a job, so retries need idempotent job handling.
- A queue backlog can make uploads appear stuck unless the UI distinguishes queued, processing, failed, and complete states.
- Status updates can drift from stored media state if processing and persistence are not updated consistently.
What I would improve next
- Add a small operational dashboard for queue depth, failed jobs, and oldest pending upload.
- Document retry and dead-letter behavior around media jobs.
- Tighten the contract between processing state and the playback-ready delivery path.