CASE 09 · MOBILE · iOS
The store has been selling Korean, Japanese and Thai groceries since 2013: four locations in Moscow, around six thousand items in the catalogue and a website running on 1C-Bitrix. The app took over the repeat purchase — the reason a customer comes back every week. After launch, the store's turnover grew by 23%.
The website handled sales well enough; repeat purchases it did not. A regular customer walked the same path through the catalogue every time, couldn't recall what they bought last week, and never found out when a favourite item dropped in price. In a category where the basket is refilled weekly from the same twenty items, that is turnover left on the table.
A SwiftUI app built on the very same catalogue the website uses. A custom REST controller on the 1C-Bitrix side serves sections, products, prices and promotions, accepts orders and returns their history. The app recalculates nothing on its own — which is why it never disagrees with the website on price or availability.
A customer repeats last week's order in one tap, sees in favourites what got cheaper, and knows how much is left to the next discount tier. The return scenarios the website never had now sit on the first screen.
SCREENS
Sixteen screens: onboarding and city selection, the catalogue with filters and search, checkout, the customer account and a design system built in code.
INTEGRATION
A second source of truth is the most expensive mistake in retail: the price in the app drifts from the price on the site, a customer notices, and someone untangles it by hand. So the app keeps no catalogue of its own and recalculates no discounts: it queries the same system the website reads from, and an order placed in the app lands in the same admin panel as an order from the site.
The store had no public API, and from the outside this looked like a major rebuild: 1C-Bitrix behind QRATOR, no REST endpoints, no product feed. In practice it was cheap — the rest module was already installed and the main.engine controller worked and returned JSON. A custom controller in /local/ covered the catalogue, cart and orders: the website was left untouched, and the app got its data first-hand — with no intermediate database and no nightly sync that always lags behind prices.
WHAT'S INSIDE
The weekly basket in this category barely changes. Last week's order is repeated in full with one button, and if something is out of stock the app says so right away rather than at picking time.
Saved items surface what got cheaper: “6 items dropped in price — worth grabbing today”. A reason to open the app appears without a single email or push campaign.
The discount depends on how much you spent this month, and the profile shows what's left to the next tier. The same bar repeats in the cart — exactly where the decision to add one more item is made.
Recipes come from the store's own blog: twelve ingredients, six of them in stock — and one “add everything” button. The customer came for a pack of noodles and leaves with dinner: the most direct way to lift the average basket in groceries.
Typing “самян” in Cyrillic finds Samyang: search runs across both alphabets. Matching categories sit on top, so you can drop into a section instead of scrolling the results.
Country, spiciness, price range and brand re-query the live catalogue — the result counter changes with every toggle, and the button states upfront how many products it will show.
HOW IT'S BUILT
The app is built around a single scenario: the repeat purchase. Last week's order repeats with one button, favourites announce a price drop on their own, and the discount ladder shows what's left to the next tier — right in the cart, where the decision is made. Recipes work on the average basket: instead of one pack of noodles, a whole dish goes in. After the app launched, the store's turnover grew by 23%.
SEE ALSO
Balance, invoices, photo requests and guest passes issued by voice. Built with Flutter.
Offline mode for a full shift, maps and routes, real-time statuses. −31% time per stop.
Service pages with scope and pricing are available in Russian.
CONTACT
I'll design and build an app on top of your catalogue — same prices and same stock as the website, with no second database and no nightly syncs. Message me on Telegram — we'll scope the task, timeline and budget.
Message on Telegram dnovoselov@bk.ruI reply within 3 hours on weekdays
A project's budget and commercial terms belong to the client, and I don't publish them. Your project will be treated the same way. My own price ranges are in the Pricing section.