trong.
Full-stack2026

Rise Studio

A web store that is a client of the POS, not a competitor to it.

rise-studio.ts
export const project = {
  type: "fullstack",
  stack: [
    "Express",
    "MongoDB",
    "Redis",
    "BullMQ",
    "Next.js",
    "Zalo Mini App",
    "Pancake POS API",
    "AWS S3",
    "Winston",
  ],
  shipped: true,
};
Year
2026
Client
Rise Studio
Role
Lead engineer
Duration
3 months

Architecture

01

02

03

Highlight 01
2-way
Highlight 02
26
Highlight 03
3

Technical notes

The brief

Rise Studio sells online, but the people running the business live in Pancake POS. Any storefront that made them work somewhere else would simply not be used. So the web store had to be a client of the POS, not a competitor to it.

The approach

An Express + MongoDB backend that syncs both ways with Pancake. An order placed on the web goes out through the Pancake API and appears in the POS the staff already have open; anything they change there comes back by webhook and updates the site.

BullMQ on Redis carries all of it — order creation, sync, webhook processing — with retries and backoff, because a sale should not fail because an upstream API was briefly unhappy. Around the commerce core sits the rest of a real store: blog, homepage layout, vouchers, reviews, a RiseCash loyalty balance, social posting and video reels.

The harder parts

Deciding who wins. Two systems editing one order will disagree eventually, so each field has an owner — the POS owns fulfilment state, the site owns the cart and the customer — and sync never writes across that line. Every sync attempt is logged, because the first question when a number looks wrong is always "which side changed it, and when".