alexmerced.app
Thirteen small tools that keep your data on your machine.
A shelf of things I wanted and could not find in a shape I liked. Each one runs entirely in your browser. Nothing is uploaded, nothing needs an account, and every app writes its whole dataset to a file whenever you ask.
- No accountOpen the page and start. There is nothing to sign up for.
- No serverYour work is stored in this browser, in IndexedDB and localStorage.
- No lock-inExport writes a plain JSON file. Import reads it back, anywhere.
- No connectionInstall it to your phone or desktop and it keeps working with the network off.
- No dependenciesThe QR encoder, the PDF reader and writer, and every format parser are written here from scratch.
Writing and notes
Places to put words, from a passing thought to a nested workspace.
-
Warren
Nested pages that go as deep as you do
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.
- Unlimited page nesting with a collapsible tree
- Ten block types with markdown shortcuts and a slash menu
- Full text search across every page
- Trash with restore, and Markdown or JSON export
Open Warren → IndexedDB and localStorage
-
Jotterbug
Catch it before it gets away
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.
- Eight note colours, pinning, and freeform labels
- Flip any note between prose and a checklist
- Live search across titles, bodies, and checklist items
- Archive and trash, both reversible
Open Jotterbug → IndexedDB and localStorage
Planning and time
What you are doing, what is left, and where the hours went.
-
Laneway
A kanban board sized for one person
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.
- Several boards, each with its own columns and labels
- Drag and drop, plus full keyboard card movement
- Work-in-progress limits, checklists, and due dates
- Filter by text, label, or due window, and archive finished cards
Open Laneway → IndexedDB and localStorage
-
Stint
Where the hours actually went
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.
- A running timer, or type a duration like 1:30 or 90m
- Projects with clients, colours and hourly rates
- Rounding to the nearest, up or down, in six or fifteen minute steps
- Day and week views, totals per project, and CSV export for invoicing
Open Stint → IndexedDB and localStorage
-
Rote
Flashcards that know when to ask again
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.
- SM-2 scheduling with ease, intervals, and lapse tracking
- Review by keyboard, with a fortnight forecast of what is coming
- Retention and average ease per deck
- CSV import and export, so a spreadsheet is enough to start
Open Rote → IndexedDB and localStorage
Data tools
Reshape, generate and interrogate structured data without uploading it.
-
Fabler
Believable data, reproducible every time
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.
- Nearly forty field types, from names and addresses to IPs and timestamps
- Seeded generation, so a demo can be reproduced exactly
- Foreign keys across tables that keep referential integrity
- Output as JSON, NDJSON, CSV, SQL inserts, or a CREATE TABLE script
Open Fabler → localStorage
-
Decanter
Pour data from one shape into another
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.
- Five formats, converted in any direction, with the input format detected
- Flatten and unflatten nesting, and query with a JSONPath-style expression
- Schema inference reporting types, nullability and how often a field appears
- Generates SQL DDL, an Iceberg schema, or a JSON Schema
Open Decanter → localStorage
Making files
Produce something to hand over: an image, a PDF, a deck, a code.
-
Tessera
QR codes for anything you need to hand over
A QR generator that knows the formats. Build a link, a wifi handshake, a contact card, an email, a text message, a calendar event, a phone number, or a map pin, then tune the error correction, colours, quiet zone, and size before saving it as PNG or SVG. Codes you keep are stored on your machine.
- Nine payload builders including wifi, vCard, and calendar events
- A QR encoder written from scratch, versions 1 to 40
- Error correction, module colours, quiet zone, and scale controls
- PNG and SVG download, plus a saved library of your codes
Open Tessera → IndexedDB and localStorage
-
Rostrum
Build the deck, then stand behind it
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.
- Six themes, five layouts, and eight kinds of block
- Presenter view with speaker notes, a timer, and the next slide
- Markdown in and out, with three dashes between slides
- Export a PDF, or one HTML file that needs nothing else to run
Open Rostrum → IndexedDB and localStorage
-
Quire
Rearrange PDFs without handing them to anyone
Merge, split, reorder, rotate and extract PDF pages entirely on your own machine. Every other tool that does this uploads your documents to a server first. This one parses the file, moves the objects, and writes a new one, all in the tab you are looking at.
- Merge several files, reorder by dragging, rotate and delete pages
- Split into chunks of any size, delivered as a ZIP
- Turn images into PDF pages
- Preview through your browser’s own viewer, so nothing extra loads
Open Quire → none
-
Loupe
Resize and convert without uploading anything
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.
- Resize to fit, to an exact size, or by percentage
- Convert between JPEG, PNG and WebP with a quality control
- Reads EXIF and flags the tags that identify you or a place
- Batch process and save everything as one ZIP
Open Loupe → localStorage
Working things out
Numbers and patterns.
-
Sift
Regular expressions, explained as you build them
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.
- Live highlighting with numbered and named capture groups
- A replacement preview that shows the real result
- Plain English explanation of every piece of the pattern
- Ten worked example patterns, and your own saved library
Open Sift → IndexedDB and localStorage
-
Reckoner
A calculator that shows its working
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.
- A real expression parser: precedence, parentheses, unary signs
- Thirty functions, constants, degrees or radians
- A running tape you can click to reuse any earlier line
- Memory registers, ans, and full keyboard control
Open Reckoner → localStorage
How the storage works
Records go into IndexedDB, the browser's own database. Interface preferences, the sort of thing that would be annoying rather than painful to lose, go into localStorage. Both are tied to this browser on this device, so what you see in one browser will not appear in another.
That is the trade. There is no sync because there is no server, and there is no server because that is the point. What there is instead is a export button in every app.
Moving your data
Every app writes the same kind of file: plain JSON, readable in any text editor, with a small header saying which app made it and when. Import reads that file back, and asks whether to merge it with what is already there or replace everything.
Use it to move between browsers, to keep a backup before you experiment, or to keep your own copy of everything you have written here. The files are yours and they are not going anywhere.