I keep ending up with the same problem: someone hands me an export — a CSV, an Excel sheet, a block of text copied out of Word — and before I can do anything useful with it, I have to clean it up. Ragged rows, mismatched delimiters, MSO junk riding along in pasted HTML, mojibake from a re-encoded file, JSON with a trailing comma some upstream tool left behind.
For a while I was doing this in throwaway Python scripts. Then I got tired of rewriting the same script for the fifth time and started building small, single-purpose HTML pages instead — each one doing exactly one cleanup job, running entirely in the browser, with nothing to install and nothing uploaded anywhere.
That collection is now Delint.
What it actually is
Delint is a flat site of standalone tools, each one a single HTML file. No build step, no backend, no account. You open a page, paste or drop a file in, and get clean output back — all processing happens client-side in JavaScript. The libraries doing the heavy lifting are CDN-hosted: PapaParse for CSV parsing, SheetJS for reading and writing Excel files.
Right now there are two groups of tools.
Text & data cleanup:
- Text cleaner — strips MSO conditional comments, inline font/color spans, and tracking markup out of text pasted from Word, Google Docs, or a webpage. Outputs plain text or Markdown.
- CSV cleaner — auto-detects the delimiter, repairs ragged rows, trims stray whitespace.
-
Encoding fixer — fixes mojibake and double-encoded UTF-8 (the
’andékind of mess) and normalizes Unicode. - JSON fixer — repairs the common syntax errors that break JSON.parse: trailing commas, single quotes, unquoted keys, comments.
- Mail checker — scans pasted email text or HTML for phishing red flags: urgency language, mismatched links, lookalike domains.
Spreadsheet tools:
- Sheet cleaner — strips hidden characters and unusual whitespace out of text cells in an Excel workbook.
- Column splitter — splits one column into several, by delimiter or fixed width.
- Split into tabs — groups rows by a column's value and fans them out into separate sheet tabs.
Full list is on the sitemap.
Why single-file, no-backend
The constraint wasn't arbitrary — it's what makes the tools trustworthy to use on real data. Membership exports, employer summaries, anything with personal information in it: I didn't want to be in the position of asking anyone to upload that to a server I run, even one I trust. If a tool is a static HTML file that does everything in the browser, there's nothing to upload and nothing to explain. You can even open the file locally with no internet connection and it still works.
It also keeps the maintenance cost near zero. There's no server to patch, no dependency graph to keep current beyond a handful of CDN script tags, no deploy pipeline beyond pushing to Vercel.
What I got wrong the first time
I built the first several tools as fully standalone pages — each one its own little island, no shared header, nav, or styling. That was fine until there were more than three or four of them and it became obvious a visitor had no way to discover the others. I ended up writing a retrofit script to go back through every tool and bolt on a shared shell (nav.js for the tool registry, a common stylesheet, consistent header/footer).
It worked, but it was a chore that didn't need to happen. The lesson that stuck: build the shared chrome first, even for tool #1, even when it feels premature. Retrofitting a dozen files is much more annoying than starting the pattern once.
The other decision I'd make again: nav.js is the single source of truth for the tool list. Early on I was tempted to keep a curated "featured tools" subset somewhere else — a sidebar, a homepage list — separate from the full registry. That's a dual-maintenance trap waiting to happen the moment you add a tool and forget to update the second list. Grouping the existing registry into sections turned out to be all the curation I actually needed.
What's next
Nine tools is where it stands today, not where it stops. More are coming — the registry in nav.js is built to make adding another single-file tool a small change, not a redesign, so new cleanup jobs get added as I run into them.
Try it
If you're regularly stuck cleaning up exports, pasted text, or spreadsheets by hand, Delint is free, has no account or tracking, and nothing you paste in ever leaves your browser. If there's a cleanup job you keep doing manually that isn't covered yet, get in touch — I'm always looking for the next tool to build, and I'm open to building one for your specific problem if it's a good fit.
Everything stays free either way, but if a tool saves you time and you want to chip in, that's appreciated too — it's optional, no paywall, no nagging.
Top comments (1)
I appreciate the “nothing leaves your browser” philosophy. For internal company data, customer exports, or anything containing personal information, reducing the trust surface is often more valuable than adding another feature. Simple architecture, better privacy.