Rise Studio
A web store that is a client of the POS, not a competitor to it.
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
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".