April 20, 2026
v7.29.1 · production bugs, fixed
The JSON Fixer was completely broken.
A full audit of the site turned up five production issues. The worst of them, the one that had the site’s most-used tool silently non-functional: JSON Fixer had a nested block comment in its inline script — /* ... /* block-comments */ */. JavaScript doesn’t support nested block comments. The inner */ closes the outer comment early, leaving syntactically-invalid code after it. The browser refused to parse the entire script. Every button was dead. Every event listener was never attached. Users landed on the page, pasted JSON, clicked “Format,” and nothing happened.
Rewrote the offending comments as line-comments (// instead of /* */) on lines 19 and 239. Full Node --check pass across every inline script on every page of the site confirmed this was the only instance. The tool works now.
JSON Repair had a half-built feature no one had finished wiring.
The “Show detailed diff” toggle button was there in the UI. Clicking it called a renderDiff() function that was never defined — ReferenceError. Dead code on a live page. Implemented the function properly: line-by-line LCS diff, context-truncated output (shows 2 lines of context around each change), fully HTML-escaped against injection, matching CSS for added/removed/skipped lines. Tested against five cases including an XSS injection attempt. The toggle works now.
Command Palette was missing six tools.
When we added JWT Decoder, Paperwork, PDF Compressor, Cron Explainer, AI Regex, and JSON Repair, they were added to the nav bar and the sitemap but never added to the Cmd+K command palette index. Six tools, invisible to the keyboard-navigation workflow. Added all six with proper search keywords — JSON Repair indexes on llm chatgpt claude thinking fence broken so users land on it from the symptoms, not just the tool name.
Service worker was caching a four-month-old release.
The CACHE_VERSION constant in sw.js was still v7.18.2, from the big merge release back in March. Users who’d visited once with a browser that registered the service worker had been quietly served stale HTML and assets ever since — they weren’t seeing the paste buttons, the new mascot, or any of the recent work. Bumped to v7.29. Next visit, their cache invalidates; the one after that, everything is current.
Five tools had bespoke Open Graph images they weren’t using.
Dedicated og-*.png social-preview images for Image Compressor, HEIC Converter, JSON Fixer, Color Converter, and SVG Cleaner existed on disk — correctly sized at 1200×630 — but the pages all pointed to the generic og-preview.png fallback. Wired each tool page to its own image. Did the same for the three blog articles that thematically matched (image-compression-guide, iphone-heic-problem, svg-bloat). Social shares now show tool-specific branding instead of the generic site preview.
April 20, 2026
v7.29 · LLM output, and a sharper mascot
JSON Repair now handles the way LLMs actually talk.
The JSON Repair tool is built for fixing malformed JSON. That’s what the underlying jsonrepair library does well: trailing commas, single quotes, Python True/False, unquoted keys, truncation. But when you paste the output of a real LLM — Claude, ChatGPT, Gemini, DeepSeek, o1 — the JSON is almost never the only thing in the blob. Claude wraps it in <thinking> reasoning tags. Everybody wraps it in ```json markdown fences. ChatGPT prefaces with “Here’s your JSON:”. Gemini appends “Let me know if you need any changes!”.
JSON Repair now peels all of those layers before the repair pass runs. The headline fix is a fence-block extractor that catches the most common real-world pattern in one step: prose + opening fence + content + closing fence + more prose. The content gets extracted; the wrapper and the prose on either side get stripped and reported in the fixes list with the exact text that was removed. <thinking>, <reasoning>, <scratchpad>, <thought>, <rationale>, and <analysis> tags all get detected. 14 unit tests cover the patterns we saw in the wild.
The mascot got its resolution back.
The mascot PNG was shipping at 240×240. On modern phones with 3× pixel density (including the Samsung Galaxy line) that means the browser was upscaling 240 source pixels to fill 660 device pixels — which looks pixelated if you catch it in bright light. The new delivery is 720×720, regenerated from the original 1024×1024 clean source with silhouette-aware artifact cleanup (caught 1,513 residual pixels from the original AI generation that the 240px version missed), auto-centered, palette-quantized to 128 colors for compression. Net result: 47 KB instead of 35 KB, for 9× the intrinsic resolution. No HTML changes needed — the <img> still declares 240×240 CSS pixels; browsers downsample the richer source automatically.
April 20, 2026
v7.28.3 · paste and shortcuts
Paste buttons, everywhere they should be.
Nine tools now have a dedicated Paste button next to their main input: JSON Repair, JWT Decoder, Cron Explainer, SVG Shrinker, Regex Rambler, Diff Checker (both panes), Timestamp Converter, and AI Regex. On mobile — where long-press → paste is a two-step dance, and Samsung Internet in particular fights you on it — a single-tap Paste button is a real improvement. The implementation is shared: one delegated handler in commandk.js listens for clicks on any element with data-paste-to and routes the clipboard text into the targeted field, dispatching both input and change events so every tool's existing wiring picks it up. Graceful fallback if the browser blocks clipboard access (Firefox does this occasionally without recent user activation).
Also added sample chips to Timestamp Converter — Unix epoch, ISO 8601, Milliseconds, Natural phrase — so first-time visitors can see what the tool does before digging up a timestamp of their own to paste in. And documented the ⌘K palette shortcuts on the About page for people who like to know what keys do things.
April 20, 2026
v7.28.2 · consistency sweep
Six tool pages brought back into the fold.
Six of the newer tool pages — /compress-pdf/, /convert/, /cron/, /json-repair/, /jwt/, and /regex-ai/ — had been shipped without two site-wide scripts that every other page loads: Plausible (the cookie-free analytics) and commandk.js (the Cmd+K tool switcher). That meant a third of the workshop wasn’t measurable and wasn’t jumpable-from via the command palette. Both now load on all 18 tool pages.
Also wired up four cross-tool links that were missing: Image Smusher and HEIC Unheicer now both point at Paperwork for “now turn these into a PDF,” and JWT Decoder and Cron Explainer now both point at Timestamp Converter — because the one thing users reach for right after decoding a JWT is figuring out what its exp field actually means in local time.
April 20, 2026
v7.28.1 · mascot tidy
Cleaner hero mascot — sparkle removed, shadow follows silhouette.
Also in this release: an editorial tidy pass trimmed 18 page titles and 10 meta descriptions down to within Google's SERP display budget (≤60 chars for titles, ≤160 for descriptions), corrected a stale “workshop of 11 tools” claim on the Benchmarks page (the workshop holds 17 now), fixed a non-existent canonical URL on an orphan page, repointed three broken OG-image references to the site’s default social card, and rebuilt the Schema.org ItemList on the hub so the full workshop of 18 tools is now advertised to search engines (was stuck at 11 with two stale tool names). Plus an accessibility pass: fixed heading-hierarchy skips on 11 pages so screen readers can navigate the document outline without jumping past levels.
Three small quality fixes to Tooly on the homepage. First: painted out the four-pointed AI-generation watermark that had been baked into the bottom-right corner of the source PNG. Second: converted the PNG from RGB (solid black background) to RGBA so the amber drop-shadow now outlines Tooly's actual shape instead of the 240×240 rectangle around him — a proper Tooly-shaped glow. Third: tidied the caption layout (was floating absolutely outside the flex column), added mobile-specific sizing (200×200 on narrow screens instead of the desktop 240×240), and dropped the ← this is Tooly arrow since Tooly isn't to the left of the caption in any current layout. Also removed a dead <symbol id="tooly"> block on the hub that was left over from the old fallback SVG — no references to it anywhere, just ~700 bytes of extra markup on every homepage load.
April 20, 2026
v7.28 · removed the wardrobe
The outfit picker is gone.
After multiple iterations trying to make the 31-outfit mascot picker render cleanly, the system was creating more friction than joy. The /mascot/ page, the toggle button, the popover, the two-layer crossfade, and the per-variant position-normalization math — all removed. Tooly is back to a single plain expression on the homepage. Four of the thirty variant PNGs have been deleted; only the base is kept as the hero image. If the feature comes back later, it comes back simpler.
April 20, 2026
v7.27.8 · mascot shuffle eliminated
The mascot no longer shuffles between outfits.
Pixel analysis revealed the PNG assets had the mascot face positioned at different Y coordinates across variants (50px spread) and X coordinates (33px spread). When swapping outfits, the face literally jumped up/down and side-to-side — the "shuffle" effect. Fixed by computing a per-variant translate offset from the analysis and applying it via CSS transform. Every face now lands at the exact same screen position regardless of outfit. Also found and cleaned three PNGs that had stray blue/green pixels from generation artifacts (aviator-goggles had 1,012 rogue pixels, beanie had 812, chef-hat had 106). Rebuilt both pages around a two-layer crossfade system where the new variant preloads into a hidden layer, then opacity-swaps with the visible one — no flash, no gap, no composition shift. Removed all continuous animations in favor of subtle hover-only interaction (gentle lift + glow intensify on mouseover). Mascots now stay perfectly still unless you engage with them.
April 20, 2026
v7.27.5 · mascot page polish
Cleaner everything on /mascot/.
Removed the heavy polaroid frame around the mascot — now it floats on a soft amber glow with a subtle ground shadow. Variant grid cells are transparent by default with amber hover/active states instead of feeling caged. "Currently: X" is now an elegant pill chip. Fixed sticky header overlapping the page deck text. Added scroll-padding-top so anchor navigation lands correctly. Mascot image bumped to 280×280 with internal padding so variants with extending features (santa hat, scarf, antenna) no longer get cropped. Crossfade transition between outfits matches the homepage pattern. Added aria-live to the status label so screen readers announce outfit changes.
April 20, 2026
v7.27.4 · hero unification
Homepage mascot now matches /mascot/ quality.
The homepage was using a basic inline SVG (simple shapes, dot eyes) while /mascot/ used the polished PNG variants. Now both use the same high-quality original.png as the default. Wrapped the mascot in a fixed-size stage so the OUTFIT toggle anchors to the mascot's corner instead of floating off in the wide hero column. Added crossfade transition and dynamic caption (e.g. "← Tooly in sunglasses"). Touch target bumped to 36px.
April 20, 2026
v7.27.3 · bulletproof
Eliminated the broken-image render for good.
Turns out <img hidden> with author CSS display: block can still paint the alt text and broken-icon fallback in some Chromium variants — regardless of [hidden] selectors. The fix: don't have the <img> in the DOM at all until JavaScript needs it. The overlay image is now created via document.createElement only when an outfit is picked, and removed on reset. Structurally impossible to misrender.
April 20, 2026
v7.27.2 · touch fixes
Toggle now visible on mobile.
The OUTFIT button was hidden until :hover or :focus-within — but touch devices have no hover state, so it was effectively invisible. Added @media (hover: none), (pointer: coarse) to force-show on touch. Added explicit width/height to the hero SVG to prevent a layout collapse. Centered the mobile popover with viewport-bounded width.
April 20, 2026
v7.27 · Tooly gets a wardrobe
Thirty-one outfits. One toggle.
Fifth release. The mascot system shipped. Tooly now has 31 outfit variants — astronaut, wizard, pirate, hard hat, sunglasses, headphones, and more. Hover the homepage mascot, click the new menu pill, pick an outfit. Your choice persists across visits.
Shipped in this release:
- New
/mascot/ page — full picker with all 31 outfits, random-outfit button, copy-share-link with deep-link via URL hash (visit /mascot/#pirate to land on pirate Tooly).
- Homepage hero mascot toggle — discreet menu button on hover/focus opens an 8-outfit quick-pick popover. Click outside or press Esc to close. Selection saved in localStorage.
- 31 PNG variants in
/mascot-variants/, each ~40-65 KB. Cached aggressively via _headers (immutable, 1-year max-age).
- Inline SVG mascot preserved as default — first paint is unchanged. The image overlay only loads when an outfit is picked.
- Full keyboard accessibility — toggle is focusable, popover has
role="menu", items have role="menuitem" and aria-pressed states. Respects prefers-reduced-motion.
No tracking added. The outfit choice is a single localStorage key (tooly-outfit) on your device. Nothing leaves your browser.
April 20, 2026
v7.26 · Expansion II
Six more tools, same discipline.
Fourth release. The workshop now holds seventeen tools. Every one still runs in the browser. No uploads, no signup, no tracking. Three essays from the last cycle already went up — this release is the tools that pair with them.
Shipped in this release:
- Paperwork — stitch images into PDFs, slice PDFs back into images, reorder pages. 50 MB cap, pdf-lib + pdf.js loaded on demand. Declines to convert Word docs and says why.
- JSON Repair — paste broken JSON, get conservative fixes back. Trailing commas, unquoted keys, Python literals, truncated payloads. Every change is logged; risky guesses are refused.
- Regex Generator — describe a pattern in English, draft a regex. On-device AI via Chrome's built-in Prompt API with a WebGPU fallback. Silent fallback on unsupported hardware.
- Cron Explainer — paste any cron expression, get the next five trigger times. Twelve timezones, full crontab syntax (/, -, comma), copy-to-clipboard.
- JWT Decoder — paste a token, see header + payload + signature. Live countdown on exp claims. Flags alg=none and other security footguns. Token never leaves the tab.
- PDF Compressor — shrink PDFs by re-encoding embedded images. Quality slider, DPI target, settings persisted across visits via localStorage.
Still zero servers. The Regex Generator uses the browser's built-in Prompt API (Chrome 140+) or falls back to Transformers.js + WebGPU — no API calls, no inference servers. Paperwork and PDF Compressor use pdf-lib/pdf.js loaded from a CDN on first use; JWT decoding is fully inline.
April 19, 2026
Commitment
A page about money.
There's now a Support page. It does two things: it gives you a place to help if you want to, and it states — in writing, in advance — what monetization paths are on the table and what's off the table permanently.
On the table: EthicalAds when the site hits ~50,000 pageviews a month (text-only, no cookies, no tracking). Buy Me a Coffee and GitHub Sponsors once the accounts finish verification. A native desktop app, eventually, one-time purchase. Off the table, permanently: subscriptions to the existing tools, signup walls, Google Analytics, Facebook pixels, data sales, or selling to a surveillance-economy buyer.
It's easier to make these commitments now, before there's any money on the line. That's why the page exists before the money does.
April 19, 2026
Open source
Format Flipper is now open source.
The full source of Format Flipper is now published on GitHub at github.com/J1E2M3/tooly-mctoolface, under the MIT license. Includes the complete tool, a documented architecture (the star-topology design that makes 9 formats × 72 directions tractable), passing round-trip tests, and a contributor guide for adding a tenth format.
This is the first of what will be several tools extracted from the workshop over the coming months. The commitment: if a tool graduates to having its own repo, it stays open-licensed. If the site ever goes away, the tools survive.
April 19, 2026
Article
New article: why your SVGs are 3× too big.
A guide to the 50-80% bloat that comes with most SVG exports from Figma, Illustrator, and Inkscape — where it comes from, which parts are safe to strip, and which parts will quietly break things. Pairs with SVG Slimmer. The workshop now holds eleven tools and ten articles.
Also a small infrastructure improvement: the feed generator now runs automatically on every release, so the Atom feed is always current without manual regeneration.
April 19, 2026
Update
An Atom feed.
The blog now has a proper Atom feed, autodiscoverable from every page via <link rel="alternate">. Subscribe with any feed reader — NetNewsWire, Feedly, Miniflux, Reeder, whatever — and new articles will appear without you having to check back. We won't email you. We won't ask for your address. The feed is the whole mechanism.
Also a small cleanup: the JSON vs YAML vs TOML changelog entry said "eight articles" when it should have said "nine" (the client-side essay had already shipped). Fixed.
April 19, 2026
Article
New essay: what "client-side" actually means.
The word "client-side" appears on every "free online tool" landing page, and it can mean five different things — three of which still leak your data. This piece breaks them apart honestly, admits where Tooly McToolface still has one small leak (Google Fonts on page load), and ends with a 90-second DevTools procedure to verify any tool's claim for yourself — including ours.
Nine articles now. One of them assumes you won't take its word for anything.
April 19, 2026
Article
New article: JSON vs YAML vs TOML.
A practical guide to picking the right config format, written as a companion to Format Flipper. Covers origin stories, when each format wins, a 10-row decision matrix, and five gotchas that come up regularly enough to be worth knowing in advance — including the YAML Norway problem, JSON's silent 253 integer clamp, and why TOML datetimes are actually a first-class type.
The workshop now holds eleven tools and nine articles. Also fixed a stale FAQ on Format Flipper that still said TOML wasn't supported (it shipped in v1.2).
April 19, 2026
Update
A benchmarks page. Plus a site-wide quality pass.
Two things shipped today. First, a new benchmarks page that measures the workshop honestly — page weight, bytes uploaded (zero), task latency, and the three places where Tooly is measurably slower than the best paid alternative. Includes a live benchmark that runs in your browser when you load the page, so the numbers come from your actual CPU instead of a pitch deck.
Second, a site-wide polish pass based on a ten-agent audit: BreadcrumbList structured data on every tool page, fuller Schema.org on the hub (WebSite + ItemList of all 11 tools) and blog index (Blog with all 7 posts), async font loading on all 23 pages (meaningfully faster first paint), aria-label on previously-unlabeled buttons and inputs, unified image-error messages across three tools, and AVIF feature-detection in Image Smusher so the AVIF button auto-disables in browsers that can't encode it.
No new tools, no visual changes. Quieter release — the kind that doesn't make for exciting changelog copy but that matters if you land here via Google in six months.
April 18, 2026
v1.2 · Timestamp & TOML
One new tool, one format, a few quality-of-life wins.
Third release. Adds a new tool and extends two existing ones. The toolshed now holds eleven tools. Every tool still runs entirely in the browser — no uploads, no servers, no tracking beyond the privacy-friendly aggregate pageviews added in v1.1.1.
Shipped in this release:
- Timestamp Converter — paste any Unix epoch, ISO 8601, RFC 2822, or human-readable date; get every other representation at once. Timezone-aware, DST-correct, with math and diff panels.
- Format Flipper now speaks TOML, extending coverage from 8 formats to 9 and conversion directions from 56 to 72.
- JSON Fixer accepts JSONC — JSON with
// and /* */ comments plus trailing commas (tsconfig.json, VS Code settings).
- Image Smusher gains AVIF output alongside PNG, JPG, and WebP.
- Favicon Foundry accepts SVG input and rasterizes down to the full favicon bundle.
- New article: ISO 8601 vs Unix epoch vs human-readable: when to use which, paired with the Timestamp Converter.
Eleven tools, seven articles. Still one person, still no framework, still no build step.
April 18, 2026
Update
Privacy-friendly analytics added.
Installed Plausible to count aggregate pageviews. No cookies, no IP tracking, no cross-site tracking, no personal data collected — just "this page was viewed N times this week." The privacy page was updated first, as promised, before anything was deployed. Plausible's full data policy is at plausible.io/privacy-focused-web-analytics if you want the details.
April 18, 2026
v1.1 · Expansion
Five more tools, three more articles.
Second release, doubling the workshop. Five new tools shipped, three new articles published. The toolshed now holds ten tools across image, dev, design, and generation categories. Every tool runs entirely in the browser — no uploads, no servers, no tracking, same as v1.0.
Shipped in this release:
- Regex Rambler — live regex tester with plain-English explainer
- QR Maker — QR generator with 8 data types, color customization, and logo overlay
- Favicon Foundry — drop one image, get the full favicon bundle (6 sizes + multi-res ICO + SVG)
- Diff Checker — LCS-based text diff with word-level highlights and unified patch export
- Format Flipper — bidirectional conversion between 8 data formats (JSON, YAML, CSV, TSV, XML, Markdown, HTML, SQL)
- Three new articles — practical regex cheatsheet, favicon guide, and why QR codes aren't dead
- Hub page refreshed with all 10 tool cards, cross-linked footers across every page
56 bidirectional format directions in Format Flipper alone. Several of the tools ship with libraries bundled inline (js-yaml, a QR encoder, custom ZIP/ICO writers) so they work without any external network requests after the page loads.
April 18, 2026
Tool
Format Flipper shipped.
Convert between JSON, YAML, CSV, TSV, XML, Markdown tables, HTML tables, and SQL INSERT statements. Any of the 56 bidirectional directions, with proper escape handling for each format (CSV quoting, SQL apostrophe doubling, XML entity escapes). Type coercion, nested-data handling, one-click swap.
js-yaml 4.1.1 bundled inline (~39 KB) so YAML parsing works offline. Other formats are native JS. Per-format options appear contextually — table name for SQL, root tag for XML, indent depth for JSON/YAML. Open it.
April 18, 2026
Tool
Diff Checker shipped.
Paste two texts, see what changed. LCS-based line diff with a second pass for word-level highlighting within changed lines. Split or unified view, ignore-whitespace and ignore-case toggles, whitespace visualization, 2,000-line cap for performance.
Export as a standard unified-diff patch compatible with git apply and patch. 16 ms for 500×500 lines in testing. Four sample data sets (code, prose, config, JSON) for quick exploration. Open it.
April 18, 2026
Tool
Favicon Foundry shipped.
Drop one image, get the full favicon bundle: 16, 32, 48, 180, 192, 512 px PNGs, a multi-resolution .ico, and favicon.svg passthrough when the source is vector. Plus the ready-to-paste HTML <link> snippet. Download individually or as a ZIP bundle.
Self-contained — no external dependencies. Inline CRC-32, stored-mode ZIP writer, and ICO container writer were built from scratch and verified against unzip and file(1). Your logo never leaves your device. Open it.
April 18, 2026
Tool
QR Maker shipped.
Eight data types: URL, text, WiFi credentials, email, SMS, phone, vCard contact, and location coordinates. Full color customization, quiet-zone margin slider, all four error-correction levels (L/M/Q/H). Drop a logo in the center, with optional white padding for contrast. Download as PNG (1200 px) or crisp SVG, or copy as PNG to clipboard.
The QR encoder is Kazuhiko Arase's reference library (MIT, ~29 KB), bundled inline so the tool works fully offline. Your WiFi password never leaves your browser. Open it.
April 18, 2026
Tool
Regex Rambler shipped.
Live regex tester with a plain-English explainer. Type a pattern, see matches highlighted as you type, and get a token-by-token breakdown of what every piece actually does — anchors, escapes, character classes, quantifiers, named captures, lookaheads, lookbehinds. Also supports find-and-replace with live preview.
Eight sample patterns included (email, URL, phone, IPv4, hex color, ISO date, quoted string, capitalized word). 100 ms debounce plus a 250 ms catastrophic-backtracking guard, capped at 5,000 matches to keep the browser responsive. Open it.
April 18, 2026
Write
Article: QR codes aren't dead.
After years of mockery, QR codes quietly became useful again. What changed (native camera detection), what they actually solve well (WiFi sharing, event tickets, payments in China, context-specific print-to-web), and what they're still wrong for (anything you can type, moving objects, tracking without disclosure). Read it.
April 18, 2026
Write
Article: the favicon guide.
Why modern sites need six favicon sizes plus a multi-res .ico and an SVG. What each file does (16 for tabs, 180 for iOS, 192 for Android, 512 for PWAs), the HTML snippet that ties them together, and notes on designing a logo that survives being scaled to 16 pixels. Read it.
April 18, 2026
Write
Article: practical regex cheatsheet.
The regex tokens, quantifiers, anchors, groups, and lookarounds you actually reach for — in the order you reach for them, with notes on the ones that trip people up. Plus a small library of copy-paste patterns (email, URL, IPv4, ISO date, hex color). Read it.
April 18, 2026
v1.0 · Launch
Tooly McToolface is alive.
After a weekend of building, the site is live at toolymctoolface.com. Five tools, three articles, a mascot, and an opinion about how the web should work.
Built solo, shipped fast, on a budget of $11.18 (the price of the domain). No VC money, no co-founders, no roadmap deck. Just tools that work.
Shipped with:
- Image Smusher — batch image compression
- HEIC Unheicer — iPhone HEIC photo converter
- JSON Fixer — formatter, validator, tree viewer
- Color Grabber — extract palettes from images
- SVG Shrinker — in-browser SVG optimizer
- Three SEO articles — image compression, HEIC, and the "free isn't free" essay
- Full design system (Fraunces + Inter + JetBrains Mono, amber accent, warm dark theme)
- Open Graph preview images, favicons, sitemap, robots.txt
- Client-side processing for every tool — nothing leaves your browser
April 18, 2026
Tool
SVG Shrinker shipped.
A minimal, in-browser SVG optimizer. Strips Inkscape/Illustrator/Figma metadata, removes comments and default attributes, rounds numeric precision. Side-by-side visual preview confirms the optimized output looks identical to the original. Typically shaves 40–70% off file size for SVGs exported from design tools.
No libraries, no WebAssembly — just a few hundred lines of regex and DOM work. Open it.
April 18, 2026
Tool
Color Grabber shipped.
Extract color palettes from any image using median-cut quantization. Pick 5, 8, or 12 dominant colors, then export to CSS variables, SCSS, Tailwind config, Figma tokens, JSON, or plain hex. Download a branded palette PNG for sharing.
Entire algorithm runs client-side. Your image never leaves your browser. Open it.
April 18, 2026
Writing
Third blog post: why "free" isn't free.
A ~2,000-word essay on the five hidden costs of "free" online tools — data harvesting, attention arbitrage, upsell funnels, watermarking, and account lock-in — and how to spot each before you upload anything sensitive. Reinforces Tooly's trust positioning.
Read it.
April 18, 2026
Tool
JSON Fixer shipped.
A JSON formatter that's actually good. Format, minify, sort keys, validate. Tree view with collapsible nodes and item counts. Syntax-colored text view. Error messages that show the exact line and column of syntax errors (not just "Unexpected token at position 42").
Runs entirely in the browser. Samples built in for quick testing. Cmd+Enter to format. Open it.
April 18, 2026
Writing
Second blog post: the iPhone HEIC problem.
A ~1,800-word guide to Apple's HEIC photo format — what it is, why Apple uses it, the genuine compatibility problem, and three ways to stop caring about it. Targets the high-volume "heic to jpg" search query. Natural companion piece to the image compression guide.
Read it.
April 18, 2026
Tool
HEIC Unheicer shipped.
Apple's HEIC format is technically better than JPG but universally annoying when you need to share photos outside the Apple ecosystem. This tool converts HEIC to JPG, PNG, or WebP in your browser using a WebAssembly-compiled decoder.
Supports batch conversion, quality control, and format choice. Open it.
April 18, 2026
Tool
Image Smusher shipped.
The first tool. Batch-compresses PNG, JPG, and WebP images entirely in-browser using the Canvas API. Handles up to 50 files at once. Quality slider, optional resize, EXIF stripping, batch ZIP download.
Built because I was tired of TinyPNG's 20-file limit and Squoosh's one-at-a-time flow. Open it.
April 18, 2026
Writing
First blog post: image compression guide.
A ~2,100-word practical reference for developers and designers. Covers JPG vs PNG vs WebP vs AVIF, quality settings, batch workflows, EXIF stripping, and the 15-minute checklist that cuts most sites' image weight by 60–80%.
Read it.
April 18, 2026
Branding
The name, explained.
After briefly considering "Workbench" (too generic, SEO-saturated), "Smushr," "Blorp," and "ShrinkRay," we landed on Tooly McToolface — a Boaty McBoatface reference that refused to stop being funny. The name is a joke. The tools are not.