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
Калькулятор вместо корзины
Корзина и онлайн-оплата были бы не сложны технически, но они противоречили самому товару: цена кухни на заказ неизвестна до замера. Корзина пообещала бы посетителю фиксированную сумму, которую производство не сможет удержать. Вместо этого каталог задаёт ожидания, калькулятор даёт диапазон бюджета, а разговор продолжается в WhatsApp — сайт ни на одном этапе не даёт обещания, которое не сможет сдержать.
Каждая комната считается в своей единице
В мебельном деле кухню считают по погонному метру, гардеробную и ТВ-стенку — по площади фасадов, а кровать — как готовую модель. Прогнать всё через одну формулу было бы проще, но результат сразу показался бы неверным тому, кто знает рынок. Поэтому калькулятор переключает базу расчёта под выбранный тип комнаты — цифра получается по логике самой отрасли.
Результат — диапазон, а не точная сумма
Калькулятор возвращает диапазон, а не одну сумму, и прямо пишет, что это приблизительно и что точная цена определяется только после замера мастером на месте. Это не потеря посетителя, а наоборот: когда ожидание задано верно, разговор после замера не начинается со слов «вы говорили 2000».
Три языка на одном дереве маршрутов
Язык — это параметр запроса `?lang=`, а не отдельный сегмент маршрута вроде /az или /en. Это даёт три языка без тройного дублирования всего дерева маршрутов. Чтобы это не стало реальным компромиссом, главное условие выполнено: у каждого языка есть свой адрес, и эти адреса указаны и в sitemap, и в hreflang (AZ — как x-default), то есть для поисковой системы три версии — разные страницы, а не дублированный контент.
Каждый товар — узел Product с ценой
Модели в каталоге описаны не только текстом: каждая объявлена как отдельный объект Product и Offer со своим описанием, категорией и ценой, а категории связаны как OfferCatalog. В результате на вопрос вроде «сколько стоит акриловая кухня в Баку» поисковые и AI-системы читают страницу как список товаров с ценами, а не как рекламный текст.
Контент живёт в админ-панели, а не в коде
Чтобы добавить модель, заменить фото или поменять цену, не нужно править код и делать деплой — товары управляются из собственной админ-панели сайта, закрытой входом по почте и паролю. В мебельном каталоге, где цены меняются с сезоном и материалом, именно это держит проект живым после сдачи.
Серверный режим на собственном 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