Hotel management.

Hotel Management là hệ thống quản trị nội bộ dành cho khách sạn — từ lúc khách đặt phòng đến lúc trả phòng và nhận hoá đơn, mọi thứ nằm trong một luồng duy nhất không cần nhập tay hai lần. Lễ tân nhận đặt phòng walk-in hoặc online, check-in, ghi nhận dịch vụ phát sinh, check-out và xuất hoá đơn tự động. Mỗi vai trò trong khách sạn — lễ tân, thu ngân, quản lý — chỉ thấy và thao tác được đúng phần việc của mình. Toàn bộ thay đổi dữ liệu đều có audit log kèm trạng thái trước và sau, không có thao tác nào mất dấu.

Year2025 — 2026
RoleSolo · fullstack (BE + FE)
Timeline8 tuần (MVP)
Status● Live · production

01.Overview

Tổng quan

Hotel-management ra đời từ một bài toán rất thực tế: một khách sạn 30 phòng đang dùng Excel + Zalo để nhận đặt phòng, ghi giờ check-in / check-out, cộng dồn dịch vụ kèm theo và viết hoá đơn tay. Mỗi lần khách đổi phòng hay gọi thêm dịch vụ là một lần lễ tân phải nhớ, ghi lại, rồi nhập lại vào file kế toán cuối ca — sai sót không phải ngoại lệ, mà là chuyện thường ngày.

Tôi build hotel-management để gói toàn bộ vòng đời một lượt lưu trú vào một luồng duy nhất: từ đặt phòng, nhận phòng, thêm dịch vụ (spa, ăn uống, giặt là, đưa đón), tới trả phòng và xuất hoá đơn — không nhập tay hai lần. RBAC chi tiết đến từng thao tác đảm bảo lễ tân không chạm được vào module kế toán, audit log ghi lại mọi thao tác đủ để truy vết khi cần. Dự án đang chạy nội bộ cho 1 khách sạn với ~12 user hằng ngày.

02.Features

Tính năng
  • 01
    Đặt phòng & vòng đờiWalk-in & online · PENDING → CHECKED_OUT

    Hệ thống nhận đặt phòng theo hai luồng: walk-in tại quầy lễ tân hoặc từ kênh online, lưu đầy đủ thông tin khách — tên, số điện thoại, CCCD — kèm số người lớn, trẻ em và ghi chú nếu có. Mỗi booking đi qua vòng đời PENDING → CONFIRMED → CHECKED_IN → CHECKED_OUT; trường hợp khách huỷ thì chuyển sang CANCELLED kèm phí huỷ được ghi nhận và tính vào hoá đơn.

  • 02
    Sơ đồ phòng realtimeStatus by floor · hourly or daily

    Mỗi phòng mang một trong bốn trạng thái: AVAILABLE / OCCUPIED / MAINTENANCE / CLEANING, được group theo tầng và loại phòng để lễ tân dễ theo dõi toàn cảnh. Hệ thống hỗ trợ cả hai hình thức thuê — theo giờ hoặc theo ngày — và tự tính tiền dựa trên giá của room type nhân với thời lượng thực tế lưu trú, không cần nhập tay.

  • 03
    Dịch vụ kèm phòngAdd-on services per booking

    Trong suốt thời gian lưu trú, lễ tân có thể gắn thêm dịch vụ vào booking bất kỳ lúc nào: spa, ăn uống, giặt là, đưa đón. Mỗi dịch vụ được ghi thành một dòng booking_services riêng, chốt số lượng và đơn giá ngay tại thời điểm thêm vào. Nếu bảng giá thay đổi sau đó, các dòng đã ghi không bị ảnh hưởng — hoá đơn cũ luôn phản ánh đúng mức giá tại lúc phát sinh dịch vụ.

  • 04
    Hoá đơn tự độngAuto invoice on check-out · PDF / Excel

    Khi khách check-out, hệ thống tự động dựng invoice từ toàn bộ dữ liệu trong booking: tiền phòng + tổng dịch vụ + thuế − chiết khấu. Hoá đơn được snapshot tại thời điểm xuất — giá phòng hay bảng dịch vụ có thay đổi sau đó cũng không ảnh hưởng đến hoá đơn đã chốt. Lễ tân có thể in trực tiếp tại quầy hoặc export ra PDF / Excel; cả hai đều đi qua Bull queue để không block luồng chính khi nhiều hoá đơn được xuất cùng lúc.

  • 05
    RBAC + audit logPer-action permissions · before/after diff

    Phân quyền được kiểm soát chi tiết đến từng thao tác: lễ tân chỉ thấy module phòng và booking, kế toán mới truy cập được hoá đơn và báo cáo. Mỗi nhóm quyền được cắt riêng theo hành động — tạo, sửa, huỷ, refund — không phải theo màn hình chung chung. Mọi thao tác thay đổi dữ liệu đều đi qua AuditInterceptor, tự động lưu state trước và sau vào audit_logs — đủ để truy vết ai đã làm gì, lúc nào, và dữ liệu trông như thế nào trước khi thay đổi.

03.Tech stack

