Chọn người thắng cuộc một cách công bằng, thú vị và chuyên nghiệp.
Lucky Draw Pro là một ứng dụng web đơn trang (Single-File Solution) được thiết kế để quản lý việc quay số trúng thưởng cho các sự kiện, tiệc công ty hoặc hoạt động lớp học. Với kiến trúc Zero-Dependency, ứng dụng hoạt động mượt mà trên mọi trình duyệt mà không cần cài đặt phức tạp.
- Giới Thiệu
- Tính Năng Chính
- Kiến Trúc Tổng Quan
- Cài Đặt
- Hướng Dẫn Sử Dụng
- Cấu Hình (Configuration)
- Cấu Trúc Thư Mục
- Hướng Dẫn Đóng Góp
- Giấy Phép
- Lộ Trình Phát Triển (Roadmap)
Trong các sự kiện, việc chọn ra người may mắn cần sự minh bạch và yếu tố giải trí. Lucky Draw Pro giải quyết vấn đề này bằng cách cung cấp một giao diện trực quan, hiệu ứng pháo giấy (confetti) rực rỡ và khả năng cấu hình linh hoạt ngay trên trình duyệt của người dùng.
Dự án được xây dựng dựa trên triết lý "Local-First": mọi dữ liệu về người tham gia, lịch sử thắng cuộc và cấu hình đều được lưu trữ an toàn trong trình duyệt của bạn (LocalStorage), đảm bảo quyền riêng tư và khả năng hoạt động offline.
- 🎯 Quản Lý Vòng Quay: Tùy chỉnh tên các vòng quay (Giải Nhất, Giải Đặc Biệt...) dễ dàng.
- 👥 Nhập Liệu Linh Hoạt:
- Nhập thủ công qua khung soạn thảo.
- Hỗ trợ Import CSV và Drag & Drop file danh sách.
- 🎉 Hiệu Ứng Visual Đỉnh Cao:
- Animation quay số hồi hộp.
- Hiệu ứng pháo giấy (Confetti) render bằng HTML5 Canvas khi có người thắng.
- Hiệu ứng âm thanh chúc mừng.
- 💾 Persist Data (Lưu Trữ Bền Vững): Tự động lưu trạng thái, lịch sử và cấu hình vào LocalStorage. F5 không mất dữ liệu.
- 📱 Responsive & Fullscreen: Tối ưu cho màn hình máy chiếu (Projector) và thiết bị di động. Chế độ toàn màn hình giúp tập trung sự chú ý.
- ⚙️ Cấu Hình UI: Thay đổi tiêu đề, mô tả trực tiếp trên giao diện mà không cần sửa code.
Dự án tuân theo mô hình Vanilla MVC (Model-View-Controller) giản lược, tích hợp toàn bộ trong một file duy nhất để tối đa hóa tính di động.
graph TD
User[Người Dùng] -->|Nhập liệu/CSV| Input[Input Parser]
Input -->|Lưu| Storage[(LocalStorage)]
User -->|Click Quay Số| Logic[RNG Engine]
Storage -->|Lấy DS tham gia| Logic
Logic -->|Kết quả ngẫu nhiên| View[DOM Update]
View -->|Visuals| Canvas[Confetti Canvas]
View -->|Audio| Sound[Audio Element]
Logic -->|Ghi người thắng| History[Lịch Sử]
History -->|Lưu| Storage
- Core: HTML5, Vanilla JavaScript (ES6+).
- Styling: CSS3 Variables, Flexbox, Grid Layout.
- Persistence:
window.localStorage. - Rendering: DOM Manipulation trực tiếp & Canvas API.
Vì đây là giải pháp Single-File, quá trình cài đặt cực kỳ đơn giản.
- Tải file
index.htmltừ repository này. - Lưu vào thư mục máy tính của bạn.
git clone https://github.com/lamkent00/Lucky-Draw-Pro.git
cd Lucky-Draw-ProChỉ cần mở file index.html bằng bất kỳ trình duyệt hiện đại nào (Chrome, Edge, Firefox, Safari).
Mẹo: Để trải nghiệm âm thanh tốt nhất, hãy tương tác với trang web (click chuột) ngay khi mở để trình duyệt cho phép Autoplay Audio.
- Cấu hình: Vào tab "Cấu Hình" để đặt tên chương trình và danh sách giải thưởng.
- Nhập danh sách: Tại tab Cấu Hình, nhập tên người tham gia hoặc upload file
.csv. - Quay số:
- Chuyển sang tab "Quay Số".
- Chọn vòng quay (Ví dụ: Giải Nhất).
- Bấm nút Phóng to (⛶) để trình chiếu.
- Bấm "QUAY SỐ" và chờ đợi kết quả.
- Xác nhận: Bấm "Ghi Nhận" để lưu người thắng vào lịch sử và loại khỏi danh sách quay tiếp theo.
Mặc dù là file tĩnh, bạn có thể cần thay thế một số placeholder trong code trước khi deploy thực tế:
Tìm và thay thế các giá trị sau trong file index.html:
| Placeholder | Mô tả | Giá trị mặc định gợi ý |
|---|---|---|
[website_description] |
Meta description cho SEO | "Công cụ quay số may mắn..." |
[sound_effect_url] |
Link file âm thanh MP3 chiến thắng | assets/win.mp3 hoặc URL online |
[initial_participants] |
Dữ liệu mẫu ban đầu | (Để trống nếu không cần) |
File CSV để import cần có định dạng đơn giản, mỗi dòng là một tên:
Nguyễn Văn A
Trần Thị B
Lê Văn C
(Không cần header, encoding UTF-8)
Dự án được giữ ở mức tối giản nhất có thể.
lucky-draw-pro/
├── index.html # 🌟 The Core Application (Logic + UI + Style)
├── .gitignore
└── README.md # Tài liệu dự án
Chúng tôi hoan nghênh mọi sự đóng góp để làm cho dự án tốt hơn!
- Fork dự án.
- Tạo branch tính năng của bạn (
git checkout -b feature/AmazingFeature). - Commit thay đổi (
git commit -m 'Add some AmazingFeature'). - Push lên branch (
git push origin feature/AmazingFeature). - Mở một Pull Request.
- Sử dụng Vanilla JS, hạn chế thêm thư viện ngoài (No jQuery, No React) để giữ tính portable.
- CSS sử dụng biến (
var(--color-name)) để dễ dàng theming sau này. - Comment rõ ràng các function logic phức tạp.
Dự án này được phân phối dưới giấy phép MIT License. Xem file LICENSE để biết thêm chi tiết.
- Chức năng quay số cơ bản & Animation.
- Import CSV & LocalStorage.
- Hiệu ứng Confetti & Sound.
- Export Lịch Sử: Xuất danh sách người thắng ra file Excel/PDF.
- Themes: Chế độ Dark/Light và các theme màu tùy chỉnh.
- PWA Support: Cài đặt app trên Desktop/Mobile để chạy offline hoàn toàn như Native App.
- Server Sync: (Tùy chọn) Đồng bộ dữ liệu real-time qua Firebase cho các sự kiện lớn.
<sub>Được xây dựng với ❤️ và sự tỉ mỉ cho cộng đồng bởi Lam Kent.</sub>