Сайт-афиша
для концертного
агентства 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 и админки. Рутинные ручные действия превращаются в правила, которые система выполняет сама и вовремя.
