About

20 tools, local data

This is a shelf of small utilities I wanted for myself. They are free, they need no account, and your work is processed in your browser. Storage and optional downloads have a few limits worth understanding before you put real work into one of them.

Where your data actually lives

Apps use IndexedDB or localStorage for saved work and preferences; some file converters keep their inputs only in memory. Browser storage is scoped to this domain, in this browser, on this device. There is no copy anywhere else, because there is nowhere else.

What follows from that:

  • Opening the same app in a different browser shows an empty start. Nothing is missing, it is simply somewhere else.
  • Private or incognito windows usually discard everything when you close them.
  • Clearing site data, cookies, or "browsing data" in your browser settings will delete what these apps have stored, and there is no way for me to recover it.
  • Nobody, me included, can see what you write here.

So export things you care about

Workspace apps offer JSON export and import. File tools download their results in formats such as PDF, WAV, SVG or video. Limelight can save edits alone or a project with its recordings. Keep a downloaded copy of work you want to preserve.

Import asks whether you want to merge, which keeps what is already there and layers the file on top, or replace, which clears first. Merging resolves conflicts by keeping whichever copy was edited most recently. Both refuse a file that came from a different app. Invalid records may be repaired or dropped; an unreadable workspace is refused.

Use it to move between browsers, to back up before you experiment, or simply to hold your own copy.

The apps

Warren
A writing workspace built out of blocks. Pages nest inside pages without a depth limit, blocks respond to markdown shortcuts as you type, and a slash menu turns any line into a heading, list, to-do, quote, callout, or code block.
Laneway
Boards, columns, and cards, with the parts a solo project actually needs: work-in-progress limits that warn when a lane is overloaded, checklists that roll up into a progress bar, due dates that surface before they bite, and an archive so finished work leaves the board without leaving your history.
Jotterbug
Quick notes on a coloured board. Type a thought, pin it, tag it, or flip it into a checklist. Search narrows as you type, pinned notes float to the top, and anything you delete waits in the trash long enough to change your mind.
Tessera
Nine kinds of payload, from a plain link to a Wi-Fi network or a contact card, encoded to the ISO standard by an encoder written for this site. It reads codes too: point the camera at one, or drop in a photograph, and it will straighten the perspective, repair the damaged parts, and tell you what it says before you follow it anywhere.
Rostrum
Slides made of blocks, with a presenter view in a second window carrying your notes, a timer and the next slide. Import from Markdown, export to Markdown, a PDF, or one self-contained HTML file that runs on any machine with no network at all.
Quire
Merge, split, reorder, rotate and extract PDF pages entirely on your own machine. It parses the file, moves the objects, and writes a new one, all in the tab you are looking at.
Fabler
Describe a schema and get realistic rows out of it. Everything is generated from a seed, so the same schema produces the same data every run, and foreign keys draw only from ids that actually exist in the table they point at.
Decanter
Convert between JSON, NDJSON, CSV, YAML and TOML, with every parser written from scratch so none of it leaves your machine. Then the parts that make it more than a converter: flatten and unflatten nesting, query by path, and generate a SQL, Iceberg or JSON Schema from whatever you pasted.
Loupe
Resize, crop, rotate, convert and compress images entirely on your own machine. It reads the EXIF metadata first and shows you what is in there, including the location tags, so you can see exactly what re-encoding strips out.
Stint
A time tracker sized for one person. Run a timer or enter time after the fact, assign it to a project with a rate, and get totals by day, week and project. Rounding is applied when the number is reported, so the entry keeps what really happened.
Rote
Spaced repetition built on SM-2, the algorithm behind most flashcard software. Every answer adjusts the card’s ease, which decides how fast its interval grows, so material you find hard comes back sooner and material you know gets out of your way.
Sift
A regex workbench with live match highlighting, capture groups broken out one by one, a replacement preview, and a plain English explanation of what your pattern actually says. Matching runs in a worker, so a pattern that backtracks badly gets stopped rather than freezing the page.
Foolscap
Point the camera at a page. Foolscap finds its edges, corrects the perspective so the page comes out square rather than trapezoidal, flattens the uneven lighting, and stacks the results into a PDF. Contracts, receipts, and passports are exactly the paperwork you should not be uploading to a stranger, so none of it leaves the browser.
Cadence
Record from the microphone or drop in a file, then trim, cut, fade, normalise, reverse, resample, or join clips end to end with a crossfade. The WAV writer is part of the app, so what comes out is exact rather than whatever a server decided to give back.
Quarry
Drop in a CSV, a JSON file, or a Parquet file and query it with DuckDB, compiled to WebAssembly and running in this tab. Joins, window functions, common table expressions, and the whole SQL surface, over files that never leave your machine. Results come back as CSV, JSON, Markdown, or Parquet.
Ordinate
Drop in CSV, tab separated text from a spreadsheet, or JSON, and get a chart back. Eight chart types, axis ticks that land on numbers people recognise, five palettes, and an SVG that opens anywhere because every colour and every coordinate is written into the file.
Limelight
Capture a window, then let it be polished: inset on a coloured field with rounded corners and a shadow, and zoomed in on whatever is actually happening. A browser is never told where your pointer is over another window, so the zoom follows where the picture changed instead, and the app says which of the two it is using.
Cutaway
Set an in point and an out point, choose a size, and get back a WebM, an animated GIF, or every frame as a PNG. The container is written here, because WebCodecs will encode frames but hands them back with nothing around them, and the browser offers no way to write one.
Tally
Build an invoice and watch the finished PDF redraw beside you as you type. Money is held in whole cents so the arithmetic is exact, tax can differ line by line, discounts are shared across rates in proportion, and the sender details carry over to the next invoice you start.
Reckoner
Type whole expressions rather than pressing one key at a time. Parentheses, powers, factorials, and thirty functions all parse properly, every result lands on a tape you can scroll back through and reuse, and four memory registers hold whatever you need to keep.

Installing it

The site is a progressive web app, so your browser can install it to your home screen or dock and open it in its own window. On Android and desktop Chrome an Installbutton appears in the header when the browser offers it. On an iPhone, use Share, thenAdd to Home Screen.

After the offline cache finishes installing, the core pages and tools work without a connection. Quarry’s SQL engine and Limelight’s optional transcription downloads must be loaded online before use; their offline availability depends on the browser cache. An installed copy shares its storage with the same browser, so what you write in one appears in the other.

How they are built

Static HTML and CSS with plain TypeScript, generated by Astro. No UI framework, no analytics, and no externally loaded fonts. Quarry uses self-hosted DuckDB. Limelight’s optional transcription downloads Transformers.js from jsDelivr and speech models from Hugging Face after you request it; audio processing happens locally. The logic that matters, the expression parser in Reckoner, the page tree in Warren, the card movement in Laneway, and the QR encoder in Tessera, is covered by a test suite that runs on every change.

Tessera's QR encoder is written from scratch rather than pulled from a library: it implements the specification's numeric, alphanumeric, and byte modes across all forty versions and four error correction levels, with Reed-Solomon over GF(2^8) and all eight data masks scored by the four penalty rules. Its tests read the finished matrix back and check that what comes out is what went in.

Bugs and suggestions

The source is on GitHub. If something is broken, an issue there is the surest way to reach me. I amAlex Merced, and I write about data and AI in rather more depth elsewhere.