I'm a new developer and I Built a free unlimited file converter with 50+ formats — here's the real, messy, "I have no idea what I'm doing" story behind it 🛠️
Site: Flashconvert Stack: Next.js 15, TypeScript, Tailwind CSS Hosting: Netlify (free tier) Domain: GoDaddy ₹99 offer (still can't believe got a website at just 99)
Why I even started this 🤔
You know that feeling when you just need to convert one PNG to a WebP real quick, and you end up on some website that has more popup ads than actual features ? 😕 It asks you to sign up, then tells you the free plan allows 2 conversions per day 🤣, and somewhere in the footer it vaguely says your files are "processed securely" which means absolutely nothing 😒.
I kept landing on those sites. Every. Single. Time.
So one day I just thought — okay, I'll build my own. How hard can it be? (spoiler: harder than I thought, but also more possible than I expected)
The idea was simple: a converter that works fully inside your browser, no file ever goes to any server, no login, no limits, no ads, no data collection. Privacy not as a feature — but as just how the thing physically works. If files never leave your device, there's nothing to collect.
That became flashconvert🌐
Starting with bolt . new — the honeymoon phase ✨
I started with bolt . new which if you haven't tried it, is basically a browser-based AI environment that scaffolds a full project for you. You describe what you want, it writes the code, sets up the file structure, everything.
For a beginner like me this felt like magic. I had a working base up in maybe a few hours. Core conversion logic, basic UI, it was running. I was feeling like a genius honestly.
Then I downloaded the project locally to add more things — a navbar, separate tools pages, an about page, a settings page. And this is where I made my first big newbie mistake 🤦
I started using multiple AI tools at the same time. ChatGPT (4.5, low reasoning tier because I was watching token usage), Cursor, and Windsurf Antigravity — all for the same project, sometimes for the same problem.
Here's what nobody told me: when you ask three different AI tools to solve the same codebase problem, they each assume different things about your project. One tool writes a component one way, another tool writes a different component that conflicts with the first, and now you have code that makes no sense and neither tool knows what the other did. Your context is split across three windows and none of them have the full picture.
I had CSS overriding itself in places I couldn't trace. Tailwind classes conflicting with custom styles. The dark/light theme toggle — which sounds like a 20 minute job — broke literally every time I touched anything near it. I once spent 3-4 hours just trying to get a single entrance animation to not flicker on page load. Fixed the animation, broke the navbar. Fixed the navbar, the theme stopped working. It was a cycle.
As a new developer I didn't know that the problem wasn't the code — it was my workflow. I was asking AI tools to build on top of each other without giving them the full context of what the other had done. 📚 Lesson learned the painful way: pick one AI environment for a project and stay in it. Switching mid-build fragments your context and fragments your codebase.
The token wall hit me mid-debug 😤
Right when I was deep in trying to fix a real bug, the token limit kicked in and the model essentially ghosted me mid-conversation. This happened more than once. You're explaining the problem, giving it the code, it's starting to understand — and then it stops and says you've hit your limit.
I started looking for alternatives that wouldn't cut me off.
Kimi K2 on Glitch — the actual turning point 🔄
Somebody somewhere mentioned you could run Kimi K2.5 through Glitch with basically unlimited usage and without downloading anything locally. I tried it with pretty low expectations.
It was genuinely different. Not just in speed or quality — but in how it handled the project. It actually held context well across longer sessions, which meant I could explain the full state of my project, describe what was broken, and iterate without starting from scratch each time.
This is where the website went from "half-broken mess" to something real.
Using Kimi K2 on Glitch I fixed the dark/light theme properly — not a patch, an actual clean implementation. Added animations and transitions that felt polished without hurting performance. Cleaned up the component structure so things stopped randomly affecting each other. And finally got to a build I'd actually call production-ready.
The no-token-wall thing sounds like a small convenience but it fundamentally changes how you work. You stop rationing prompts and start actually building.
The technical part 😎 — how in-browser conversion actually works 🧠
This is the part I think is genuinely useful for anyone trying to build something similar, because it's not obvious.
The whole point of this project is that files never touch a server. Everything happens client-side in your browser. Here's how each conversion type works:
🖼️ Images — The browser has a native Canvas API. You load the source image, draw it onto a canvas element, and then export it in the target format. Sounds simple. Edge cases are not. Transparency disappears when converting PNG to JPG because JPG doesn't support alpha channels. Animated GIFs get flattened to a single frame. Color profile differences between formats can shift how an image looks after conversion. Each of these is a bug you discover after the feature is "working."
🔊 Audio — This uses FFmpeg compiled to WebAssembly (FFmpeg.wasm). FFmpeg is the most powerful media processing tool in existence and someone compiled it to run entirely in a browser. The tradeoff is the WASM bundle is large and heavy. If you load it on page load, your site feels slow. I had to implement lazy loading — only load FFmpeg.wasm when someone actually tries to convert audio, not before.
🎬 Video — Also FFmpeg.wasm, and this is the most complex one. Video encoding is genuinely CPU-intensive. On slower devices it takes time and there's no clear feedback to the user about why. Progress indicators matter a lot here and I still want to improve this part.
📄 Documents — PDF and DOCX handling uses dedicated libraries. These are more straightforward to work with but have their own quirks around font embedding and formatting when converting between formats.
All of this without any backend. No server to offload heavy work to. The architecture is clean because of that constraint, but it also means the browser is doing everything and you have to be thoughtful about performance.
Deployment — surprisingly the easiest part 😌
Pushed to GitHub. Connected to Netlify. Their free tier is genuinely great for a project like this — automatic deployment every time you push, HTTPS handled for you, CDN included. Since there's no backend, it's a perfect match.
GoDaddy had a ₹99 (~$1.20 USD) first year domain offer. I grabbed flashconvert.in. Connected it to Netlify through DNS settings. The whole process took maybe 20 minutes.
Then set up Google Search Console and Bing Webmaster Tools, submitted the sitemap, did basic on-page SEO — proper meta descriptions, Open Graph tags for link previews, clean heading structure. Still early on traffic but it's indexed and showing up for some searches already.
Things I messed up that you shouldn't 🙃
Using too many AI tools at once — I said it above but it really cost me hours. Fragmented context = fragmented codebase. One tool, one project.
Building UI before finalizing the theme system — I built a bunch of components and then tried to add dark mode on top of them. It should've been the other way. Set up your theming architecture first, build components into it second.
Not thinking about loading UX for heavy libraries — FFmpeg.wasm is big. I didn't think about how that would feel to a user until I was testing it. The first video conversion feels slow because of the initial WASM load. A proper loading state and explanation would've been day-one thinking, not an afterthought.
What's working and what's next 🚀
Right now image conversion is the most solid — fast, handles edge cases well, supports PNG, JPG, WebP, GIF, BMP, ICO, TIFF, SVG and more. Audio is solid too. Documents work. Video works but I want to improve the progress feedback.
Things I want to build next: batch conversion so you can drop multiple files at once, per-format quality and resolution controls, and maybe a local conversion history (stored only in your browser, never on a server).
If you want to try it or actually break it 🔗
flashconvert . in — free, no account, works in any browser on any device.
This is a one-person project. If something doesn't convert right or you find a bug, I genuinely want to know about it. Drop a comment or message me. Real feedback from real users is worth more than anything right now.
If it ends up being useful to you there's a Buy Me a Coffee link on the about page. No pressure at all — just how the hosting stays free for everyone.