Сайт-афиша
для концертного
агентства GNG

Дизайн, фронтенд, backend, база данных и админ-панель под ключ

Немного о проекте

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

наша задача

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

Публичный сайт

Мы нарисовали тёмный дизайн с фирменным жёлтым акцентом и собрали сайт, который полностью работает на данных из нашего API:
  • автоопределение города по геолокации с подтверждением «Ваш город — Москва?», у каждого города свой адрес вида gng.events/msk;
  • карусель баннеров с отдельными картинками для десктопа и мобильных;
  • афиша по городу с подгрузкой «Загрузить ещё», города отсортированы по количеству концертов;
  • страница концерта с кнопками брони или покупки билета, виджетом билетного оператора, правилами посещения и возрастным ограничением;
  • каталог артистов и человекочитаемые ссылки на концерты: /billboards/дата/город/артист.

Отложенная публикация

Главная фишка админки в том, что весь жизненный цикл концерта настраивается заранее, а дальше сайт работает сам:
  • Баннеры и афиши по расписанию. Менеджер заводит анонс за неделю и ставит дату и время публикации по Москве. До этого момента запись не видна на сайте, а потом появляется без участия человека.
  • Бронь → билеты. У концерта два момента: открытие брони и старт продаж. Сначала на сайте показываются кнопки брони во ВКонтакте и Telegram, а в заданную минуту они автоматически сменяются кнопками покупки билета и meet&greet.
  • Автоматическое снятие. Прошедшие концерты сами исчезают из афиши. Если для того же артиста, города и даты заведена новая запись, она после публикации заменяет старую.
  • Вкладки «Scheduled» показывают всё, что ещё ждёт своего часа, с подсвеченным временем публикации.

Админ-панель

Команда агентства управляет сайтом без разработчиков:
  • города, артисты, баннеры, брони и афиши с поиском, сортировкой и экспортом;
  • загрузка фото с превью прямо в форме, файлы хранятся в S3-совместимом хранилище;
  • порядок артистов и баннеров настраивается перетаскиванием мышкой;
  • выбор даты и времени в календаре по московскому времени, а в базе всё хранится в UTC, поэтому часовые пояса не путаются;
  • возрастные ограничения и страна выбираются из выпадающих списков;
  • вход по логину и паролю.

Технологический стек

  • Python, FastAPI (async) — публичное API;
  • PostgreSQL, SQLAlchemy 2.0, Alembic — база данных и миграции;
  • SQLAdmin — админ-панель с кастомными полями, вкладками и drag-and-drop;
  • MinIO (S3) — хранение изображений;
  • Tilda + собственные JS-модули — вёрстка и динамические блоки афиши;
  • Docker, Nginx — развёртывание, HTTPS и красивые URL концертов.

что у нас получилось

Агентство получило сайт-афишу, которая сама следит за актуальностью. Менеджер один раз заводит концерт с датами брони и продаж, а дальше сайт сам публикует анонс, открывает бронь, переключает кнопки на продажу билетов и снимает концерт после выступления. Посетитель сразу видит концерты своего города, а команда больше не дежурит у админки в момент старта продаж.

Этот проект показывает, как мы делаем сайт под ключ: от дизайна до backend и админки. Рутинные ручные действия превращаются в правила, которые система выполняет сама и вовремя.