For years, I used a Chrome extension called Neat URL. It ran quietly in the background, stripping tracking parameters from URLs before I ever saw them. You could specify your own parameters to block, or set up a domain blacklist. It made for clean, private browsing.
Then one day, it was deactivated from the Chrome Web Store — just like that:
I emailed the original developer to ask if it would be coming back. Never heard back. I waited a few days. Still nothing.
Eventually, I realized I’d have to rebuild it myself. Not because I wanted to or due to a lack of alternatives. Because I couldn’t browse without it, and wanted something I could maintain myself.
How the Neat URL Chrome extension actually works
When you click a link from a newsletter, ad, or social media post, it often comes with a bunch of cruft in the URL. Things like utm_source
, utm_medium
, fbclid
, gclid
, and dozens more. Most of them exist to track where you came from and what you clicked.
These parameters aren’t always bad, but they’re rarely useful to the end user. And when they pile up, URLs get messy. Worse, they can persist across browsing sessions and leak information across sites.
Neat URL’s job was simple: clean those out automatically. The original extension tried to intercept the request before the page loaded, removed any known tracking parameters, and redirected you to the clean version of the URL. It didn’t always work — sometimes you had to reload the page again for it to strip out the faff, by which time the website and/or your browser had already stored/accessed the data.
Going modern, getting stuck
When I started rebuilding it, I went with the stack I saw everywhere: Vite, React, and Tailwind. The dev community had pretty much standardized on those tools, and I figured it would be the fastest path to something that looked good.
It didn’t take long for the friction to show up. Vite’s build system clashed with PostCSS. Tailwind required a very specific setup. The .cjs vs .mjs situation threw strange errors. And Chrome didn’t love loading dev server files either.
I was spending hours debugging things that had nothing to do with what I wanted to build. I wasn’t working on the core logic — merely on the scaffolding. The experience started to feel less like coding and more like plumbing. All these layers made me question whether the tools were helping or just getting in the way.
Starting over the simple way
Eventually I gave up. Deleted the Vite build. Wiped out the Tailwind config. Started over with a blank folder and a few files: background.js, options.html, options.js, manifest.json, and a stylesheet. I later added a README and basic privacy policy.
This time I used the Chrome APIs directly. declarativeNetRequest
to intercept and redirect outgoing requests. chrome.storage
to store user preferences. A basic textarea
to let users list their own blocked parameters. No frameworks. No build tools. No usage tracking.
And it worked.
What AI made possible
Here’s the part I didn’t expect. Even though I kept running into errors, I wasn’t lost. Every time I hit a wall, I asked AI for help. When something didn’t make sense, I asked for an explanation. When I needed to scaffold a file or troubleshoot a Chrome API, I got a clear answer and a working example.
It wasn’t just code completion. It was real-time technical support, with context. AI didn’t just tell me what to do, it showed me why it worked—and that changed everything.
If I had tried this five years ago, I probably—no, definitely—would’ve abandoned it halfway through. Now, I was shipping a working Chrome extension in a weekend. Forget a leap in productivity—it’s a shift in who gets to build things.
From user to builder
When the original Neat URL disappeared, I was just a user who missed it. But by the end of this project, I was the maintainer of its spiritual successor.
That’s a powerful shift, and one I think more people will experience in the years ahead. The line between users and builders is blurring. Not because everyone learns to code, but because the tools to create are getting easier to access.
You don’t need to be a JavaScript expert to write a Chrome extension. You don’t need a design degree to build a clean UI. You just need a clear goal and the willingness to keep asking questions until the thing works.
Where it stands now
The repo is public. The extension is functional. It automatically strips tracking parameters and supports custom user rules. The settings page is minimal, but it does the job. I’ve submitted it to the Chrome Web Store and await the next step.
I may add a toolbar badge in future, or a counter for how many URLs were cleaned. But I don’t want to overbuild it. The best version of this extension disappears into the background. Like Jason Cohen of A Smart Bear says, make it simple, lovable, and complete.
That’s what I was trying to recreate: quiet utility. Something small and focused and useful. Here’s to more.