🌿

Сайт-витрина на WordPress с заказом во ВКонтакте

для бренда эфирных масел «Дыхание Поволжья», под мобильный трафик с билбордов

Лёгкий сайт-витрина на WordPress для бренда эфирных масел: каталог с объёмами и оптом, корзина на устройстве покупателя, заказ через сообщения ВКонтакте и бот сообщества, RU/EN, админка, где цены и тексты меняет сам заказчик.

Заказчик: Дыхание Поволжья

В продакшене
2 языка
русский и английский, переключатель в шапке, язык определяется по браузеру
1 каталог
на сайт и бота ВКонтакте: цены и наличие правятся в одном месте
14 дней
хранится ежедневная копия базы и загруженных фото
Сайт-витрина «Дыхание Поволжья» на WordPress от DevUnit Lab: главная и каталог с ценами на телефоне
Сайт-витрина «Дыхание Поволжья» на WordPress от DevUnit Lab: главная и каталог с ценами на телефоне

Задача

Заказчик, бренд натуральных эфирных масел и гидролатов «Дыхание Поволжья», размещает рекламу на билбордах в Москве. Человек с улицы переходит по ссылке с билборда, почти всегда с телефона, смотрит каталог и идёт покупать. Оплата на сайте не нужна: по договорённости с заказчиком весь процесс покупки проходит в сообществе ВКонтакте, а сайт должен привести туда покупателя с уже выбранным товаром.

Требования к сайту сформулированы просто:

  • мгновенная загрузка на мобильном, без тяжёлых конструкторов и внешних шрифтов;
  • оформление по брендбуку заказчика: цвета, шрифты Bebas Neue и Geologica, векторный логотип из файлов дизайнера;
  • админка, в которой заказчик без опыта работы с WordPress сам меняет товары, цены, наличие и почти все тексты сайта;
  • русская и английская версии, светлая и тёмная тема.

Решение

Сайт-витрина на WordPress с собственной темой без сторонних плагинов и конструкторов, на чистых CSS и JS. Сайт-витрина показывает товар и ведёт к заказу, но сам оплату не принимает. Рядом работает бот сообщества ВКонтакте на Python, который принимает заказ с сайта и доводит его до менеджера.

Что реализовано:

  • Свой тип записи «Товары»: несколько объёмов у каждого товара, у объёма своя розничная и оптовая цена, наличие («В наличии», «Под заказ», «Нет в наличии»), метка на фото, галерея, полное описание (состав, применение, хранение), английская версия.
  • Корзина на устройстве покупателя: выезжающая панель, количество, сумма по строке и итог, оптовая цена включается сама при нужном количестве. Объём без наличия положить в корзину нельзя.
  • Две дороги к заказу: кнопка «Купить во ВКонтакте» у объёма со ссылкой на товар сообщества и «Оформить в ВК» из корзины, которая передаёт состав боту.
  • Панель «Сайт» в админке: обзор с готовностью к запуску, «Тексты и блоки» с живым предпросмотром, «Контакты и реквизиты» с проверкой ИНН и ОГРН, «SEO и счётчики», «Документы» с историей версий, «Цены и наличие» одной таблицей.
  • Светлая и тёмная тема по настройке устройства с ручным переключателем, RU/EN с определением языка по браузеру и переключателем в шапке.
  • Политика обработки персональных данных и уведомление о cookie по шаблонам, реквизиты подставляются автоматически; счётчики Яндекс.Метрики и Google Analytics грузятся только после согласия.
  • Защита: XML-RPC закрыт на входном nginx, форма входа ограничена по числу попыток, логин администратора не виден снаружи, комментарии выключены, ежедневный слепок базы и фото.

Как это устроено

WordPress: свой тип записи «Товары»

