Ken Lee.dev

Independent developer

Most extensions want to read every site you visit. Almost none of them need to.

That warning Chrome shows you, "read and change all your data on all websites," is the default because it's easier to build that way. Not because the tool requires it.

I'm Ken Lee. I build browser extensions, desktop apps and free web tools, and the rule I hold myself to is that a tool asks for the smallest amount of access it can actually function on.

Pick a shelf

Three kinds of things, plus a way to reach me.

There's also ToolBreezy, which is 300-odd small web tools I put out free. That one is already live.

The permission thing, in detail

A cookie editor does not need access to every website. It needs access to the site you opened it on, and that is a much smaller ask. Chrome has supported asking for that, at the moment you need it, for years now. Most cookie editors still request all sites at install time anyway, because one broad request is less work than handling the case where permission gets granted later.

So my cookie editor asks per site, when you open it. My video speed controller ships with exactly one permission, local storage for your saved speeds. The volume booster can hear the tab you point it at and nothing else. The audit tools read the page when you click the icon and then they are done.

There is one honest exception in the set, and I would rather name it than have you find it. The video speed controller does run a small script on every page, because the keyboard shortcuts have to work the instant a video appears and waiting for you to open a popup first would make it a different product. That script looks for video and audio elements. It does nothing else, it makes no network calls at all, and I would rather explain that than pretend the set is perfect.

If you install something of mine and the permission prompt looks bigger than the job, treat that as a bug and send it to me.

The second thing I care about is where your data goes, which in almost every case is nowhere. No accounts, no servers, no analytics. The rank checker sends the place name you type to a free geocoding service so it can turn "Austin, TX" into coordinates, and that is the only outbound call anywhere in the collection. It's written down in the privacy policy rather than buried.

How I price things

The browser extensions and the web tools are free, and they'll stay free. They cost me nothing to run because they run on your machine, so there is no server bill to pass along and no reason to meter anything.

For the paid desktop and web apps, the rule I'm building to is flat pricing with no per-use credits. What pushed me here was a rank tracker that billed me per map pin. I started running smaller grids less often to keep the bill down, which is backwards: I was making worse decisions in order to save money on the tool that existed to help me decide.

So: pay once or pay monthly, use it as much as you want, and if you stop paying you keep access to the work you already made. I'll gate new conveniences like sync and sharing. Never the thing you came for.

Working with one person

Worth being upfront about the tradeoff. Being a one-person shop is the reason the pricing works, there's no sales team to fund and nobody expecting a metering strategy. It's also why I ship slower than a funded team and say no to features more often than you'd like.

If you need enterprise procurement and a signed 24-hour response window, I'm not your vendor yet. If you want software that treats you like an adult, get in touch.