Công nghệ sử dụng
FrontendNext.js 16 · React 19 · TypeScript · Redux Toolkit · Tailwind 4 · react-hook-form · zod · sonner
BackendNestJS 11 · TypeScript · TypeORM · Passport JWT · class-validator · Socket.IO · Bull
DatabaseMySQL 8 (rooms, bookings, booking_services, invoices, audit_logs JSON) · Redis 7 (cache, queues, socket adapter)
InfraDocker · GitHub Actions · Caddy reverse proxy · VPS (4GB)
ObservabilityIn-DB audit logs · Pino · request id middleware
TestingJest unit (booking lifecycle + RBAC guards) · Supertest e2e (booking → invoice flow) · ~62% coverage

04.How it works

Kiến trúc tổng thể

Trung tâm của hotel-management là vòng đời booking. Mỗi booking giữ liên kết tới đúng một room và có thể có nhiều booking_services. Khi tạo booking, service kiểm tra phòng trống bằng transaction + row lock trên bảng rooms — chống double-booking ngay cả khi hai lễ tân thao tác đồng thời trên cùng một phòng. Trạng thái phòng được đồng bộ tự động theo booking: CHECKED_IN kéo phòng sang OCCUPIED, CHECKED_OUT kéo sang CLEANING.

Khi check-out, một transaction duy nhất xử lý toàn bộ: (1) chuyển booking sang CHECKED_OUT, (2) tính tiền phòng theo thời lượng thực tế nhân đơn giá room type, (3) cộng dồn booking_services với đơn giá đã snapshot từ lúc thêm vào, (4) tạo invoices, (5) chuyển phòng sang CLEANING. Mọi bước đều có bản ghi audit before/after. Latency end-to-end từ check-out đến in hoá đơn đo trên prod: ~180ms.

Design decision

"Hotel-management hiện xử lý tốt toàn bộ luồng vận hành — đặt phòng, check-in, dịch vụ, hoá đơn. Hai hướng đang được phát triển tiếp: hồ sơ khách hàng đầy đủ hơn với ảnh căn cước công dân đính kèm ngay tại check-in — hiện tại CCCD chỉ lưu dạng số, chưa có ảnh, trong khi thực tế nhiều khách sạn bắt buộc phải giữ bản sao giấy tờ khi có đoàn thanh tra. Hướng thứ hai là tích hợp webhook để nhận booking trực tiếp từ các platform bên ngoài — Booking.com, Airbnb, hay bất kỳ OTA nào — thay vì lễ tân phải nhập tay từng đơn từ nhiều kênh về."

05.Bình luận

Ý kiến của bạn

Chưa có bình luận nào.

Xem tiep
zoom-bot preview
Z
Zoom Bot

ZoomBot là một pool các bot Chrome tự động tham gia Zoom meeting và chờ lệnh điều khiển từ xa qua HTTP API. Mỗi bot chạy trên một instance Chrome riêng biệt, có lock riêng, hoàn toàn thread-safe — các bot không can thiệp lẫn nhau dù chạy song song. Từ một API call duy nhất, có thể điều khiển từng bot gửi chat, bật/tắt mic, bật/tắt video, rời phòng hoặc rejoin. Khi bot crash, hệ thống tự phát hiện và khởi động lại mà không cần can thiệp tay. Toàn bộ được viết bằng Python, Selenium và Flask — đủ gọn để chạy trên một máy chủ thông thường mà không cần hạ tầng phức tạp.

trading-signals preview
T
Trading Signals

TradingSignals là công cụ phân tích tín hiệu mua/bán cá nhân cho crypto và chứng khoán — không phải bot copy trade đại trà, mà là hệ thống được xây riêng để phục vụ đúng một người, với dữ liệu kiểm chứng thực tế 2–5 năm trở lại. NestJS scan đồng thời trên nhiều khung thời gian từ 15 phút đến 1 tháng, chạy song song qua 4 engine độc lập: candlestick pattern, indicator, price action và volume analysis. Tín hiệu chỉ được ghi nhận khi nhiều khung đồng thuận — loại bỏ nhiễu, chỉ giữ lại những điểm vào lệnh thực sự đáng chú ý. Sau 10 ngày, hệ thống tự nhìn lại từng tín hiệu — đúng hay sai — tích lũy dần độ chính xác theo thời gian sử dụng. Kết quả được đẩy thẳng về Telegram cá nhân ngay khi có tín hiệu, pattern hiển thị realtime trên TradingView tích hợp trong Next.js.

mysql-manager-mobile preview
M
MySQL Manager

MySQL admin client viết bằng Flutter — saved connections, browse databases → tables → rows, CRUD theo primary key với safety guard, và SQL shell tự do; chạy trên Android, iOS, macOS, Linux, Windows từ một codebase Dart duy nhất.

random-tools preview
R
Random Tools

RandomKit là bộ công cụ ngẫu nhiên chạy hoàn toàn trên client — không server, không gửi dữ liệu đi đâu. Gồm các công cụ thường dùng: vòng quay tuỳ chỉnh với xác suất công bằng và hiển thị minh bạch từng phần trăm, đua vịt, bốc thăm, tung xu, xúc xắc, sinh số ngẫu nhiên, tạo mật khẩu, và chọn vị trí ngẫu nhiên trên bản đồ. Giao diện hỗ trợ song ngữ vi/en, cấu trúc SEO chuẩn để tìm kiếm được từng công cụ riêng lẻ.