Кейс · 17 / 17 HID Chess Club

Сайт шахматного клуба «Хід» с собственной системой управления контентом

Полный цикл: архитектура, backend, frontend, собственная админка и развертывание на VPS. Владелец клуба без технической подготовки самостоятельно управляет расписанием, тренерами, турнирами, блогом и ценами через собственную CMS с автосохранением – без Django-admin и сторонних платформ.

Сайт шахматного клуба HID Chess Club – главная страница
01

О продукте

«Хід» – шахматный клуб из Харькова, который воспитывает лидеров в учебе и общественной жизни: еженедельные занятия, обучение через шахматы, школьные и клубные турниры. Клуб работает на нескольких площадках в Харькове и Полтаве и объединяет более 250 участников.

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

02

Задача

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

За основу взяли собственный движок Artbrain CMS, изначально созданный для e-commerce, и полностью адаптировали его к задачам шахматного клуба: свои сущности, собственный UI админки, автосохранение вместо кнопок «Сохранить».

03

Версия для десктопа

Страницы обучения, турниров, информации о клубе, локаций и блога на широком экране 1440 px. Нажмите на карточку, чтобы увеличить.

Шахматное образование
Турниры клуба
О клубе и его влиянии
Локации и визит
Блог клуба
04

Версия для смартфона

Главная страница, обучение, турниры и страница участия в узком мобильном формате.

Главная
Образование
Турниры
Стать участником
05

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

CMS

Собственная CMS (автосохранение, 132 маршрута)

Backend

Python (Django 6.0 + DRF), SQLite / PostgreSQL

Frontend

Django-шаблоны, Tailwind, ванильный JS

Инфраструктура

nginx + gunicorn + systemd, i18n uk/en/ru

06

Что сделано

Собственная CMS с автосохранением

Любая форма с data-autosave отправляет FormData и обновляет DOM через [data-bind] – без кнопок «Сохранить». Редактирование происходит в выдвижных боковых панелях, тёмная и светлая темы работают через CSS-переменные. Владелец клуба сам ведёт расписание, тренеров, турниры, блог, цены и локации.

40 моделей, 132 маршрута админки

13 400 строк Python, 65 HTML-шаблонов, около 7 000 строк написанных вручную CSS/JS для админки, 29 миграций. Иерархия страниц обучения (главная → раздел → уровень → летний лагерь), турниры с дивизионами и результатами, локации с собственным графиком работы.

SEO-инфраструктура промышленного уровня

Единый источник JSON-LD (Organization, Website, Course, SportsEvent, FAQPage, LocalBusiness, BlogPosting) с данными напрямую из CMS. Динамический sitemap.xml покрыт тестом на рассинхронизацию с представлениями, есть robots.txt, /llms.txt для AI-краулеров, canonical, OG и hreflang.

Защита клиентского контента

HTML, который вводит клиент, санитизируется через bleach + BeautifulSoup + lxml, это защита от stored XSS. Есть ограничение запросов на вход и регистрацию, middleware канонического хоста с 301 редиректом со старого домена, CORS и анти-XSS экранирование внутри тегов <script>.

SSOT-паттерны и контролируемый радиус изменений

Расписание дня (schedule_today.py), SEO-данные и статусы турниров – единые источники данных, которые используются и в шапке, и на страницах. Синхронизация представлений с sitemap покрыта тестом, который завершается ошибкой при рассинхронизации.

Автоматизация и производительность

Таймер systemd ежедневно в 00:05 обновляет статусы турниров по датам: регистрация открыта, закрыта или завершена. Изображения автоматически уменьшаются и конвертируются в WebP через Pillow, используются lazy-loading, preconnect и decoding для быстрой загрузки.

07

Итог

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

Под капотом – архитектура промышленного уровня: 40 моделей, REST API, SSOT-паттерны, покрытые тестами инварианты, развитое SEO и автоматизация через systemd. Сайт развернут на VPS (nginx + gunicorn + systemd) и поддерживает два языка интерфейса.

08

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

Сайт работает на Python (Django 6.0) с Django REST Framework. База данных в продакшене – SQLite со схемой, совместимой с PostgreSQL. Публичная часть использует Django-шаблоны и ванильный JS, а админка – Tailwind и написанный вручную CSS. Серверный стек: nginx + gunicorn + systemd.

Это админка, написанная с нуля именно для шахматного клуба: автосохранение без кнопок «Сохранить», выдвижные панели редактирования, тёмная и светлая темы, а также только те сущности, которые действительно нужны клубу. Стандартный Django admin намеренно закрыт, поэтому владелец работает только в собственной CMS.

Да, в этом и состоит смысл проекта. Расписание занятий, тренеры, турниры, публикации в блоге, цены, локации и юридические страницы редактируются через CMS без разработчика, а изменения сохраняются автоматически.

JSON-LD генерируется из единого источника с данными напрямую из CMS (Organization, Course, SportsEvent, FAQPage, LocalBusiness, BlogPosting). Sitemap.xml динамический и покрыт тестом на рассинхронизацию, есть robots.txt, /llms.txt для AI-краулеров, canonical, hreflang и OG-теги.

Да. Мы разрабатываем сайты с кастомными админками для конкретных отраслей, когда готовые CMS не подходят под задачу. Оставьте заявку, и мы ответим в течение нескольких рабочих часов.

Начните свой путь к успеху

Есть проект? Давайте реализуем его вместе.

Нужен сайт с собственной админкой для вашей отрасли, чтобы управлять контентом без разработчика? Расскажите о задаче, и мы ответим в течение нескольких рабочих часов.

Все кейсы
— Также

Другие услуги

Калькулятор стоимости →
– Журнал · инсайты

Из нашего блога

Все статьи →
Позвонить+38 095 108 62 12 +38 097 599 66 89 Telegram Viber WhatsApp