Enterprise-запись видео и управление доказательной базой в национальном масштабе.
VALT, браузерная платформа записи и видеонаблюдения, которой пользуются 770+ организаций по всем США (правоохранительные органы, программы медицинской симуляции и центры защиты детей): прямые трансляции с IP-камер, запись зашифрованных материалов и управление ими через интерфейс, которому не нужно обучение. Я провёл на проекте четыре года ведущим разработчиком, работая и во фронтенде на Vue, и в бэкенде на Symfony, и даже в слое стриминга на Java.

Четыре года ведущий разработчик VALT: владел фичами целиком, и во фронтенде на Vue, и в бэкенде на Symfony (PHP), а не только на одной стороне.
Когда продукт накопил много разнородной функциональности, я предложил более чистую архитектуру: дизайн в стиле DDD, разбитый на слои с гексагональной структурой (порты и адаптеры). Написал по ней основную документацию, согласовал с командой и довёл до внедрения. Заодно это распутало дублирование, которое я заметил между внутренним API и публичным API, на котором строились клиенты. Параллельно выстроил культуру тестирования во фронтенде: ввёл юнит-тесты там, где их не было, и интеграционные тесты как стандарт.
Работал напрямую с инженерной командой американского клиента. Их разработчики присылали код мне на ревью; я регулярно его оценивал, указывал, что и как починить правильно, и был автором конвенций, по которым строился весь проект.
Выстроил end-to-end и функциональные тесты по всему продукту, поверх юнит- и интеграционной дисциплины, которую ввела новая архитектура.
Провёл полную миграцию на месте, переведя кодовую базу с классового стиля (vue-class-component / vue-property-decorator) на Composition API, не замораживая поставку фич. По пути оптимизировал производительность рантайма.
Возглавил переход с Webpack на Vite и упростил конфигурацию тулчейна: вся команда стала катить быстрее каждый день.
Помог переработать интерфейс в редизайне, который заметно улучшил удобство использования.
Когда стриминг в реальном времени сломался глубоко в медиа-слое, я сам залез в Java-модуль Wowza и починил его. Не тот язык, на котором я живу, но проблему нужно было решить, и я взял её на себя.
У старых IP-камер не было протокола аудио реального времени (VoIP) для обратной связи, поэтому звук слался по HTTP и задержка копилась, пока не становилась невыносимой. Я вынес захват и кодирование звука из основного потока в AudioWorklet, провёл конвертацию формата прямо в этом выделенном аудиопотоке на фронтенде, а затем отдавал обработанный поток модулю, который шлёт его на камеру. Дрейф исчез, аудио осталось синхронным.
Спроектировал и собрал её целиком (API на Symfony и UI на Vue) и аккуратно встроил в существующую архитектуру записи.
Агрегация на бэкенде в Symfony плюс дашборды на Vue: администраторам уходит детальная статистика использования и отчёты по подразделениям.
Используют Правоохранительные органы, Медицинская симуляция (HIPAA), Центры защиты детей.
До 9 IP-камер на одном экране с поворотом, наклоном, зумом и двусторонним аудио.
Синхронная мультикамерная запись по SSL/RTMPS с нарезкой и экспортом.
Отмечайте моменты на записи, ищите их и выгружайте отчёты для разбора.
Гранулярные права и интеграция с каталогом для enterprise-развёртываний.
Повторяющиеся расписания записи и удалённое управление камерами с пресетами позиций.
Контроль доступа, политика хранения и настраиваемые отчёты по использованию подразделениями.







