← Independent projectsIndependent browser product

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.

Tools & methods

React · TypeScript · Vite · Web Crypto · Web Workers · Firebase Hosting