Премиум-мебель и интерьеры
Umporta
Публичный сайт umporta.com и закрытый инструмент консультанта для iPad работают на одной системе: каталог, визит клиента, лукбук и продажа, которую подтверждает администратор.

Дом Yılka и Orix в Узбекистане — и всё, что собирается вокруг них.
Umporta не продаёт мебель — она доводит комнату до целого. Диван приезжает из Стамбула, кресло из Бурсы, а двери, кухни, багеты и стены вокруг них делает собственная фабрика под Ташкентом — с 2006 года, из итальянской древесной массы, в один тон. Мы построили систему, которая несёт это обещание: публичный сайт бренда и закрытый инструмент консультанта для шоурума на Юнусабаде.
Продуктовая стратегия · UI/UX-дизайн · Full-stack разработка · Офлайн-инструмент для iPad
Продавать по-настоящему умел только основатель.
Так записано в брифе владельца. Задача звучала прямо — превратить его способ продавать в систему, чтобы бизнес перестал зависеть от одного человека.
Система рассчитана на то, что консультанты шоурума работают в ней с нескольких планшетов одновременно.
В интернете трудность та же: ценность Umporta не вещь, а готовая комната вокруг неё. Витрина с сеткой товаров, ценой и корзиной описала бы совсем другой бизнес, и куда меньший.
Мы выбрали комнату вместо товарной сетки и визит вместо корзины.
Мы построили сайт так, как работает сам шоурум. Сначала идея, затем дома, из которых он собран, затем комнаты вокруг одной выбранной вещи, и лишь потом приглашение зайти.
Построить навигацию вокруг готовых комнат, а не товарной сетки.
Сделать визит в шоурум и выезд дизайнера главными сценариями вместо корзины.
Сделать инструмент консультанта приложением для iPad, которое работает и без сети.
Отделить закрытые цены от публичного кода, чтобы они не могли попасть на сайт.
Это дизайн Umporta, собранный заново из её собственного кода.
Окно ниже — не картинка. Шрифты, цвета, скругления, разворот партнёра с сайта и выбор материала с бронзовым кольцом из инструмента консультанта пересобраны вживую по исходникам Umporta. Рядом — снимки публичного umporta.com для сравнения.
Yılka
Стамбульский дом мебели и интерьерной архитектуры с 1952 года: глубокая посадка, набивка вручную, благородный лён, бархат и мрамор — целые интерьерные сцены, а не отдельные предметы.
Реализованные виллы и резиденции в Дубае, Катаре, Саудовской Аравии и Центральной Азии. В Узбекистане — эксклюзивно в UMPORTA.
Это не снимок экрана, а живой HTML и CSS по исходникам Umporta. Выберите материал — бронзовое кольцо обведёт его так же, как в инструменте консультанта.
- Шрифты
- Italiana · 400
- Cormorant Garamond · 300–700
- Manrope · variable
- Цвета
- --paper #f6f0e4
- --ivory #fbf8f1
- --cream #efe7d6
- --ink #1c1813
- --walnut #3d2f22
- --bronze #8b6f47
- --burgundy #5e2a26
- --mute #968874
- --ink-body rgba(28, 24, 19, 0.74)
- --line rgba(28, 24, 19, 0.14)
- Скругления
- 3px · .nav .cta
- 50% · .sw
- Анимация
- cubic-bezier(0.22, 0.61, 0.36, 1)--ease-signature
- 700 msdrawRing()
- Источник
- app/globals.css
- lib/fonts.ts
- app/[locale]/(public)/web.css
- app/consultant/consultant.css
- lib/consultant-card.ts (DEFAULT_SWATCHES)
- components/consultant/ProductScreen.tsx
- lib/brands.ts


