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.
The impact:
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.
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?
CommerceML webhooks from both 1C instances feed one storefront, with per-city stock kept as independent documents and filterable in admin.
Each product card shows the precise reason it is excluded — empty sizes, bad price, missing gallery — instead of silently disappearing.
Photography and pricing are edited per colour variant, and the storefront automatically promotes the variant that is actually in stock.
Catalogue browsing, product detail, favourites, cart, profile and order history, built as a native app for iOS and Android from one TypeScript codebase.
Russian Post integration for shipping, Mailgun for transactional email, and push notifications on order status changes.
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.
