Teika
Đại lý đặt hàng trong Zalo Mini App, giá theo hạng.
export const project = {
type: "fullstack",
stack: [
"React",
"zmp-ui",
"jotai",
"Vite",
"Tailwind CSS",
"Express",
"MongoDB",
"pnpm + Turborepo",
"Zalo Mini App SDK",
"Zalo OA",
],
shipped: true,
};- Năm
- 2026
- Khách hàng
- Teika
- Vai trò
- Làm một mình
- Thời gian
- 2 tháng
Kiến trúc
Mini App
- React + zmp-ui + jotai
- Đăng nhập Zalo không mật khẩu
- Giá không bao giờ rời server ở dạng chưa tính
Backend
- 16 module: đơn hàng, thanh toán, công nợ, sản phẩm, tra cứu thuế
- Express + MongoDB
- Tích hợp Zalo OA và Mini App
Quản trị
- React + Vite + Tailwind cho đội nội bộ
- Danh mục, hạng đại lý, công nợ và cấu hình
Ghi chú kỹ thuật
Đề bài
Teika bán ngũ kim và vật liệu xây dựng cho các đại lý đặt lại đúng những món đó mỗi tuần. Đơn hàng tới qua tin nhắn Zalo, được nhân viên tính giá bằng tay theo một hạng phải tự nhớ, rồi gõ vào bảng tính hai lần. Đề bài là để chính đại lý tự đặt, đúng giá của họ, mà không phải học thêm bất cứ thứ gì.
Cách làm
Một Zalo Mini App, vì cuộc trò chuyện vốn đã diễn ra ở đó. Đăng nhập không mật khẩu — danh tính Zalo chính là tài khoản, nên đại lý mở app lên là đã ở trong đó.
Giá mới là phần thú vị. Mỗi đại lý thuộc một hạng — Đồng, Bạc, Vàng, Bạch Kim — và hạng quyết định họ thấy gì. Hạng nằm ở backend, giá được tính ở server, và Mini App không bao giờ nhận về một mức giá mà đại lý đó không có quyền thấy. Phía sau: một backend Express + MongoDB với 16 module, một trang quản trị React cho đội nội bộ, tất cả trong một monorepo pnpm.
Chỗ khó
Công nợ. Vị thế tín dụng của đại lý quyết định đơn có được đặt hay không, mà con số đó nhảy theo từng hoá đơn và từng lần thanh toán. Đưa nó thành một module chính thức thay vì một báo cáo là thứ cho phép Mini App từ chối đơn đúng khoảnh khắc cần từ chối, kèm lý do — thay vì nhận đơn rồi để sale dọn sau.