BakuMebel — каталог мебели на заказ

Трёхязычный сайт-каталог для BakuMebel, которая делает кухни, гардеробные и мебель для гостиной на заказ в Баку. Построен на Next.js и работает на VPS; ожидание по цене задаёт пятишаговый калькулятор, а заявка уходит в WhatsApp с готовым сообщением.

Открыть сайт
Обзор
Клиент
BakuMebel — мебель на заказ в Баку: кухни, гардеробные, гостиные, спальни, офисы и детские комнаты
Роль
Frontend- и backend-разработка, структура каталога, логика ценового калькулятора, админ-панель, структурированные данные (schema.org) и деплой на VPS.
Стек
Next.js · TypeScript · Tailwind CSS
Дата
сентябрь 2026
Языки
3 — AZ / EN / RU
Страницы
17 × 3
Задача

У мебели на заказ нет фиксированной цены: одна и та же кухня может стоить вдвое дороже в зависимости от размеров, материала и фурнитуры. Это загоняет сайт в угол: не напишешь цену — посетитель решит, что дорого, и уйдёт; напишешь точную — не сможешь её защитить после замера. Сайт должен был говорить о цене, не молча и не обещая того, чего не сможет выполнить.

Что входит в сайт
  • Три языка — AZ, EN, RU; каждая страница на каждом языке — отдельный адрес в sitemap
  • Шесть категорий: кухня, гостиная, спальня, гардеробные, офис и детская
  • Пять основных страниц — главная, каталог, калькулятор, о нас, контакты — плюс страницы категорий и товаров
  • Страница товара: галерея изображений, значок категории, цена, техническое описание и похожие модели
  • Пятишаговый калькулятор цены: комната, размер, материал, фурнитура, дополнения
  • Калькулятор считает каждый тип комнаты в своёй единице — кухня по погонному метру, гардеробная и ТВ-стенка по площади фасадов, кровать как готовая модель
  • На главной — герой-блок из трёх слайдов, блоки преимуществ, выборка из каталога и предложение недели
  • Защищённая админ-панель с входом по почте и паролю, где управляются товары
  • Каждая кнопка открывает WhatsApp с готовым сообщением по этому товару
  • Структурированные данные: Organization, Product, Offer, OfferCatalog, ItemList и BreadcrumbList
Технические решения
01

Калькулятор вместо корзины

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

02

Каждая комната считается в своей единице

В мебельном деле кухню считают по погонному метру, гардеробную и ТВ-стенку — по площади фасадов, а кровать — как готовую модель. Прогнать всё через одну формулу было бы проще, но результат сразу показался бы неверным тому, кто знает рынок. Поэтому калькулятор переключает базу расчёта под выбранный тип комнаты — цифра получается по логике самой отрасли.

03

Результат — диапазон, а не точная сумма

Калькулятор возвращает диапазон, а не одну сумму, и прямо пишет, что это приблизительно и что точная цена определяется только после замера мастером на месте. Это не потеря посетителя, а наоборот: когда ожидание задано верно, разговор после замера не начинается со слов «вы говорили 2000».

04

Три языка на одном дереве маршрутов

Язык — это параметр запроса `?lang=`, а не отдельный сегмент маршрута вроде /az или /en. Это даёт три языка без тройного дублирования всего дерева маршрутов. Чтобы это не стало реальным компромиссом, главное условие выполнено: у каждого языка есть свой адрес, и эти адреса указаны и в sitemap, и в hreflang (AZ — как x-default), то есть для поисковой системы три версии — разные страницы, а не дублированный контент.

05

Каждый товар — узел Product с ценой

Модели в каталоге описаны не только текстом: каждая объявлена как отдельный объект Product и Offer со своим описанием, категорией и ценой, а категории связаны как OfferCatalog. В результате на вопрос вроде «сколько стоит акриловая кухня в Баку» поисковые и AI-системы читают страницу как список товаров с ценами, а не как рекламный текст.

06

Контент живёт в админ-панели, а не в коде

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

07

Серверный режим на собственном VPS

Сайт работает не на шаред-хостинге, а на собственном VPS под Ubuntu, как Next.js-сервер за nginx. Причина — админ-панель: статически экспортированный сайт не смог бы держать ни защищённый маршрут, ни запись на стороне сервера. Один процесс несёт и витрину, и панель — отдельного backend-приложения нет.

Результат

Сайт работает по адресу bakumebel.az. Каждый из трёх языков имеет собственный адрес и в sitemap, и в объявлении hreflang — поисковые системы могут индексировать три версии по отдельности. Каталог разделён на шесть категорий, а каждая модель публикуется не как текст, а как отдельный узел Product со своей ценой.

Вопросы по этому проекту
Почему на сайте нет корзины и онлайн-оплаты?
Это осознанное решение. Цена мебели на заказ не определена до замера, поэтому корзина обещала бы сумму, которую производство не сможет удержать. Вместо этого калькулятор показывает диапазон бюджета, а заявка уходит в WhatsApp с готовым сообщением.
Цена из калькулятора точная?
Нет, и сайт пишет об этом прямо. Калькулятор даёт приблизительный диапазон по выбранной комнате, размеру, материалу и фурнитуре. Точная цена определяется только после замера мастером на месте.
Нужен ли разработчик, чтобы добавить товар?
Нет. Товары, изображения и цены управляются из собственной админ-панели сайта — правка кода и повторный деплой не требуются.
На скольких языках работает сайт?
На трёх: азербайджанском, английском и русском. У каждой страницы есть свой адрес на каждом языке, и эти адреса указаны и в sitemap, и в объявлении hreflang.
На чём построен сайт?
Next.js, TypeScript и Tailwind CSS. Сайт работает как Next.js-сервер на собственном VPS под Ubuntu за nginx; админ-панель — не отдельное приложение, а часть того же Next.js-проекта.

Расскажите о проекте — обычно отвечаю в тот же день.

Nurlan Qadirov — Baku, Azerbaijan