← Назад ко всем проектам

Клиентский проект

MyLanit — веб-часть фотогалерей и фотоконкурсов для корпоративного портала

MyLanit — веб-часть фотогалерей и фотоконкурсов для корпоративного портала

Технологии

ReactSharePointReduxGalleryPhotoProjectFrontend

Услуги

  • Анализ требований и архитектура решения
  • Разработка кастомной веб-части на React + Redux
  • Интеграция с SharePoint REST API и списками
  • Интеграция rich-text-редактора TinyMCE
  • Интерфейс администратора и инструменты модерации контента
  • Проектирование API-контракта с параллельной backend-командой

Результаты

  • Самообслуживаемая веб-часть фотогалереи и конкурса
  • Автоматический жизненный цикл конкурса — голосование открывается и закрывается без участия IT
  • Админ-веб-часть с полным CRUD, модерацией и дашбордом результатов
  • Галерея на masonry-сетке с бесконечной прокруткой и функциями вовлечения (лайки, комментарии, голосование)

Задача

ЛАНИТ нужен был способ проводить внутренние фотоконкурсы на корпоративном портале SharePoint — то, чего не было из коробки. Сотрудники должны иметь возможность загружать фото, голосовать за понравившиеся и оставлять комментарии, а HR-менеджерам нужен был полный контроль над жизненным циклом конкурса без правки кода и звонков в IT.

Исследование

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

Рассмотренные варианты

Перед выбором решения оценили три направления:

  1. Готовые надстройки SharePoint — отклонены, потому что ни одна не поддерживала кастомную логику голосования или требования к брендингу клиента.
  2. Внешний сервис во встроенном iframe — отклонён из-за корпоративной политики безопасности, запрещающей обработку внутреннего контента сторонними системами.
  3. Кастомная веб-часть на React — выбрана. Полный контроль над UX, владение данными остаётся внутри SharePoint, а кодовую базу может поддерживать штатная команда.

Решение

Кастомная веб-часть на React была единственным путём, удовлетворяющим всем ограничениям одновременно: суверенитет данных, свобода дизайна и возможность выпустить оба режима из единого разворачиваемого артефакта. Для управления состоянием выбрали Redux — с учётом сложности состояния голосования между компонентами; Redux-Router обеспечил виртуальную навигацию без изменений серверной маршрутизации в SharePoint.

Реализация

Фронтенд и бэкенд разрабатывались параллельно при строгой дисциплине API-контракта. Плитки фото используют masonry-сетку для раскладки в стиле Pinterest; react-infinite-scroller полностью убирает пагинацию. Кастомная обёртка над TinyMCE связывает rich-text-редактор с Redux Forms — нетривиальная интеграция, потребовавшая аккуратного управления жизненным циклом, чтобы избежать утечек памяти. Серверная запланированная задача следит за датами окончания конкурсов и автоматически переводит их в режим результатов, убирая любой ручной шаг из процесса HR.

Выпущены две ролевые поверхности: веб-часть для сотрудников (загрузка, просмотр, лайки, комментарии, голосование) и отдельная админ-веб-часть (полный CRUD для галерей и конкурсов, очередь модерации, дашборд результатов с защитой от случайного удаления).

Результат

HR-команды перешли от координации фотоконкурсов по почте с ручным подсчётом голосов в таблицах к полностью самообслуживаемому процессу. Создание конкурса занимает менее двух минут. Голосование закрывается автоматически. Результаты видны всем сотрудникам в момент истечения дедлайна — участие IT не требуется ни на одном этапе.

Обзор пользовательского интерфейса

Обзор интерфейса администратора

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта — запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок