PRISMATICA

Премия «Человек труда»: 7 дней до запуска, 871 участник и 226 274 голоса за два этапа

ЧЕЛОВЕК ТРУДА 33 × PRISMATICAPRISMATICA

До открытия приёма заявок — 7 дней. Сайта нет. Даты утверждены официальным положением и перенести их нельзя. Голосование планируют проводить реакциями во ВКонтакте — без защиты от накрутки и проверяемого результата. За семь дней мы запустили первый релиз платформы, а затем по ходу премии превратили её в полноценную систему: заявки, модерация, каталог участников, двухэтапное голосование, антифрод и админка для оргкомитета. За два этапа через систему прошли 871 участник и 226 274 голоса, итоги премии опубликованы 11 сентября.

Госсектор и НКООнлайн-голосованиеМодерация заявокVK OAuthАнтифродNext.js152-ФЗ
Первый экран сайта премии «Человек труда» с кнопкой голосования и текущим этапом

Коротко

Клиент
Владимирский фонд поддержки регионального сотрудничества и развития — заказчик цифровой платформы регионального этапа Национальной премии «Человек труда»
Задача
За 7 дней запустить первый рабочий релиз платформы премии: приём заявок по шести номинациям, модерацию и публичные страницы. Дальше — без остановки проекта развить систему до каталога участников и открытого голосования жителей области в два этапа: муниципального и регионального
Что сделали
Спроектировали архитектуру, разработали дизайн по брендбуку премии, систему подачи и модерации заявок, каталог участников, двухэтапное голосование с VK-авторизацией и антифродом. Развернули платформу на российской инфраструктуре и сопровождали её во время проведения премии
Результат
871 участник в каталоге, 226 274 голоса за два этапа и 72 259 голосующих на муниципальном этапе. Итоги премии опубликованы 11 сентября, платформа передана заказчику. 7 дней от старта проекта до первого production-релиза

Не сайт, а система проведения премии

К нам пришли с положением о премии и календарём, утверждённым официальным документом: приём заявок, муниципальное голосование, региональный этап и церемония были расписаны по датам. Это был не сайт премии в привычном смысле. Нужно было построить рабочую систему: принять сотни заявок и документов, дать оргкомитету инструменты модерации, опубликовать участников, провести два этапа голосования, защитить результаты от накрутки и автоматически переключать механику сайта по календарю премии.

  • Заявки: шесть номинаций, анкета кандидата, документы и подтверждения достижений
  • Модерация: единая очередь, редактирование, одобрение и отклонение без участия разработчиков
  • Каталог: поиск и фильтрация сотен опубликованных участников
  • Голосование: муниципальный и региональный этапы с разными правилами
  • Антифрод: VK OAuth, ограничения на уровне базы данных, rate limiting, журнал голосований и инструменты аннулирования
  • 152-ФЗ: российская инфраструктура, политика обработки персональных данных и журнал действий
  • Календарь: автоматическое переключение этапов без пересборки сайта и ручного вмешательства
Календарь этапов премии на сайте: шесть этапов, текущий отмечен меткой «Идёт сейчас»

От решений до эксплуатации

