Case study · By Sandesh Rimal ·
Chynabazar: a Flutter and NestJS e-commerce platform
An online store with one NestJS backend behind a Flutter app for shoppers and a Next.js storefront. I led the Flutter mobile app, which I built on my own, and I built several of the backend modules.


- 500+
- downloads on Google Play
- 5–6 mo
- to deliver the platform
- 1
- backend for the app and storefront
- 7
- backend modules I built
- Role
- Led and built the Flutter mobile app; built NestJS backend modules
- Team
- A small team
- Author
- Sandesh Rimal, Flutter developer and backend engineer in Kathmandu, Nepal
- Stack
- Flutter, Bloc, NestJS, TypeScript, Next.js
01 — Overview
What Chynabazar is
Chynabazar is an online store for home, kitchen, electronics and lifestyle products. One NestJS backend serves a Flutter app for shoppers and a Next.js storefront.
The platform covers shopping, payments, notifications, SKU and inventory management, and integration with the business's ERP system.
Shopper app
Flutter · Bloc
Web storefront
Next.js
NestJS backend
The platform
- Shopping
- Payments
- SKU and inventory
- ERP integration
Modules I built
- Promotions
- B2B and Retail Store
- Quarantine management
- CMS
- Activity logs
- Email and SMS services
- Notifications
02 — My role
Two parts, one small team
Mobile
The Flutter mobile app
I led the Flutter mobile app and built it on my own, using Bloc for state.
Backend
NestJS backend modules
I built 7 of the backend modules, listed below. The team delivered the project in about 5 to 6 months.
03 — Modules
Backend modules I built
01
Promotions
Lets the team create discounts with rules, and keeps track of which promotions have been used and which are still available.
02
B2B and Retail Store
Supports business customers and a retail store channel alongside regular online shopping.
03
Quarantine management
Holds stock aside, such as returned items, so it is not sold again until it has been reviewed.
04
CMS
Lets the team control the layout of the homepage, including re-ordering its sections. I refined this module.
05
Activity logs
Keeps a record of actions taken in the system, so changes can be traced.
06
Email and SMS services
Sends emails and text messages to customers.
07
Notifications
Sends push notifications to shoppers' phones.
04 — Challenges
Engineering challenges
01 · The challenge
Order items that are locked, returned or in quarantine
Stock has to stay correct while items move between states: an item can be locked for an order, returned, or set aside in quarantine. Each state changes what can be sold and what can be moved, which made the rules harder than a simple stock count.
What I did
I kept separate stock counts for each state, so only available stock can be sold, and I recorded every move between states in the activity logs so it can be traced.
02 · The challenge
Re-ordering the homepage layout dynamically
The homepage is built from sections the team can re-order, so its layout is not fixed in code and has to follow whatever order the team sets.
What I did
I stored the order of the homepage sections as data and gave each section a type. The homepage is rendered from that saved list, so re-ordering it is a data change, not a code change.
03 · The challenge
Tracking promotions and their rules
Every promotion has rules, and each one has to be tracked as used or unused. Getting the rules right and keeping the counts honest takes care.
What I did
I stored each promotion's rules as structured data, counted every use, and checked the rules again when the order is placed.
04 · The challenge
Payment failures and timeouts
A payment can fail or time out in the middle of an order, and the shopper still needs a clear result and a correct order state.
What I did
I verified the real payment result with the provider instead of trusting a timeout, and showed the shopper a clear result.
05 — Screens
The shopper experience



06 — Outcome
Outcome: 500+ downloads on Google Play
500+
downloads on Google Play, and still going
The team delivered the whole platform in about 5 to 6 months.
Google Play ↗07 — Lessons
What I would do differently
01
Design the inventory states earlier. Settling the rules for locked, returned and quarantined items at the start would have been easier than adding them as the project grew.
02
Write tests for promotion rules sooner. Promotion rules have many edge cases, and automated tests from the start would catch more of them.
08 — FAQ
Questions about this project
What is Chynabazar?
Chynabazar is an online store for home, kitchen, electronics and lifestyle products. A Flutter shopper app and a Next.js storefront are both served by one NestJS backend.
What was your role on Chynabazar?
I led the Flutter mobile app, which I built on my own, and I built NestJS backend modules for promotions, B2B and retail store, quarantine management, the CMS, activity logs, email and SMS services, and notifications.
How long did the project take?
The team delivered the project in about 5 to 6 months.
Which technologies were used?
Flutter with Bloc for the mobile app, NestJS and TypeScript for the backend, and Next.js for the web storefront.
Where can I see the app?
The mobile app is on Google Play, with 500+ downloads.
Need an app and the server behind it?
I build Flutter apps and NestJS backends from first screen to production. Read more about mobile app development in Nepal.