Мы закрыли места, где продажа могла бы тихо сломаться.
Один продукт работает в двух противоположных средах: как публичный сайт бренда и как закрытая офлайн-система консультанта в шоуруме.
- Где работает
- Публичный сайт и закрытая iPad PWA консультанта
- На чём построено
- Next.js, строгий TypeScript, Supabase и единая проверяемая модель каталога
- Если пропала сеть
- Собственный service worker, локальный визит и очередь с повторной отправкой
Шоурум продолжает работать без сети
Каталог хранится на устройстве, активный визит переживает перезагрузку, а исходящие действия ждут локально до восстановления связи.
Каждой продажей управляет сервер
Сервер заново считает итог, администратор подтверждает заказ, остатки следуют за подтверждённым статусом, а повторная отправка не создаёт вторую продажу.
Закрытые цены не попадают на сайт
Публичный код не импортирует закрытые цены. Консультант решает, попадут ли они в материал клиента, а сервер проверяет это решение повторно.
Каталог остаётся единым источником
Исходные данные доступны только для чтения. Идемпотентная синхронизация создаёт ресурсы приложения, переносит изображения и проверяет модель перед выпуском.
Заказ не плывёт за курсом
Каждая продажа хранит сумму в долларах и в сумах. Курс записывается в заказ, когда его оформляют. Сумма в сумах считается только по этому курсу — и при подтверждении, и при любой правке заказа. У каждого платежа свой записанный курс, и в доллары его переводят по этому курсу.
Завтрашний курс не меняет вчерашний заказ.
Курс сума из трёх источников
Система берёт официальный курс Центрального банка Узбекистана, при сбое — курс из бесплатного сервиса курсов валют, затем — курс, заданный в настройках системы. Ручной курс администратора важнее всех трёх. Курс вне коридора 8 000–25 000 сум за доллар отбрасывается как сбой.
Курс в 1 сум за доллар из сбойного сервиса до клиента не дойдёт.
Смена хранилища на ходу
Система уже работала в шоуруме, когда её данные пришлось перенести из файлов в базу данных. Новое хранилище сначала встроили выключенным — работа шоурума от этого не менялась. Перенос прогоняли на копии данных, и только потом старое хранилище отключили. Номера записей сохранили без единого изменения, чтобы каждая продажа осталась за своим консультантом.
Хранилище сменили, а каждая продажа осталась под своим номером.
Каталог из нечитаемых PDF
Каталог собирали из PDF поставщиков, где текст не читался, — страницы разбирали по изображению. При сборке в нём было 234 записи; у 144 название сверено с сайтами Orix и Yılka. Сомнительные записи отмечены и уходят на проверку. Первое правило — ничего не выдумывать. Пустое поле с отметкой лучше догадки.
Где источник молчит, в каталоге пустое поле с отметкой, а не догадка.
Новое поле не потеряется
Автоматическая проверка читает код и требует, чтобы каждое из 24 полей, добавленных к продаже одним обновлением базы, было названо во всех пяти местах — запись, обновление, чтение, выгрузка и проверка формата. Вторая проверка создаёт на время отдельную пустую базу, заполняет её записями в старом формате, применяет изменение и сверяет, что ничего не пропало.
Поле, добавленное к продаже, не пропадёт молча ни при записи, ни при выгрузке, а старые записи переживают перенос.
7 миграций базы данных · 10 таблиц · 34 страницы · 13 серверных маршрутов · 158 коммитов. Подсчитано нами по репозиторию 26.09.2026.
Пропала сеть в шоуруме — продажа всё равно не потеряется.
Для владельца это значит вот что. Если в шоуруме пропадёт интернет, визит не прервётся: каталог уже на планшете, а действия дождутся связи. Повторное нажатие не создаст вторую продажу — итог пересчитает сервер, а подтвердит администратор. Закрытые цены не попадут на публичный сайт, а завтрашний курс не перепишет вчерашний заказ.
Нужна такая же система для вашего бизнеса?
Опишите задачу в двух-трёх предложениях. Ответим в тот же рабочий день и предложим время для разговора.
Связаться с намиОбсудить задачу в Telegram
- Отвечаем в тот же рабочий день по ташкентскому времени.
- Пишите Нодирхону — он подключит того из нас, кто нужен вашей задаче.