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.
01.Overview
Tổng quanRandom-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- 01Vò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ũ.
- 02Xá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 trongspin-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. - 0310 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.tsxriê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. - 04i18n + 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. - 05Lị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
localStoragecủa trình duyệt — keyspin:lucky-spin-historycho lịch sử,spin:lucky-spin-playerscho 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| Frontend | Next.js 16 (App Router) · React 19 · TypeScript · Tailwind 4 · lucide-react |
| Randomness | crypto.getRandomValues khi có · Math.random fallback · lấy mẫu uniform · không trọng số ẩn |
| i18n | i18next · react-i18next · vi / en JSON resources · client + server bootstrap |
| SEO | next/metadata · JSON-LD WebPage · OpenGraph · Twitter card · sitemap · robots · manifest · canonical + alternates |
| State | React state · localStorage (lịch sử, danh sách người chơi) · không có database |
| Infra | Docker · 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() là 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.
"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."
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.
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 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 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.
05.Bình luận
Ý kiến của bạnChưa có bình luận nào.