Launched
Everything is Random
A playful toolbox with rigorous rules underneath.
Designed, built, and launched a collection of browser-based random tools for decisions, games, creative work, test data, and credentials. The visible result is simple; the engineering handles fairness, limits, privacy, and delivery.
- My role
- I designed, built, tested, and launched the browser product.
- Result & status
- The product launched on Firebase Hosting with a connected custom domain and a catalog spanning decision tools, data generators, creative prompts, and credential generators. It demonstrates product design, front-end engineering, validation, and operational delivery in one public build.
An independent product with no audience-size or independent cryptographic-audit claim. The documented release uses direct email contact.
Public evidence
Inspect the work.
Each link opens the source file or working product described below.
Working interface
Live browser product
Try input validation, explicit sampling rules, and result exports. This demonstrates product behavior; it is not a substitute for reviewing the test code.
The problem
How can a random-tool site make many small interactions useful without hiding the rules that determine their results?
One route per tool
Static prerendering gives every tool a direct URL while generation remains in the browser.
Fair draws
Web Crypto and rejection-sampled bounded selection avoid modulo bias in the documented generation path.
Responsive workload
A cancellable worker keeps large batches away from the interface thread.
Clear limits
The product spells out ranges, repeats, state, export behavior, and privacy boundaries.
Approach
One registry. Many useful routes.
A shared tool registry defines the catalog and routes. React, TypeScript, Vite, and React Router prerender a page for each tool; Firebase Hosting serves the static build. The browser generates results only after a visitor acts, using Web Crypto rather than a remote random-number service.
Engineering
Keep generation in the browser.
Small draws stay in the page. Larger generation runs in a cancellable worker. Bounded draws use rejection sampling, while the password tool samples valid strings under the selected character-class rules. Input limits, duplicate handling, previous-settings labels, and export formats are explicit. Lists and generated credentials stay in tab memory; the tools do not send generation requests to a backend.
Validation
Test the rules, routes, and release.
The project record describes automated checks for bounds, uniqueness, shuffle preservation, picker state, password constraints, UUID format, and exports. It also documents browser, local Hosting, and live privacy checks. The live product is available below; the test implementation is not linked publicly here.
React · TypeScript · Vite · Web Crypto · Web Workers · Firebase Hosting