LENA Bridal — Hệ thống quản lý cho thuê váy cưới

Viết lại hệ thống quản lý cho một shop cho thuê váy cưới và phụ kiện: trang quản trị cho đơn thuê, ca làm việc và doanh thu theo cơ sở, kèm website khách xem váy, giữ chỗ online và tra cứu đơn.

LIVEFreelance
Năm
2026
Tech stack
12 công nghệ

Xem qua sản phẩm

Desktop Preview

Ảnh desktop của LENA Bridal — Hệ thống quản lý cho thuê váy cưới

Mobile Mockup

Ảnh mobile của LENA Bridal — Hệ thống quản lý cho thuê váy cưới

Phạm vi & vai trò của mình

Fullstack Developer (Solo / End-to-End)

Phạm vi sản phẩm

  • Thiết kế lược đồ dữ liệu PostgreSQL với Prisma và tầng nghiệp vụ thuần cho công thức tiền, vòng đời đơn, lịch trống và hạng khách.

  • Trang quản trị: kho váy và phụ kiện, khách hàng, đơn thuê, ca làm việc, phiếu thu chi, chi phí, nhật ký, người dùng và cài đặt.

  • Báo cáo doanh thu theo ngày, tháng, năm, theo cơ sở và nhân viên, tải về CSV; hoá đơn tải PDF.

  • Website khách: danh mục váy, tìm theo ngày thuê, giữ chỗ online, tra cứu đơn, bài viết và trang chính sách.

  • Script chuyển dữ liệu từ hệ thống cũ và nhập khách hàng từ máy bán hàng cũ.

  • Bộ test Vitest cho logic nghiệp vụ và Playwright cho luồng thật trên trình duyệt, gồm phân quyền, tạo đơn, bàn phím và ba breakpoint.

Luồng chính

  • Nhân viên lên đơn: chọn váy còn trống theo ngày, hệ thống tính tiền thuê, cọc, phụ thu và ưu đãi hạng khách, rồi bàn giao, thu tiền và nhận trả váy.

  • Khách xem váy trên website, giữ chỗ online; lượt giữ chỗ tự hết hạn nếu không được duyệt, nhân viên duyệt thì đơn vào luồng chính.

  • Cuối ca nhân viên kết ca theo cơ sở; quản lý đối soát tiền mặt và chuyển khoản, duyệt hoàn cọc và xem báo cáo.

Công nghệ

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • PostgreSQL
  • Prisma
  • Zod
  • React Hook Form
  • Tiptap
  • Recharts
  • Vitest
  • Playwright

Cách mình giải quyết

Bài toán cần giải quyết

Shop cho thuê váy cưới và phụ kiện đang dùng một hệ thống React + PHP cũ, không còn phù hợp khi shop có nhiều nhân viên và hai cơ sở. Nghiệp vụ cần chặt: một chiếc váy không được cho hai đơn thuê trùng ngày, tiền thu phải khớp theo ca và theo cơ sở, và dữ liệu đơn, khách, doanh thu từ hệ thống cũ phải được chuyển sang đầy đủ.

Quyết định kỹ thuật

  • Không lưu thứ suy ra được: tình trạng váy suy từ lịch đặt, trạng thái thanh toán suy từ các lượt thu, hạng khách suy từ số đơn hoàn tất, để dữ liệu không lệch nhau theo thời gian.

  • Lượt giữ chỗ online hết hạn được dọn ngay ở đầu mỗi truy vấn lịch trống thay vì dùng cron, nên không có cảnh job nền ngừng chạy mà váy vẫn bị giữ.

  • Chi nhánh tách thành bảng riêng và gắn vào nhân viên, ca, tiền thu và đơn; triển khai theo từng giai đoạn để dữ liệu cũ không bị dồn sai cơ sở.

  • Ảnh váy và ảnh giấy tờ khách đi qua một lớp lưu trữ riêng, kiểm quyền theo từng file, sẵn sàng đổi sang lưu trữ đám mây sau này.

Bài toán phức tạp

  • Múi giờ: mọi mốc thời gian lưu kèm múi giờ và phiên kết nối ép UTC, còn ngày thuê và ngày trả là ngày lịch riêng, để báo cáo không cắt nhầm biên ngày hay biên tháng.

  • Chuyển dữ liệu khi hệ thống cũ không trả về mật khẩu: tài khoản được cấp mật khẩu tạm và phải đổi ở lần đăng nhập đầu.

  • Sửa váy ban đầu là một món trong kho nên bị khoá lịch như váy; chuyển thành khoản phí trên đơn để nhiều đơn cùng dùng được.

Kết quả đạt được

Hệ thống mới viết bằng Next.js và PostgreSQL gồm trang quản trị và website cho khách. Trang quản trị lo kho váy, đơn thuê từ lúc lên đơn đến bàn giao, thu tiền, trả váy, hoàn cọc, cùng ca làm việc, phiếu thu chi, chi phí và báo cáo doanh thu theo cơ sở và theo nhân viên. Website cho khách xem váy, giữ chỗ online và tra cứu đơn. Hệ thống đã chạy production với HTTPS và được cập nhật liên tục theo phản hồi của shop.

  • Shop đã vận hành trên hệ thống mới, dữ liệu cũ được chuyển sang và đối chiếu doanh thu theo tháng.

  • Các đợt phản hồi của shop sau khi chạy thật (cơ sở, voucher, phân quyền, báo cáo, hoá đơn) được làm tiếp trên cùng nền tảng.

Điểm nổi bật

  • Chống trùng lịch bằng ràng buộc của PostgreSQL: hai nhân viên cùng đặt một chiếc váy cho khoảng ngày giao nhau thì database từ chối người thứ hai.

  • Script chuyển dữ liệu từ hệ thống cũ chạy trong một transaction và tự đối chiếu doanh thu từng tháng, lệch là dừng.

  • Toàn bộ phân quyền khai báo ở một chỗ duy nhất trên server; menu, điều hướng và mọi server action đều đọc từ đó.

  • Giá luôn đọc từ database, server không nhận giá do trình duyệt gửi lên.

Kết nối với mình

Cảm ơn bạn đã ghé thăm góc nhỏ của mình. Rất mong chúng ta sẽ có dịp trò chuyện và hợp tác!

Mình luôn cởi mở với những cuộc trò chuyện về phát triển sản phẩm, ứng dụng AI hay các ý tưởng khởi nghiệp. Cứ thoải mái ném thẳng một tin nhắn cho mình nhé!

Nhận hợp tác chọn lọc · trả lời trong ngày