Skip to content
← Back to selected work
Project Case Study

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.

01

Next.js interface

02

Upload/API service

03

RabbitMQ work queue

04

Media processing worker

05

Redis status channel

06

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.