Стандартные записи WordPress для товаров с несколькими объёмами не годятся, поэтому в теме объявлен собственный тип записи. Объёмы, цены, опт и наличие хранятся у каждого товара отдельным набором полей и редактируются в карточке товара над описанием. Категории товаров получили свои страницы, у карточки есть блок похожих товаров и постраничная навигация в каталоге.

Корзина на localStorage

Корзина живёт в браузере покупателя, в хранилище localStorage, и не требует ни аккаунта, ни сессии на сервере. Это хранилище, которое браузер держит на устройстве между визитами. Скрипт корзины считает сумму, включает опт при достижении порога и не пускает в корзину объём без наличия.

Заказ через сообщения ВКонтакте

Положить товар в корзину ВКонтакте со стороннего сайта нельзя, это ограничение самой платформы. Поэтому кнопка «Купить во ВКонтакте» открывает оформление заказа в сообществе с нужным товаром, а корзина сайта отдаёт состав на свой API, получает одноразовый код и открывает чат сообщества со ссылкой, в которой этот код передан. Код живёт три часа. Для тех, кто уже переписывался с сообществом, ВКонтакте не передаёт параметр ссылки, поэтому код кладётся в буфер обмена и бот понимает его текстом. Если сайт не ответил за три секунды или бот выключен, корзина возвращается к копированию текста заказа.

Бот сообщества ВКонтакте на aiohttp

Бот написан на Python с aiohttp и работает через Long Poll, состояние диалогов хранит в SQLite. Каталог он читает с сайта: у сайта есть API, который отдаёт товары, объёмы, цены, оптовые пороги и наличие, с кэшем на минуту. Заказ по коду бот забирает у сайта один раз, состав сверяется с базой сайта, а не с тем, что прислал браузер. Опт, позиции не в наличии и незнакомые вопросы уходят менеджеру. У администратора есть команды версии и статистики, список сотрудников с ролями и фильтр спама.

Кастомная тема по брендбуку

Цвета и шрифты взяты из брендбука, файлы шрифтов лежат в теме, запросов к Google Fonts нет. Логотип в векторе в нескольких вариантах, растения с роллапа и узор из знака на первом экране. По просьбе заказчика поверх брендбука добавлен хвойный зелёный акцент для кнопок и плашек. Иконки сайта собраны из знака, включая варианты для телефона и manifest.json.

Админка на языке заказчика

Раздел «Сайт» открывается сразу после входа и показывает список готовности к запуску. В «Текстах и блоках» правится любая надпись главной, шапки, подвала, каталога, корзины и плашки cookie; текст меняется в предпросмотре во время набора, вид переключается между компьютером и телефоном, у каждого поля есть «Исходный текст». Английские тексты редактируются там же с метками «нет перевода» и «проверьте перевод». Инструкция для заказчика в Word собирается скриптом: он снимает экраны сайта и админки браузером, рисует сноски и собирает документ на 29 страниц с 17 скриншотами.

Результат

  • Сайт работает на боевом кириллическом домене с 21 сентября 2026 года, индексация открыта, домены с латиницей и опечаткой ведут на основной постоянным редиректом.
  • Заказчик меняет цены, наличие, фото и тексты сам; разработчик для этого не нужен.
  • Покупатель из рекламы попадает на лёгкий мобильный каталог и уходит в чат сообщества с готовым заказом.
  • Бот и сайт работают по одному каталогу: второго списка товаров и расхождений в ценах нет.
  • Сайт открывается в теме устройства посетителя и на его языке, русском или английском.
  • Ежедневный слепок базы и загруженных фото хранится две недели, HTTPS продлевается автоматически.

