NLogN-2026 · pre-launch

Олимпиада задеплоена
в прод

Параллельный стек на той же VPS под Coolify. Своя БД-дельта, свой Redis, свой деплой — прод-NLogN не трогали. DNS прицепится утром, тогда — app.panicmath.academy.

Что сделали за ночь

Четыре крупные фичи. Каждая — отдельный кусок, можно отключить если что.

🎨

Новый дизайн под олимпу

Тёплый кремовый фон, коралл, скруглённые «двери» залов, бренд-таймер, лендинг с короткими правилами. Отдельный визуальный язык — не путается с основной платформой.

⚙️

Отдельный бэк-сервис

Параллельный API специально под олимпу. Делит с основным NLogN только базу (с накатанной обратимой дельтой). Свой Redis, свои очереди, свой деплой. Если что-то взорвётся — прод-курсы продолжат работать.

🎥

Прокторинг с камерой

Браузер просит доступ к камере, проходит короткая калибровка, дальше фоном пишется видео и считается доверие. Подмена лица, выход из кадра, второй человек — всё попадает в отчёт. Без отдельной программы, прямо в браузере.

📊

Базовая аналитика

Каждое значимое событие (зашёл в зал, решил задачу, нашёл ключ, закончил) пишется в append-only журнал. Поверх потом можно крутить любые отчёты — кто завис, какие задачи слишком сложные, на каком шаге сливаются.

Архитектура

Коралл — новые ресурсы, зелёная полоска — общее с продом, без полоски — прод как был.

Новое (наше)

Olymp-Api
NestJS · ветка olymp
●●●
Olymp-Frontend
Vite + React
●●●
Olymp-Redis
BullMQ + cache
●●●

Общее

Study-PG18
+ 7 таблиц olymp
обратимо
MinIO
storage.nlogn.info
видео клипы
JWT users
общий secret
тот же логин

Не трогали

Study-Api
study-api.nlogn.info
Study-Frontend
study.nlogn.info
Study-Redis
отдельный

Stack

Что под капотом.

backend
NestJS 10 · Sequelize · BullMQ
frontend
Vite · React 18 · TS strict
db
Postgres 18
cache/queue
Redis 7
storage
MinIO (S3)
proxy
Traefik v3.6 · LE
ai tutor
OpenRouter · GPT-5.2
proctoring
MediaPipe · MediaRecorder VP8

Цифры

Baseline прод-БД на момент деплоя + параметры самой олимпы.

5 372
Users
306
Courses
30 319
Problems
272 450
Solutions
1.9 GB
DB size
8
olymp tasks
6
с AI-чатом
3+3+1
math · puzzle · final
3+3
условие финала
~4ч
общее время

До старта

Зелёное — готово. Жёлтое — на завтра / 17 мая.

Бэкап прод-БД (929 MB)
done
Миграция накатана, прод-код её не использует
done
3 ресурса Coolify (api/front/redis) — все живые
done
nlogn-2026 + 8 задач + 5 тест-юзеров (olymp_test_1..5)
done
HTTPS Let's Encrypt автоматом через Traefik
done
DNS panicmath.academy — Михаил настроит утром
14 мая
Команда смотрит UI + содержание задач
14–16
Перед 17 мая — UPDATE Olympiads SET startsAt='...'
16 мая
После события — закрыть is_public на Postgres (BUG-014)
18 мая

Найденные баги

Документированы в docs/bugs.md.

closed
BUG-012 · race на Participations
OlympiadParticipations без UNIQUE — дубликаты в race, service и worker писали в разные строки → 0 баллов. Фикс — композитные UNIQUE индексы.
open · workaround
BUG-013 · MinIO video
Дефолтный allowedFileTypes в minio.config.ts не включает video/webm. Сейчас пофикшено env-override'ом в Olymp-Api — но в коде стоит починить через PR в main.
open · post-deploy
BUG-014 · публичная БД
Study-PG18-Production висит с is_public=true на порту 5446. Закрыть после события одной curl-командой через Coolify API.

Документация

Всё в ветке olymp. Следующий дев разберётся без меня.