Rise Studio
Web bán hàng làm client của POS, không tranh việc với nó.
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
Backend
- Express + MongoDB, Winston JSON logging
- BullMQ on Redis for order creation, sync and webhooks
- Sync log for every attempt, both directions
Commerce
- Products, cart, orders, vouchers, reviews
- RiseCash loyalty balance
- Homepage layout and nav menu as data
Growth
- Blog, social posting, video reels
- AI token management for content
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".