Chuyển tới nội dung chính
Trịnh Thị Mai
Đã hoàn thành

Lucky Wheel

Một vòng quay phần thưởng có xác suất tùy chỉnh cho sự kiện và minigame — tự tay xây dựng, đã hoàn thành và phát hành.

Vai trò
Solo developer — product, architecture & release preparation
Nền tảng
Android
Thời gian
2026

Tổng quan dự án

Lĩnh vực
Tiện ích tiêu dùng — công cụ chọn ngẫu nhiên cho sự kiện và nhóm
Sản phẩm
Lucky Wheel là một ứng dụng Android để tạo vòng quay phần thưởng có thể tùy chỉnh: thêm phần thưởng hoặc mục với trọng số, quay vòng và nhận một kết quả được chọn ngẫu nhiên — được xây dựng cho sự kiện, minigame tặng quà và hội chợ thương mại, không phải cờ bạc.
Người dùng
Bất kỳ ai tổ chức sự kiện, minigame tặng quà hoặc hoạt động nhóm muốn có một cách trực quan, công bằng để chọn ra một kết quả ngẫu nhiên.
Lý do ra đời
Một cách thay thế đơn giản, trực quan cho việc chọn người thắng thủ công, với một mô hình xác suất có thể cấu hình cho từng phần thưởng thay vì luôn có tỷ lệ bằng nhau.
Vấn đề
Các nhóm tổ chức minigame tặng quà hoặc sự kiện cần một cách đơn giản, đáng tin cậy để thực hiện một lượt quay ngẫu nhiên có trọng số mà không cần tự xây dựng công cụ riêng.

Vai trò & đóng góp của tôi

Đây là một dự án cá nhân, độc lập — ý tưởng sản phẩm, định hướng thiết kế sản phẩm, triển khai Android, kiểm thử tự động và chuẩn bị phát hành đều là công việc của riêng tôi. Ứng dụng được xây dựng trên một nền tảng Android tái sử dụng mà tôi duy trì riêng, dành phần logic đặc thù của ứng dụng: quản lý vòng quay/phần thưởng, engine chọn có trọng số, hoạt ảnh quay và lịch sử.

Thách thức & giải pháp

  1. Thách thức kỹ thuật

    Thách thức cốt lõi là làm cho một lượt quay ngẫu nhiên có trọng số cảm thấy công bằng và đáng tin cậy: người thắng phải được chọn đúng theo trọng số đã cấu hình của từng phần thưởng, hoạt ảnh quay phải hạ cánh trực quan đúng vào kết quả đó mà không trông mơ hồ, và một cú chạm đúp nhanh hoặc vô tình nhấn nút back trong hộp thoại kết quả không bao giờ được phép ghi lại hai kết quả cho một lượt quay.

    Cách tôi tiếp cận

    Người thắng được chọn trước tiên, bằng phương pháp lấy mẫu ngẫu nhiên theo trọng số tích lũy — không phải một lựa chọn ngẫu nhiên đồng đều đơn giản — trước khi bất kỳ hoạt ảnh nào chạy. Các lát cắt hiển thị của vòng quay được cố tình giữ kích thước bằng nhau bất kể trọng số, để xác suất và bố cục hiển thị luôn tách biệt; một phép tính hình học riêng sau đó tính toán góc quay hạ cánh, với một biên độ an toàn giúp điểm dừng tránh xa ranh giới giữa các lát cắt để kết quả không bao giờ trông mơ hồ. Việc lưu hoặc bỏ qua một kết quả sau khi quay được bảo vệ bởi một kiểm tra trạng thái single-flight, được xác nhận bằng một bài kiểm thử concurrency riêng, để nhiều nhất chỉ một bản ghi lịch sử có thể được tạo ra từ một lượt quay.

Kiến trúc & công nghệ

Một ứng dụng Android gốc viết bằng Kotlin với Jetpack Compose, Hilt cho dependency injection, và Room để lưu trữ hoàn toàn cục bộ, ngoại tuyến — không có backend và không có quyền truy cập mạng nào. Ứng dụng sử dụng một số module tái sử dụng (design system, lưu trữ cục bộ, cấu hình dependency injection, lời nhắc đánh giá trong ứng dụng, màn hình onboarding và cài đặt) từ một dự án nền tảng sản phẩm Android riêng biệt, trong khi toàn bộ logic đặc thù về vòng quay/phần thưởng/lượt quay nằm trong chính ứng dụng.

Công nghệ

  • Kotlin
  • Jetpack Compose
  • Hilt
  • Room
  • Kotlin Coroutines
  • JUnit

Dự án này thể hiện

Một đợt rà soát mức độ sẵn sàng phát hành đã phát hiện ứng dụng về cơ bản đã hoàn thiện tính năng nhưng chỉ ra hai điểm cụ thể cần khắc phục trước khi phát hành — một liên kết chính sách quyền riêng tư còn là placeholder và thiếu cách xóa một vòng quay khi đã đạt giới hạn miễn phí. Đây là một phần bình thường, lành mạnh của việc phát hành phần mềm: hoàn thiện tính năng không đồng nghĩa với sẵn sàng phát hành, và một bước rà soát phát hành riêng chính là thứ phát hiện ra sự khác biệt đó trước khi người dùng thật gặp phải.

  • Phát triển Android
  • Hỗ trợ ngoại tuyến
  • Hỗ trợ phát hành
  • Kiểm thử chất lượng

Tiến độ hiện tại

  1. Định hình sản phẩm

    Hoàn thành
  2. Phát triển tính năng cốt lõi

    Hoàn thành
  3. Kiểm thử & hoàn thiện

    Hoàn thành
  4. Chuẩn bị phát hành

    Hoàn thành
  5. Phát hành & cải tiến

    Hoàn thành

Bạn có dự án tương tự?

Chia sẻ sản phẩm hoặc vấn đề bạn đang gặp. Tôi sẽ trao đổi để tìm hướng hỗ trợ phù hợp.

Làm việc cùng tôi