trong.
Full-stack2026

Rise Studio

Web bán hàng làm client của POS, không tranh việc với nó.

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,
};
Năm
2026
Khách hàng
Rise Studio
Vai trò
Lead engineer
Thời gian
3 tháng

Kiến trúc

01

Backend

  • Express + MongoDB, Winston JSON logging
  • BullMQ on Redis for order creation, sync and webhooks
  • Sync log for every attempt, both directions
02

Commerce

  • Products, cart, orders, vouchers, reviews
  • RiseCash loyalty balance
  • Homepage layout and nav menu as data
03

Growth

  • Blog, social posting, video reels
  • AI token management for content
Điểm nhấn 01
2-way
POS sync with retry and backoff
Điểm nhấn 02
26
route groups beyond the commerce core
Điểm nhấn 03
3
clients: web, admin, Mini App

Ghi chú kỹ thuật

Đề bài

Rise Studio bán hàng online, nhưng người vận hành thì sống trong Pancake POS. Một mặt tiền web bắt họ phải làm việc ở chỗ khác thì đơn giản là sẽ không được dùng. Nên web bán hàng phải là client của POS, chứ không phải đối thủ của nó.

Cách làm

Một backend Express + MongoDB đồng bộ hai chiều với Pancake. Đơn đặt trên web đi ra qua Pancake API và hiện lên trong POS mà nhân viên vốn đang mở sẵn; họ đổi gì ở đó thì webhook mang về và cập nhật lại trang.

BullMQ trên Redis gánh toàn bộ phần đó — tạo đơn, đồng bộ, xử lý webhook — có retry và backoff, bởi một đơn hàng không nên hỏng chỉ vì API phía trên vừa dỗi một lúc. Quanh phần lõi bán hàng là những thứ một cửa hàng thật cần: blog, bố cục trang chủ, voucher, đánh giá, số dư tích điểm RiseCash, đăng bài mạng xã hội và video ngắn.

Chỗ khó

Quyết định ai thắng. Hai hệ thống cùng sửa một đơn thì sớm muộn cũng bất đồng, nên mỗi trường có một chủ sở hữu — POS giữ trạng thái giao hàng, web giữ giỏ hàng và khách — và đồng bộ không bao giờ ghi chéo qua ranh giới đó. Mọi lần đồng bộ đều được ghi log, vì câu hỏi đầu tiên khi một con số trông sai bao giờ cũng là "bên nào đổi nó, và lúc nào".