Premium furniture & interiors

Umporta

The public site umporta.com and a private iPad tool for showroom consultants run on one system: the catalogue, the client visit, the lookbook, and a sale that an administrator confirms.

Reach usOpen site · umporta.com

Umporta: umporta.com

The home of Yılka and Orix in Uzbekistan, with everything built around them.

Umporta does not sell furniture; it finishes rooms. A sofa arrives from Istanbul, an armchair from Bursa, and the doors, kitchens, mouldings and walls around them are made at Umporta’s own factory outside Tashkent, since 2006, from an Italian wood-based material, all in one tone. We built the system that carries that promise: the public brand site and a private tool for the consultants in the Yunusabad showroom.

Product strategy · UI/UX design · Full-stack engineering · Offline iPad tool

Only the founder could really sell.

That is how the owner’s brief put it. The task was stated plainly: turn his way of selling into a system, so the business stops depending on one person.

The system is built for showroom consultants working in it from several tablets at once.

Online the difficulty is the same: Umporta’s value is not an item but the finished room around it. A storefront with a product grid, a price and a cart would have described a different business, and a smaller one.

We chose the room over the product grid, and the visit over the cart.

We built the site the way the showroom actually works. The idea comes first, then the houses it is built from, then rooms assembled around one chosen piece, and only then an invitation to come in.

  1. 01

    Structure discovery around finished rooms, not a conventional product grid.

  2. 02

    Make showroom visits and measurement calls the primary paths instead of forcing a cart.

  3. 03

    Build the consultant tool as an iPad app that keeps working without a network.

  4. 04

    Keep private prices out of public code, so they cannot reach the site.

This is Umporta’s design, rebuilt from its own code.

The window below is not a picture. The fonts, colours, radii, a partner spread from the public site and the consultant tool’s material picker with its bronze ring are rebuilt live from Umporta’s source. Beside it are screenshots of the public umporta.com to compare against.

Партнёр · Стамбул

Yılka

основана в 1952 · Стамбул, Türkiye

Стамбульский дом мебели и интерьерной архитектуры с 1952 года: глубокая посадка, набивка вручную, благородный лён, бархат и мрамор — целые интерьерные сцены, а не отдельные предметы.

Реализованные виллы и резиденции в Дубае, Катаре, Саудовской Аравии и Центральной Азии. В Узбекистане — эксклюзивно в UMPORTA.

Материалы

This is not a screenshot: it is live HTML and CSS rebuilt from Umporta’s source. Pick a material, and the bronze ring traces it as it does in the consultant tool.

Fonts
Italiana · 400
Cormorant Garamond · 300–700
Manrope · variable
Colours
  • --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)
Radius
3px · .nav .cta
50% · .sw
Motion
cubic-bezier(0.22, 0.61, 0.36, 1)--ease-signature
700 msdrawRing()
Source
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
The umporta.com home page on a laptop: an armchair in the showroom under the headline «Дом, который завершает атмосферу — до целого».The Yılka partner spread on umporta.com on a phone.
Screenshots of the public site umporta.com, taken 26 September 2026. No login, no prices.

We closed the places where a sale could quietly break.

One product serves two opposite environments: a public brand site and a private, offline-first showroom system for consultants.

Surfaces
Public website and private consultant iPad PWA
Core
Next.js, strict TypeScript, Supabase and one validated catalogue model
Resilience
Custom service worker, local visit state and a reconnecting outbox
  • The showroom keeps working offline

    The catalogue is cached, an active client visit survives a reload, and outgoing actions wait locally until the connection returns.

  • The server owns every sale

    The server recalculates totals, an administrator confirms the order, stock follows the confirmed state, and repeated submissions cannot create a second sale.

  • Prices cross an explicit firewall

    Public code does not import private pricing. A consultant controls whether a client artefact includes prices, and the server validates that choice again.

  • Catalogue data stays canonical

    The source catalogue remains read-only. Idempotent sync steps create application assets, mirror imagery and validate the resulting model before it ships.

  1. 01

    An order does not drift with the exchange rate

    Every sale stores its amount in dollars and in sum. The rate is written into the order when it is drawn up. The total in soʻm (UZS) is computed from that rate alone, at confirmation and at every later change to the order. Each payment carries its own recorded rate and is converted to dollars at that rate.

    Tomorrow’s rate cannot change yesterday’s order.

  2. 02

    The soʻm rate comes from three sources

    The system takes the official rate of the Central Bank of Uzbekistan; if that fails, a free exchange-rate service; after that, the rate set in the system’s settings. An administrator’s manual rate outranks all three. A rate outside 8,000–25,000 sum per dollar is discarded as a fault.

    A rate of 1 sum to the dollar from a failing service never reaches a client.

  3. 03

    The storage changed while the showroom kept working

    The new database was installed alongside the old files but kept switched off, so the showroom’s work did not change.

    The storage changed; every sale kept its number.

  4. 04

    A catalogue from unreadable PDFs

    The catalogue was assembled from supplier PDFs whose text could not be read, so the pages were parsed from the image. When it was assembled it held 234 records; 144 had their names checked against the Orix and Yılka websites. Doubtful records are marked and go for review. The first rule is to invent nothing. An empty, marked field is better than a guess.

    Where the source is silent, the catalogue shows a marked empty field, not a guess.

  5. 05

    A new field cannot go missing

    An automated check reads the code and requires each of the 24 fields that one database update added to a sale to be named in all five places: write, update, read, export and format validation. A second check creates a separate empty database for the run, fills it with records in the old format, applies the change and confirms nothing was lost.

    A field added to a sale cannot vanish silently on write or export, and old records survive the move.

7 database migrations · 10 tables · 34 pages · 13 server routes · 158 commits. Counted by us from the repository on 26 September 2026.

If the showroom loses its connection, the sale is still not lost.

If the showroom loses the internet, the visit carries on: the catalogue is already on the tablet and actions wait for the network. A second tap cannot create a second sale; the server recalculates the total and an administrator confirms it. Private prices cannot reach the public site, and tomorrow’s exchange rate cannot rewrite yesterday’s order.

Want a system like this for your business?

Describe the problem in two or three sentences. We reply the same working day and suggest a time to talk.

Reach usDiscuss your project on Telegram

  • We reply the same working day, Tashkent time.
  • You write to Nodirkhon; he brings in whichever of us your problem needs.