Rayson Fashion Store
A shopping app for a premium menswear store in Makhachkala and Stavropol. The storefront stays quiet; underneath, one catalogue keeps itself in step with two 1C warehouses.


2
1C warehouses behind one catalogue
380+
products live in the app
2
delivery carriers: CDEK and Russian Post
0
products entered by hand
- Client
- Rayson Outlet, menswear retail
- Stores
- Makhachkala and Stavropol
- Platforms
- iOS on the App Store, Android from the same code
- Our part
- Design, app, backend, 1C integration
- Timeline
- Since 2024, in production
The brief.
Context
Rayson sells premium menswear from stores in Makhachkala and Stavropol, and each store keeps its stock in its own 1C. The owners wanted an app that feels like the shop floor, quiet and led by photography, and that sells whatever is actually on the shelves in either city.
Challenge
The same garment exists twice in 1C, once per city, each with its own stock. Showing it as one product without overselling or hiding what is available was the core problem. 1C exports are also messy: a product can arrive without sizes, with a broken price or with no photos, and any one of those makes it unsellable.
Approach
We designed and built the app, the backend and the 1C integration as one system. The backend merges both warehouses into one catalogue and decides which products are ready to sell, and the admin tells merchandisers why an item is held back. The app keeps out of the way: black, white and the product photography.
Discover, browse, choose.
The home screen opens on the brand film and a running New arrivals line, then a two-column feed. The catalogue is a plain typographic list, and product pages lead with large photography while keeping price, colour and size on one screen.



Every colour, one product card.
In 1C each colour of a garment is a separate item. The app groups them into one card: dots in the feed show which colours exist, and on the product page a chip swaps the photo, the colour name and the sizes in place.
- Photography and price are edited per colour in the admin.
- The feed leads with the colour that is actually in stock.



380+ products, three ways in.
Shoppers can go by category, jump straight to a brand or search by name. Listings show how many products and colour variants sit behind a category, and a filter sheet handles brand, colour, size and sort order. Search runs on Typesense.



Two warehouses, one catalogue.
Each store's 1C sends CommerceML updates to a NestJS backend. Stock is kept per city, merged into product cards and checked before anything reaches the app, so a half-filled product never lands on a shopper's screen.
- Merchandisers work in a FireCMS admin that names the rule keeping a product out of the catalogue.
- Every endpoint is documented in Swagger behind a Firebase JWT guard; public catalogue routes are opted out explicitly.
1C in two cities
Makhachkala and Stavropol push catalogue and stock changes over CommerceML webhooks.
Raw stock
Each city's stock is stored as its own documents, so the admin can filter by warehouse.
Product cards
Items are merged by garment and split into colour variants with their own photos and prices.
Validity rules
Sizes, price and gallery are checked. A card that fails stays hidden, with the reason shown.
Storefront
A Cloud Function writes a visibility flag, so the app pages and counts the catalogue without scanning it.
Monochrome, square, quiet.
We kept the interface out of the photography's way: black and white, square corners and SF Pro throughout. Colour comes only from the clothes. Empty states are drawn in the same black line style, so even a guest with an empty cart stays inside the brand.
- Ink
- Text
- Outline
- Divider
- Surface


What we built.
Our part
- Product design and interface
- iOS and Android app in React Native
- NestJS backend and REST API
- 1C integration over CommerceML
- Catalogue merging and validity rules
- FireCMS admin for merchandisers
- Payments, delivery and push notifications
Stack
- App
- React Native 0.73
- TypeScript
- MobX
- React Navigation
- Typesense
- Backend
- NestJS
- Firestore
- Cloud Functions
- Firebase Auth
- Swagger / OpenAPI
- Integrations
- 1C (CommerceML)
- YooKassa and SberPay
- CDEK
- Russian Post
- Yandex Maps
- Mailgun
- Operations
- FireCMS
- Remote Config
- Crashlytics
- Cloud Messaging
Selling through 1C?
Let's put it in an app.
We connect storefronts to the systems a business already runs on. Tell us what yours is.



