Параллельный стек на той же VPS под Coolify. Своя БД-дельта, свой Redis, свой деплой — прод-NLogN не трогали. DNS прицепится утром, тогда — app.panicmath.academy.
Четыре крупные фичи. Каждая — отдельный кусок, можно отключить если что.
Тёплый кремовый фон, коралл, скруглённые «двери» залов, бренд-таймер, лендинг с короткими правилами. Отдельный визуальный язык — не путается с основной платформой.
Параллельный API специально под олимпу. Делит с основным NLogN только базу (с накатанной обратимой дельтой). Свой Redis, свои очереди, свой деплой. Если что-то взорвётся — прод-курсы продолжат работать.
Браузер просит доступ к камере, проходит короткая калибровка, дальше фоном пишется видео и считается доверие. Подмена лица, выход из кадра, второй человек — всё попадает в отчёт. Без отдельной программы, прямо в браузере.
Каждое значимое событие (зашёл в зал, решил задачу, нашёл ключ, закончил) пишется в append-only журнал. Поверх потом можно крутить любые отчёты — кто завис, какие задачи слишком сложные, на каком шаге сливаются.
Коралл — новые ресурсы, зелёная полоска — общее с продом, без полоски — прод как был.
Что под капотом.
Baseline прод-БД на момент деплоя + параметры самой олимпы.
Зелёное — готово. Жёлтое — на завтра / 17 мая.
nlogn-2026 + 8 задач + 5 тест-юзеров (olymp_test_1..5)UPDATE Olympiads SET startsAt='...'is_public на Postgres (BUG-014)Документированы в docs/bugs.md.
OlympiadParticipations без UNIQUE — дубликаты в race, service и worker писали в разные строки → 0 баллов. Фикс — композитные UNIQUE индексы.allowedFileTypes в minio.config.ts не включает video/webm. Сейчас пофикшено env-override'ом в Olymp-Api — но в коде стоит починить через PR в main.is_public=true на порту 5446. Закрыть после события одной curl-командой через Coolify API.Всё в ветке olymp. Следующий дев разберётся без меня.