Проект вели релизами, привязанными не к внутреннему плану разработки, а к реальным этапам премии. Каждый следующий контур системы выходил в production к тому моменту, когда он становился нужен участникам и оргкомитету.

  1. 01

    Сначала решения, потом код — 9–13 июля

    Первые четыре дня ушли не на код, а на решения, цена ошибки в которых была слишком высокой. Зафиксировали архитектуру, инфраструктуру, правила голосования и границы первого релиза. Спорные решения оформляли в ADR, чтобы не возвращаться к ним посреди разработки. Один из главных вопросов — как ограничить голосование по муниципалитетам. Один муниципалитет на человека лучше защищает от манипуляций, но плохо соответствует реальному поведению людей: жить можно в одном городе, работать в другом, а быть связанным с третьим. В итоге ограничили выбор пятью муниципалитетами — компромисс между защитой от накрутки и реальным пользовательским сценарием. Позже это правило было закреплено в акте.

  2. 02

    Первый релиз за 7 дней — к 16 июля

    Первый релиз должен был решить одну задачу: 16 июля открывается приём заявок, и в этот день платформа должна быть готова принимать участников. Собрали форму заявки по требованиям федерального положения, загрузку файлов и подтверждений достижений, валидацию данных, очередь модерации, одобрение, отклонение и удаление заявок, редактирование карточек с записью действий в журнал, публичные страницы премии и положение. 16 июля, ровно в день открытия приёма заявок, первый релиз был в production и принят заказчиком. От старта проекта прошло семь дней. Следом платформу перевели на боевые домены, включая кириллический.

    • форма заявки по требованиям федерального положения
    • загрузка файлов и подтверждений достижений
    • очередь модерации: одобрение, отклонение, удаление
    • публичные страницы премии и положение
  3. 03

    От приёма заявок — к системе голосования — 20 июля – 4 августа

    После запуска первого релиза начали собирать второй контур платформы: публичный каталог участников и механику голосования. Появились поиск и фильтры, авторизация через ВКонтакте, разные правила для двух этапов, живые рейтинги и антифрод. На муниципальном этапе пользователь может голосовать максимум в пяти муниципалитетах и выбрать по одному кандидату в каждой из шести номинаций, голос можно изменить или отменить. На региональном этапе — шесть голосов, по одному за кандидата в каждой номинации. Защита результата реализована не только в интерфейсе: уникальность голоса контролируется составным ключом в базе данных, дополнительно работают лимиты голосов и rate limit по IP. Каждый голос попадает в журнал с техническими данными, необходимыми для проверки результата. К старту голосования платформа стала не просто интерфейсом для выбора кандидатов, а системой, в которой результат можно проверить и при необходимости скорректировать при выявленной накрутке.

    • муниципальный этап: до 5 муниципалитетов × 6 номинаций, голос можно изменить или отменить
    • региональный этап: 6 голосов, по одному за кандидата в каждой номинации
    • уникальность голоса — составной ключ в базе, а не проверка на клиенте
    • лимит голосов и rate limit по IP, журнал с техническими данными
    • из админки: аннулирование голоса, блокировка, журнал и выгрузка данных для анализа
  4. 04

    Календарь изменился после запуска — 6–19 августа

    6 августа оргкомитет официально изменил сроки уже работающей премии: приём заявок продлили до 16 августа, а муниципальное голосование перенесли на 17–23 августа. Такой сценарий предусмотрели ещё при проектировании: расписание этапов вынесли в отдельную конфигурацию, от которой зависели доступность функций, тексты, призывы к действию и обратные отсчёты. Поэтому не пришлось вручную переписывать страницы и искать условия по всему проекту — весь календарь платформы перенастроили за один день. Параллельно, когда участников стало больше нескольких сотен, каталог перевели на пагинацию. Для оргкомитета добавили экспорт реестра заявок в XLSX, экспорт списка голосующих, подсветку повторных заявок в одной номинации, дополнительные инструменты проверки голосов и зеркало новостей из группы ВКонтакте.

    • 16 августа — приём заявок завершён, в каталоге 871 одобренный участник
    • 17 августа — началось муниципальное голосование
  5. 05

    Голосование, проверка результата и итоги — 17 августа – 11 сентября

    Муниципальный этап прошёл 17–23 августа: 103 851 голос и 72 259 голосующих, жители выбирали кандидатов в 23 муниципалитетах по шести номинациям. Региональный этап с бюллетенем из 125 кандидатов шёл с 28 августа по 6 сентября — 122 423 поданных голоса; приём остановили переводом фазы, а голоса, поданные после планового закрытия, сняли отдельным решением. Каждый голос лежит в журнале с техническими данными, поэтому результат проверяется по журналам: спорные голоса снимаются решением оргкомитета, а не «на глаз». 11 сентября итоги опубликованы — 33 победителя и обладателя спецпризов; цифры голосов регионального этапа по решению заказчика не публикуются. После премии платформа передана на инфраструктуру заказчика: перенос занял две минуты.

    • муниципальный этап: 103 851 голос, 72 259 голосующих, 23 муниципалитета
    • региональный этап: 122 423 голоса, 125 кандидатов в бюллетене
    • проверка результата — по журналу голосований, спорные голоса снимает оргкомитет
    • итоги опубликованы 11 сентября: 33 победителя и обладателя спецпризов
    • после премии платформа передана заказчику на его инфраструктуру

Интерфейс следует за этапами премии

Платформа сама понимает, какой этап идёт сейчас. Шапка, призывы к действию, обратный отсчёт и доступность голосования автоматически меняются при переходе между фазами. Оргкомитету не нужно обращаться к разработчикам, чтобы «включить голосование» или заменить тексты перед следующим этапом. Показатели на главной странице считаются непосредственно из базы данных в реальном времени — без ручной сверки таблиц.