Технологии: что и зачем

  • WordPress с собственной темой — заказчик получает привычную админку и редактор, а тема не зависит от сторонних плагинов и конструкторов.
  • PHP 8.2 — язык темы: типы записей, панель «Сайт», API для бота, микроразметка.
  • MariaDB 10.11 — база данных WordPress: товары, тексты, настройки.
  • Чистые CSS и JS — витрина, обе темы оформления, корзина и галерея без фреймворков, поэтому страница лёгкая на телефоне.
  • Python и aiohttp — бот сообщества ВКонтакте: Long Poll, диалог кнопками, чтение каталога с сайта.
  • SQLite — состояние диалогов бота, без отдельного сервера базы.
  • Docker Compose — одинаковое окружение локально и на сервере, бот в отдельном контейнере.
  • Let's Encrypt — HTTPS с автоматическим продлением на сервере сайтов студии.

Статус

Сайт версии 0.9.9 от 22 сентября 2026 года, бот сообщества версии 1.2.1. Сайт открыт на домене дыханиеповолжья.рф, индексация включена, счётчик Яндекс.Метрики подключён с целью на нажатие «Оформить в ВК». Каталог пока заполнен двумя позициями и ждёт фото и цен от заказчика; региональная часть под Москву и Чувашию появится после условий доставки. Автотестов в проекте нет, приёмка идёт по критериям из документации.

Вопросы по проекту

Можно ли сделать сайт-магазин без онлайн-оплаты и доставки?
Да. Здесь оплаты на сайте нет намеренно: корзина собирает заказ, а сделка закрывается перепиской в сообществе ВКонтакте. Корзина передаёт состав боту сообщества по одноразовому коду, и покупатель попадает в чат с уже готовым заказом. Если сайт не ответил или бот выключен, работает запасной путь с копированием текста заказа.
Может ли заказчик сам менять цены, наличие и тексты без разработчика?
Да. Раздел «Товары → Цены и наличие» показывает все товары одной таблицей: цены, опт, наличие, порядок перетаскиванием, изменение всех цен на процент. Тексты и фото блоков правятся в «Текстах и блоках» с живым предпросмотром в видах компьютера и телефона. В админку встроена инструкция из 11 разделов, отдельно есть инструкция в Word на 29 страниц.
Как устроены оптовые цены на сайте?
У каждого объёма товара своя розничная и оптовая цена и свой порог опта. Оптовая цена включается в корзине сама, когда набрано нужное количество. Бот сообщества берёт те же пороги с сайта, поэтому второго списка товаров нет.
Зачем сайту бот сообщества ВКонтакте?
Бот ведёт покупателя по каталогу кнопками: товар, объём, количество, оформление. Цены и наличие он читает с сайта через его API, оптовые и отсутствующие позиции передаёт менеджеру, отвечает на частые вопросы. Так заказ из рекламы не теряется между сайтом и перепиской.
Как сайт устроен с точки зрения SEO?
У страниц и товаров свои заголовки и описания, микроразметка Schema.org в JSON-LD (Organization, WebSite, BreadcrumbList, Product с ценой и наличием, ItemList), хлебные крошки, карта сайта, robots.txt, латинские адреса вместо кириллических, hreflang и свой канонический адрес для английской версии. Аналитика грузится только после согласия на cookie.
Где размещён сайт и что с резервными копиями?
Сайт работает в Docker на сервере сайтов студии, HTTPS с автоматически продлеваемым сертификатом Let's Encrypt. Ежедневная копия базы и загруженных фото хранится две недели. XML-RPC закрыт, форма входа ограничена по числу попыток, логин администратора снаружи не виден.

Ещё по этому направлению

В разработке

BruDgital: платформа онлайн-курсов с защищённым видео и живыми эфирами

онлайн-школа по маркетингу: свой сайт, вход через ботов, оплата и эфиры вместо Zoom

В продакшенеNDA

Интернет-магазин рубашек на Nuxt 4 с админкой для владельца

магазин рубашек в Чебоксарах: владелец сам ведёт товары, цены и заказы

В продакшене · собственный продукт

UNLOCK: интерактивные открытки и адвент-календарь

собственный сервис студии: открытка по ссылке с паролем, управление из Telegram

Нужно похожее?

Расскажите о задаче — покажем, как решали такое, и прикинем объём работ.