← All Projects

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.

Rayson home screen with the brand film, a New arrivals ticker and the product feed
Product page for a beige Filippo knit polo with colour chips, sizes and an Add to cart button
  • 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.

Rayson home screen with the brand film, a New arrivals ticker and the product feed
Home
Product catalogue showing 386 products as a typographic list of categories
Catalogue
Product page for a white CP Company polo with three colour chips and one size
Product

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.
Feed cards with a row of colour dots on each product photo
Feed
Product page for a beige Filippo knit polo with colour chips, sizes and an Add to cart button
Beige
The same product page after switching to teal: new photo, colour label and size order
Teal

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.

Brand index for the sneakers category, from Adidas to Reebok
Brands
Footwear listing with 97 products and 123 colour variants in a two-column grid
Listing
Filter sheet with brand, colour, size and sort-by fields
Filter

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.
  1. 1C in two cities

    Makhachkala and Stavropol push catalogue and stock changes over CommerceML webhooks.

  2. Raw stock

    Each city's stock is stored as its own documents, so the admin can filter by warehouse.

  3. Product cards

    Items are merged by garment and split into colour variants with their own photos and prices.

  4. Validity rules

    Sizes, price and gallery are checked. A card that fails stays hidden, with the reason shown.

  5. 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
Product feed with sandals and polos on neutral studio backgrounds
Feed
Empty cart screen with a black-and-white line illustration and a Start shopping button
Empty cart

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.