Everyone’s talking about AI coding tools right now, but most of the examples feel abstract—a web-based operating system, a DOOM clone, portfolio websites. They’re cool, but they don’t really solve real problems in your day-to-day life. Well, I’ve been running into a frustrating app gap lately where some of the tools I rely on in Linux don’t exist on Windows, and vice versa. That disconnect has been slowing down my workflow, so I decided to vibe-code my way out of it.
The Linux app I desperately want on Windows
It’s a simple image annotation app—but it’s critical to my workflow
The Linux app I couldn’t find an equivalent for on Windows was Gwenview—the default image viewer on KDE Plasma-based Linux distributions.
As a tech writer, I add a lot of annotated screenshots to my articles—arrows pointing at buttons, boxes around specific settings, text boxes to explain something—and Gwenview made that workflow incredibly fast and convenient. Sure, you can technically do the same thing in a dedicated image editor like GIMP (which works on both Linux and Windows), but that adds unnecessary overhead. I wanted something that launched quickly and allowed for fast point-and-click edits.
Unfortunately, I was hard-pressed to find a similar app on Windows. The built-in Photos app in Windows 11 is decent, but it’s no Gwenview, lacking basic annotation tools like arrows and text. Granted, there are plenty of third-party alternatives, but most of the free ones were buggy, and the good ones were paid.
I even tried running Gwenview through Windows Subsystem for Linux, and while it technically worked, the experience was janky. I had trouble opening images, the interface lagged, and I couldn’t save my edits properly. So for a while, I was taking screenshots on Windows, opening a VM running Kubuntu, editing the images there, and then moving them back to Windows.
Needless to say, it wasn’t the smoothest workflow. Eventually, I decided to see if I could just vibe-code the app myself.
I finally understand why vibe coding is pulling people into programming
Vibe coding lowers the barrier to programming by letting you describe what you want, test quickly, and learn by fixing what breaks.
Here’s my vibe coded image editor
It’s so good—it even replaced its muse
Here’s a quick video showing the app in action:
If the video is not loading, your ad blocker might be preventing it from playing.
As you can see, I decided to build it as a web app instead of a desktop app like Gwenview. I went that route because I wanted to avoid the extra complexity of packaging it as a desktop application—which also meant burning through a lot more tokens.
In its current form, it’s just an HTML file sitting on my system that I can open in any browser. It can crop images, add text overlays, draw arrows, place counters, blur or pixelate specific areas, highlight regions of a screenshot, and magnify parts of an image. You can even bulk upload a folder of images, pick whichever one you want to work on, and edit it.
There’s also a duplicate button, so if you need multiple edits of the same image, you can make a copy first and edit each version separately instead of constantly undoing and redoing changes on a single file. Everything exports as PNG or JPG, and if you’re exporting a batch, it automatically zips the files for you.
It genuinely works flawlessly. I didn’t expect to end up with something I’d call production-ready, but that’s exactly what it became. In fact, I’m now using it on Linux as my main image editing tool too.
How I used Claude to build the app
Planning is the most important part
I had a rough idea of what I wanted the app to do, but I didn’t just hand Claude a list of requirements and ask it to build it. That’s the classic garbage-in, garbage-out problem with AI where a weak prompt usually gives you a weak result. So after writing out my requirements, I asked Claude to turn them into a proper build prompt for a second Claude instance to work from.
That first pass came back with far more detail than I’d originally provided. It chose the entire stack—React with Vite and TypeScript, Konva.js for the canvas layer, Tailwind CSS for styling, and Lucide for icons—none of which I’d specified, because I don’t know enough about frontend tooling to make those decisions myself.
It also mapped out the app’s architecture and explained how each feature would work under the hood. That gave me a chance to sanity-check the plan against what I actually wanted and tweak it before handing it off. If something looked off, I could catch it here instead of after the app was already built.
Once the prompt was solid, I handed it to a second Claude instance, and it built the app with very little back-and-forth. It asked maybe five or six clarifying questions in total, including one deliberate checkpoint baked into the prompt itself. After laying out the interface—but before wiring up any of the tools—it paused and asked if everything looked right. Once I confirmed, it built out the rest of the tools, and the app just worked.
I tested 100 Claude skills so you don’t have to—here are the 6 that actually matter
There are over 1.5 million Claude skills. I tested more than 100 to find the best ones. Turns out, most users only need these six.
Remember to use Claude Code or Cowork—not the web app
I used the Claude desktop app for this, where you get access to Cowork and Code mode. You’ll want to use the desktop app instead of the web version because it can access your local file system directly.
That means the code it writes gets created on your computer as actual files inside a proper folder structure. In my case, Claude created a project folder called “snapmark” and even dropped in a README explaining how to run it.
If you tried doing this through the web app instead, you’d probably end up with a wall of code snippets that you’d have to manually copy into files and organize yourself—which is a rough experience if you’re not a programmer. If you use Claude Cowork or Code, then it’ll handle all of that for you.
How much did it cost
How many tokens did it eat—and how long did it take
The entire project took roughly 500k tokens. I used the $20/month Claude Pro plan for this project. As you may know, Claude gives you a weekly usage cap along with shorter rolling session limits. When I started, I was already about 80% through one of those sessions, so I hit the cap pretty quickly.
I got lucky, though—the next session window reset just a few minutes later, which meant I effectively got two sessions’ worth of work back-to-back instead of having to stop and wait.
During that second session, the project burned through about 90% of the available limit. Combined, that means building this app used the equivalent of roughly 110% of a standard Claude session. I should also mention that Anthropic was running a temporary promo that doubled the usual session limits, so under normal conditions, this would’ve been closer to 220% of a standard session—meaning I’d have had to wait through at least three separate resets to finish it.
Speaking of waiting, this wasn’t a case of prompting Claude and getting a finished app a minute later. It took about 15 minutes to generate the first skeleton build, with none of the features working yet, and another hour or so to get a usable version with the core functionality in place. Once I factored in all the extra back-and-forth for additional features, the entire process took roughly two hours from start to finish.
I get more from Claude’s $20 Pro plan than most $200 Max subscribers—here’s how
Before upgrading your plan and spending more money, try upgrading your habits first.
Ask, and you shall receive
It feels like we’re in a strange moment where almost anything you can imagine can be built for you—yet you’ll still see plenty of people complaining that their AI agent completely botched the task. I think that gap mostly comes down to how the request is framed. You have to be precise about what you’re asking for. It also helps to ask Claude how confident it is that it actually understands the project and can build it.







