All case studies
FullstackProduct Tech Lead

MediArchive

MediArchive, a media asset management system: broadcasters and production companies keep whole video archives in it, from ingesting the raw footage to handing finished packages to editors and partners.

MediArchive

Outcome

−70%
of the content processing time: proxy copies and scene detection run automatically
3
delivery options: SaaS, an appliance and installation inside the customer’s infrastructure
4
access roles: administrator, archivist, content manager and editor

The business problem

A broadcaster’s video archive is terabytes of footage people come back to for years. As long as material is described by hand and the metadata lives in spreadsheets, an editor spends more time finding the right shot than cutting it. The product had to cover the whole path of a file — ingest, description, storage, processing and delivery — and install in three modes, because a TV channel will not put its archive in someone else’s cloud. One more requirement: every customer has its own description fields and its own roles, and changing them cannot mean a release for a single installation.

My role

Product Tech Lead: I owned the architecture of MediArchive and kept the client, the domain backend and the media pipeline adding up to one product rather than three separate services. I split the system into modules, set the contracts between them, ran code review, worked through incidents on customer installations and planned releases with the team — including version 1.8 with AI search, custom title states and real-time updates.

The solution

The client is React with Effector: the category tree, the grids, the viewer and the settings share one store, so the table, the player and the metadata panel never drift apart. The server side is split: NestJS holds the domain — categories, clipbins, permissions, metadata — while Python services on FastAPI handle the media: proxy copies, thumbnails, scene detection. RabbitMQ sits between them, so long processing never blocks the interface and survives a service restart. Data lives in MongoDB and PostgreSQL. The shape of the system is not hard-coded: tables and metadata forms are described by JSON configurations with an editor and a live preview inside the settings, and a form is bound to a role, so an archivist and an editor see different fields on the same title. Ingest goes through WatchFolder: a folder on the user’s machine syncs into a category and resumes uploading after network failures. Material is marked up with locators on IN/OUT timecodes; scenes found by AI land in the same grid and become user locators once edited by hand. Builds and rollout run on Docker and Jenkins, and the product ships as SaaS, as an appliance and inside the customer’s own infrastructure. MediArchive is registered with Rospatent and listed in the Russian software registry.

Stack

  • React
  • TypeScript
  • Effector
  • NestJS
  • FastAPI
  • MongoDB
  • PostgreSQL
  • RabbitMQ
  • Docker
  • Jenkins