← All Projects

Rayson Fashion Store

A cross-platform fashion retail app whose catalogue, stock and orders stay in step with two physical 1C warehouses in real time.

IndustryFashion Retail
Product TypeE-commerce App
PlatformiOS & Android
BackendNestJS on Firestore
ResultTwo stores selling from one live catalogue
Rayson Fashion Store project hero image

The impact:

2
Warehouses synced live
2
Platforms from one codebase
0
Catalogue entry by hand
100%
API documentation

What this product is.

Rayson is a fashion retailer with physical stores in two cities, each running its own 1C inventory system. The app gives customers a single storefront — catalogue, favourites, cart, checkout, order history — over stock that is genuinely live in both warehouses.

PROJECT FACTS
IndustryFashion Retail
Product TypeE-commerce App
PlatformiOS & Android
BackendNestJS on Firestore
ResultTwo stores selling from one live catalogue

What needed solving.

The same physical garment exists twice in 1C, once per city, with independent stock levels. Presenting that as one browsable catalogue without either overselling or hiding available items is the entire problem. On top of that, 1C exports are dirty: products arrive with no sizes, broken prices or missing photography, and any one of those makes a product card unsellable.

How we approached it.

A NestJS backend ingests CommerceML webhooks from both 1C instances into a raw stock collection, then aggregates them into customer-facing product cards with per-colour variants. Every product is scored against explicit validity rules — sizes, price, gallery — and a “catalogVisible” flag is written by a Cloud Function so the storefront can page and count the catalogue without scanning it. Merchandisers work in a FireCMS admin that shows, per product, exactly which rule is keeping an item out of the catalogue.

What's inside?

Live two-warehouse catalogue

CommerceML webhooks from both 1C instances feed one storefront, with per-city stock kept as independent documents and filterable in admin.

Validity scoring merchandisers can read

Each product card shows the precise reason it is excluded — empty sizes, bad price, missing gallery — instead of silently disappearing.

Per-colour product variants

Photography and pricing are edited per colour variant, and the storefront automatically promotes the variant that is actually in stock.

Full shopping flow

Catalogue browsing, product detail, favourites, cart, profile and order history, built as a native app for iOS and Android from one TypeScript codebase.

Delivery and notifications

Russian Post integration for shipping, Mailgun for transactional email, and push notifications on order status changes.

Documented, guarded API

Every endpoint is published through Swagger behind a global Firebase JWT guard, with public catalogue routes explicitly opted out.

Tools change. Standards don’t.

We choose the stack around the product — not the other way around.

  • React Native 0.73
  • TypeScript
  • MobX
  • NestJS
  • Firestore
  • Firebase Auth
  • Cloud Functions
  • CommerceML / 1C
  • Firebase Storage
  • Mailgun
  • Russian Post API
  • FireCMS
  • Swagger / OpenAPI

React Native 0.73, TypeScript, MobX, NestJS, Firestore, Firebase Auth, Cloud Functions, CommerceML / 1C, Firebase Storage, Mailgun, Russian Post API, FireCMS, Swagger / OpenAPI

What we handled.

We worked on the product development and implementation, focusing on building a polished, functional and user-friendly experience aligned with the goals of the product.

Mobile application architecture
Backend and API design
1C / CommerceML integration
Catalogue aggregation and validation
Admin tooling for merchandisers