RandomTools.

Bộ công cụ ngẫu nhiên một trang: vòng quay tuỳ chỉnh với xác suất công bằng và minh bạch, đua vịt, bốc thăm, tung xu, xúc xắc, sinh số / mật khẩu / vị trí — chạy client-side, vi/en, SEO chuẩn.

Year2025
RoleSolo · design + code
Timeline4 tuần
Status● Live · production

01.Overview

Tổng quan

Random-tools ra đời từ một thói quen rất văn phòng: trưa nào cũng có người mở Wheelofnames để quay xem hôm nay ăn gì, tối thì lại vào một trang khác để bốc thăm xem ai trả tiền nhậu. Mấy trang đó hầu hết đầy quảng cáo, không nhớ lịch sử, không có tiếng Việt, và không ai chắc thuật toán bên trong có thực sự công bằng hay không — đó mới là thứ cốt lõi mà một công cụ ngẫu nhiên phải làm đúng.

Tôi gom 10 công cụ thường dùng nhất — vòng quay, đua vịt, bốc thăm, quay số, tung xu, xúc xắc, sinh số, mật khẩu, vị trí, chọn quà — vào một site Next.js gọn nhẹ, không quảng cáo, mọi tên có xác suất bằng nhau, lịch sử lưu ngay trong trình duyệt, hỗ trợ vi/en và SEO đầy đủ. Bản đầu ship sau 3 tuần buổi tối. Hiện đang phục vụ ~1.4k lượt quay mỗi ngày.

02.Features

Tính năng
  • 01
    Vòng quay tuỳ chỉnhCustom names · live preview · saved presets

    Khách dán danh sách vào — phân tách bằng dòng hoặc dấu phẩy — vòng quay vẽ lại realtime trên SVG ngay khi gõ, không cần bấm thêm bước nào. Có sẵn một số preset cho các tình huống quen thuộc: ăn trưa, ai trả tiền, nhậu nhẹt, đá pes, LMHT — chọn vào là điền sẵn tên, quay luôn. Tuỳ chọn xoá tên trúng sau mỗi lượt để lần quay tiếp theo không lặp lại người cũ.

  • 02
    Xác suất công bằng & minh bạchEqual odds · open-source math

    Mọi tên trong danh sách có xác suất đúng bằng 1 / n — không hơn, không kém. Toàn bộ logic chọn ngẫu nhiên nằm trong khoảng ~20 dòng trong spin-utils.ts, đọc được trực tiếp trong source. Không có trọng số ẩn, không có server-side override, không A/B testing. Ai muốn kiểm tra thì mở DevTools ra xem — không có gì để giấu.

  • 03
    10 công cụ randomSpin · race · draw · dice · coin · …

    Ngoài vòng quay chính, bộ công cụ còn gồm: đua vịt, chọn quà, quay số, tung xu, xúc xắc, bốc thăm, sinh số, sinh mật khẩu và sinh vị trí. Mỗi công cụ là một page.tsx riêng biệt với metadata và JSON-LD độc lập — từng trang được index và tìm kiếm riêng, không phải tất cả dồn vào một URL duy nhất.

  • 04
    i18n + SEO chuẩnVietnamese / English · per-page metadata

    i18next được bootstrap ngay tại layout, toàn bộ giao diện chuyển ngôn ngữ mà không cần load lại trang. Mỗi công cụ gọi buildPageMetadata() để sinh đầy đủ metadata: JSON-LD WebPage, canonical, OpenGraph, Twitter card — đủ để share đẹp trên mọi nền tảng. Sitemap, robots và manifest được cấu hình indexable theo môi trường — production thì mở index, staging thì chặn — không cần chỉnh tay mỗi lần deploy.

  • 05
    Lịch sử cục bộlocalStorage · zero backend

    Lịch sử quay và danh sách người chơi được lưu trực tiếp trong localStorage của trình duyệt — key spin:lucky-spin-history cho lịch sử, spin:lucky-spin-players cho danh sách. Không có tài khoản, không có database, không có gì rời khỏi máy của người dùng. Privacy by default, không phải privacy by policy.

03.Tech stack

Công nghệ sử dụng
FrontendNext.js 16 (App Router) · React 19 · TypeScript · Tailwind 4 · lucide-react
Randomnesscrypto.getRandomValues khi có · Math.random fallback · lấy mẫu uniform · không trọng số ẩn
i18ni18next · react-i18next · vi / en JSON resources · client + server bootstrap
SEOnext/metadata · JSON-LD WebPage · OpenGraph · Twitter card · sitemap · robots · manifest · canonical + alternates
StateReact state · localStorage (lịch sử, danh sách người chơi) · không có database
InfraDocker · Vercel-style deploy · cổng 3024 · GitHub Actions

04.How it works

Kiến trúc tổng thể

Cốt lõi của vòng quay là hàm pickUniformIndex(n) chỉ vài dòng: lấy Math.floor(rand() × n) với rand()crypto.getRandomValues chuẩn hoá về [0, 1), fallback sang Math.random() ở môi trường cũ. Mọi vị trí trên vòng có xác suất đúng bằng 1 / n — không có trọng số ẩn, không có override theo IP, không có A/B.

Thứ tự quan trọng: kết quả được chốt trước, animation chỉ là cách trình bày. Sau khi pickUniformIndex trả về index trúng → tính góc đích → cộng thêm MIN_SPIN_ROUNDS × 360° để có cảm giác quay nhiều vòng → transition CSS cubic-bezier trong SPIN_DURATION_MS (7000ms). Vì kết quả đã chốt từ đầu, bất kỳ ai cũng có thể đo góc cuối, đếm số ô và xác nhận xác suất thực sự là 1 / n — không cần tin lời, cứ đo mà kiểm tra.

Design decision

"Tôi không thêm tính năng nào trước khi chắc xác suất chạy đúng. Vòng quay có thể xấu, preset có thể thiếu, lịch sử có thể không lưu — người dùng vẫn quay lại nếu họ tin kết quả công bằng. Mất niềm tin đó thì mọi thứ khác không còn ý nghĩa. Nên thứ được viết kỹ nhất trong codebase không phải animation hay i18n — mà là pickUniformIndex."

05.Bình luận

Ý kiến của bạn

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

Xem tiep
python-ocr preview
O
Captcha OCR

CaptchaOCR là một micro-service FastAPI nhận ảnh captcha 4 chữ số dưới dạng base64 và trả về số nguyên tương ứng. Model ddddocr pretrained được load một lần duy nhất lúc process khởi động — mọi request sau đó chỉ là inference, latency vài chục ms mỗi ảnh. Service deploy bằng PM2 với auto-restart và giới hạn RAM cứng, đảm bảo chạy ổn định dài hạn mà không cần giám sát thủ công.

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.

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.

hotel preview
H
Hotel management

Hotel Management là phần mềm quản trị khách sạn nội bộ, xây cho đội ngũ lễ tân và quản lý vận hành hàng ngày. Toàn bộ luồng cốt lõi được xử lý trong một hệ thống: nhận đặt phòng walk-in tại quầy hoặc từ kênh online, check-in và check-out, ghi nhận dịch vụ phát sinh trong quá trình lưu trú, và xuất hoá đơn tự động khi khách trả phòng. Phân quyền chi tiết đến từng thao tác — nhân viên lễ tân, thu ngân và quản lý có màn hình và quyền hạn khác nhau. Mọi thay đổi trên hệ thống đều được ghi vào audit log đầy đủ, đủ để truy vết khi cần.