A collection of single-file HTML tools — each tool is one .html file with inline CSS and JavaScript. No build steps, no frameworks, no dependencies beyond CDN-loaded libraries.
Inspired by Simon Willison’s “Useful patterns for building HTML tools”.
.html file. This makes deployment trivial — just serve static files.file://. Zero infrastructure.localStorage, never in the HTML. Use prompt() or a settings panel to collect them.| File | Description |
|---|---|
triage.html |
Decision Canvas — a triage/prioritization board for sorting items |
firestore.html |
Firestore Recovery Tool — backup and restore Firestore data |
When building a new tool for this repo:
<style> and <script> tagshttps://cdn.tailwindcss.com, https://cdn.jsdelivr.net/npm/...)<meta charset="UTF-8"> and <meta name="viewport" ...> for mobile supporttool-name.htmlThese patterns from the Simon Willison article apply directly to how we work here:
The visual style is “Productivity Minimalist” — inspired by Linear, Superhuman, and Vercel. Every tool must follow these rules strictly to maintain a cohesive, premium feel.
Use CSS custom properties defined in :root:
:root {
--bg-body: #FFFFFF; /* or very subtle off-white #F9FAFB */
--bg-subtle: #F9FAFB; /* secondary backgrounds, cards */
--bg-element: #FFFFFF; /* inputs, interactive elements */
--text-main: #111827; /* headings, primary text — never use pure #000000 */
--text-secondary: #6B7280; /* labels, helper text, timestamps */
--border-color: #E5E7EB; /* all borders — thin, 1px */
--accent-color: #2563EB; /* ONE accent color for primary actions only */
--focus-ring: #111827; /* input focus borders — dark, high contrast */
--radius: 6px; /* subtle curve, not pill-shaped */
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
Rules:
#000000 for text — it causes eye strain. Use #111827 (dark slate).#E5E7EB, 1px — never thicker, never darker.font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
letter-spacing: -0.025em (tight tracking for premium feel)Buttons:
border-radius: 6px (not pill-shaped)opacity: 0.85) or slight darken — no dramatic transforms--accent-color bg + white text--border-color border + --text-main textInputs:
--border-color border--focus-ring border (dark gray/black), high contrastCards / containers:
--shadow-sm only — avoid large fuzzy drop shadows--border-color border--radius border-radiusSpacing:
padding: 16px 20px or more, never crampedgap in flex/grid)Every new tool should start with these variables in :root and reference them throughout. Never hardcode color values in individual rules — always use the variables.