Блок живых показателей премии на главной странице сайта
Показатели на главной считаются из базы в реальном времени — оргкомитету не нужно ничего сводить вручную.
Экран голосования с вкладками муниципалитетов и числом кандидатов в каждом
Голосование: пользователь видит муниципалитеты, количество представленных кандидатов и последовательно голосует в каждой номинации.
Каталог участников премии с поиском, фильтрами по номинации и муниципалитету
Каталог: 871 участник не превращается в бесконечную ленту — поиск, фильтры по номинации и муниципалитету, сортировка и пагинация.

Результаты премии

Премия проведена полностью: два этапа голосования, опубликованные итоги и передача платформы заказчику. Все показатели — из продакшен-базы системы на момент закрытия этапов.

Участников в каталоге

Было: Сайта не было

Стало: 871

На момент закрытия приёма 16 августа в публичном каталоге опубликован 871 участник — по реестру одобренных заявок

Голосов за два этапа

Было: Реакции в паблике ВКонтакте

Стало: 226 274

Все голоса, поданные в системе за премию: муниципальный этап — 103 851, региональный — 122 423

Голосующих

Было: —

Стало: 72 259

Уникальные авторизованные через ВКонтакте голосующие на муниципальном этапе (17–23 августа, семь дней)

Региональный этап

Было: —

Стало: 125 кандидатов

Бюллетень регионального этапа: 125 кандидатов, шесть номинаций, 28 августа — 6 сентября

Итоги премии

Было: —

Стало: 33 победителя

Результаты регионального этапа опубликованы 11 сентября 2026 года: победители в шести номинациях и обладатели спецпризов

Охват

Было: —

Стало: 6 номинаций, 23 муниципалитета

Участники премии представлены из 23 муниципалитетов Владимирской области

Срок до первого релиза

Было: —

Стало: 7 дней

Старт работ — 9 июля; первый релиз принят заказчиком и запущен в production — 16 июля

Простой сервиса

Было: —

Стало: Около 2 минут

Разбор логов nginx за 18.08: все ответы 502 пришлись на два окна пересборки; при переносе платформы на инфраструктуру заказчика простой — две минуты

Проверяемость результата

Было: Ручной подсчёт реакций

Стало: Журнал голосований, аннулирование решением оргкомитета

Каждый голос хранится в журнале с техническими данными: результат проверяется по журналам, спорные голоса снимаются решением оргкомитета, реестры выгружаются в XLSX

После премии платформа передана заказчику: данные, домены и сертификаты — на его инфраструктуре, порядок передачи доступов согласуется по договору.

Чем мы пользовались

NNext.js
TSTypeScript
PGPostgreSQL
PRPrisma
RERedis
VKVK OAuth
TATailwind CSS
NGNginx
DKDocker

От положения о премии — к работающей цифровой системе

За семь дней проект прошёл путь от положения и календаря до первого работающего production-релиза. Дальше система росла вместе с премией: 871 участник, два этапа голосования, 226 274 голоса, антифрод, журнал действий и собственные инструменты оргкомитета. Но главное изменение — не перенос голосования из ВКонтакте на отдельный сайт. Процесс, который мог зависеть от таблиц, переписки и ручного подсчёта реакций, стал управляемой цифровой системой с проверяемым результатом. Премия проведена от приёма заявок до опубликованных итогов, а платформа после завершения передана заказчику на его инфраструктуру.

Частые вопросы

Что успели за первую неделю?

Первый релиз вышел за 7 дней: приём заявок по шести номинациям, каталог участников и модерация. Дальше система развивалась уже по ходу премии.

Как защищали голосование?

Авторизация через ВКонтакте, двухэтапное голосование, лимиты и антифрод. Каждый голос остаётся в журнале с техническими данными, поэтому результат проверяется по журналам, а спорные голоса снимаются решением оргкомитета — в отличие от подсчёта реакций в паблике.

Сколько людей прошло через систему?

871 одобренная заявка в каталоге участников, 72 259 голосующих на муниципальном этапе и 226 274 голоса за два этапа голосования.

Чем закончилась премия?

Итоги регионального этапа опубликованы 11 сентября 2026 года: 33 победителя и обладателя спецпризов. Платформа сама переключала фазы и тексты, поэтому публикация итогов не потребовала ни пересборки сайта, ни ручных правок.

Что стало с платформой после премии?

Она передана на инфраструктуру заказчика: перенос занял две минуты, данные сверены до совпадения, домены и сертификаты оформлены на заказчика.

Что с требованиями к персональным данным?

Система работала в контуре 152-ФЗ: модерация заявок, разграничение доступа и защищённое хранение данных участников.

Похожие проекты

Похожая задача — голосование, конкурс, приём заявок с модерацией?

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

Календарь этапов премии с отметкой текущего этапа