Платформа для хранения и стриминга архивных школьных видео с 1900-х годов. HLS, очереди, S3, 334 города.
Архивные видеозаписи школьной жизни СССР и СНГ разбросаны по личным архивам и теряются. Нужна публичная платформа с удобным поиском по стране, городу, году и тематике — и возможностью загружать свои записи. Весь проект: архитектура, БД, API, UI/UX, деплой — в одиночку.
Спроектировал три независимых репозитория: Node.js API, публичный Next.js сайт, Next.js админ-панель. PostgreSQL + Prisma: 36 стран, 334 города с привязкой к странам, древовидная структура тегов с неограниченной вложенностью, каскадное удаление. Два VPS — Россия и Нидерланды — для обхода региональных ограничений.
Загрузка оригинала → BullMQ ставит задачу в очередь → FFmpeg транскодирует в HLS (адаптивный стриминг с несколькими качествами) → сегменты и превью уходят в Yandex Object Storage (S3). HLS.js на фронтенде обеспечивает плавный стриминг с переключением качества в реальном времени.
Next.js 14 App Router + SSR/ISR: каталог с навигацией по странам, городам, годам и десятилетиям. Поиск по тегам с вложенной структурой (дерево). HLS-плеер, лайки и комментарии без регистрации, форма загрузки с прогресс-баром. Страницы городов с обложками. Вёрстка строго по макетам Figma.
Модерация и редактирование метаданных, просмотр в модалке с HLS-плеером, удаление с очисткой S3. Управление тегами как файловый проводник — папки, вложенность, перемещение. Recharts: видео по годам/городам/тегам/статусам. Live-мониторинг CPU, RAM, uptime с историческим графиком. Счётчик онлайн через Redis (heartbeat 30 сек).
Полноценная видеоплатформа: пользователь загружает видео → автоматический транскодинг в HLS → публикация после модерации → поиск по 334 городам и 36 странам с тегами и фильтрами. Вся инфраструктура задеплоена на двух VPS, всё — в одиночку.