alexmerced.app
20 small tools that keep your data on your machine.
Write notes, organize projects, work with data, and edit files in your browser. Nothing is uploaded, nothing needs an account, and you can export saved work or download the files you make.
- 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.
- Portable filesExport your workspace or download the files you make.
- Offline toolsCore tools work after caching. SQL and optional transcription need an initial download.
- Local processingYour files are processed in this browser. Quarry loads its SQL engine from this site when you ask.
Open a file
Choose a file to see compatible tools. Your file stays in this browser.
Try an editable example or back up your work.
Writing and notes
Places to put words, from a passing thought to a nested workspace.
Warren
Nested notes and pages
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
Quick notes and checklists
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
Generate sample data from a seed
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
Convert and reshape structured data
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
Quarry
Real SQL against your own files, in the tab
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.
- DuckDB in WebAssembly, served from this site rather than a CDN
- Reads CSV, TSV, JSON, newline JSON, Parquet, and Arrow
- Saved queries, a schema browser, and results as CSV, JSON, Markdown, or Parquet
- The engine is fetched only when you ask for it, so no other page pays for it
Open Quarry →IndexedDB and localStorage
Ordinate
Create charts from pasted data
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.
- Bars, grouped and stacked bars, lines, areas, scatter, pie, and doughnut
- Reads CSV, TSV, pipe or semicolon separated text, and JSON
- Axis ticks chosen to land on round numbers, not on arbitrary fractions
- Download as SVG, or as PNG at up to four times the size
Open Ordinate →IndexedDB and localStorage
Making files
Produce something to hand over: an image, a PDF, a deck, a code.
Tessera
Make QR codes, and read them back
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.
- Nine payload kinds, with the raw text always shown
- Reads codes from the camera, a file, or a pasted screenshot
- Corrects perspective and repairs damage with Reed-Solomon
- Says what a code contains, and refuses to make a risky payload clickable
Open Tessera →IndexedDB and localStorage
Rostrum
Create and present slides
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. It 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
Foolscap
Photograph a document, get a straight PDF
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.
- Finds the page edges, and says so plainly when it cannot
- Perspective correction by homography, so the page comes out square
- Local thresholding, which keeps the corner a single cutoff would lose
- Multi-page PDF at Letter, A4, Legal, or the size of the scan itself
Open Foolscap →IndexedDB and localStorage
Cadence
Record and edit audio without uploading it
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.
- Microphone recording, with the clip stored in this browser only
- Trim, cut, fade, normalise by peak or by average level, reverse, resample
- Join clips end to end with an equal power crossfade
- WAV out at 16, 24, or 32 bit float, written by the app itself
Open Cadence →IndexedDB and localStorage
Limelight
Record and edit screen videos
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.
- Screen, window, or this tab, with the microphone, system audio, and camera
- Automatic zoom, from your pointer when it can be known and from motion when it cannot
- A multi-take reel with thumbnails, names, drag ordering, splitting, trimming, and clip-level sound
- Backgrounds, padding, rounded corners, a shadow, and a camera bubble
- Rendered a frame at a time, so what comes out is exactly what the preview showed
Open Limelight →localStorage
Cutaway
Trim, shrink and convert video in the tab
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.
- Trim, resize, change the frame rate, change the speed, drop the audio
- Out as WebM with VP9, VP8 or AV1, as an animated GIF, or as still frames in a ZIP
- A WebM muxer and a GIF encoder, both written for this site
- Says plainly what this browser can and cannot encode, before you start
Open Cutaway →localStorage
Tally
Invoices that never leave your machine
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.
- A live PDF preview, drawn in the browser rather than on a server
- Per-line tax rates, with a tax summary that shows its working
- Percentage or fixed discounts, apportioned across rates before tax
- Duplicate an invoice, and export to PDF, CSV, or plain text
Open Tally →IndexedDB and 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
Saved work and preferences use IndexedDB or localStorage. Some file tools hold their inputs only in memory. 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. Export saved work and download finished files to keep your own copy.
Moving your data
Workspace exports use 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.