Skip to content
सन्देशSandesh Rimal
← All work

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.

Chynabazar web storefront
Chynabazar web storefront on desktop, showing the search bar, category menu and promotional banner
Chynabazar shopper app home screen on a phone
The Chynabazar web storefront and shopper app
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

Chynabazar shopper app home screen on a phone
Shopper app: home
Chynabazar shopper app checkout screen on a phone
Shopper app: checkout
Chynabazar web storefront shown on a phone, with a banner, categories and product list
Web storefront on mobile

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

  1. 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.

  2. 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.

Tell me about your project →