back to blog
Local LLM
career · 4 min read

I Started Vibe Coding a Month Ago, And I Understood NOTHING.

A month ago, during early March, I had this urge to stop supporting commercial AI chatbots because for one, we all know the computing power it takes affects our environment negatively, and two, I heavily dislike AI generated slop and soulless content on this dead internet. Sooooo...

I formed a thought. What if I just run my own AI chat assistant locally on my laptop? That way, I could keep my data private, and take a small stand against AI slop destroying our environment. But I had no idea where to start. I did have some experience writing C/C++ from my embedded systems days back in university, so I wasn't completely new to programming. And because of that, I also wasn't new to the concept of "Vibe Coding".

What is vibe coding you may ask? Well, it's a term floating around the developer space right now where you describe what you want to an AI, it generates the code, you tweak things until they seem to work, and you ship it. You're not really writing code so much as conducting it. Pointing at things and saying more of this, less of that.

So I did exactly this when I started building my first local AI assistant, a little project I called CH3SH1RE. I know it sounds counterintuitive to my whole thing about fighting AI slop, but eh, I had to start somewhere. And at the time, I felt super productive about it. I had a working Python stack faster than I ever could have managed on my own. There were moving parts, a Python backend, an SQLite database, a conversational interface, and they fit together in ways that looked, from the outside, like something I had built. If you go to my CH3SH1RE repo over at GitHub, you'd see the whole thing right from the initial commit. It was built so fast that I genuinely thought I was finally gonna be rid of all those commercial AI apps for good. ChatGPT, Gemini, Copilot, gone. I had already deleted all my accounts.

But here's the thing about vibe coding a project you don't fully understand: you can feel it. Not immediately, but eventually. You start noticing that you can't explain why something works. You can't predict what will break when you change something. Heck, I even noticed that Cheshire's responses were weirdly generic and I didn't know why. The code started to feel less like something I made and more like something that just happened to me.

I remember looking at a chunk of the CH3SH1RE codebase and realising I genuinely could not tell you what it was doing line by line. I had approved it. I had run it. But I hadn't read it, not really. I'd read it the way you read the terms and conditions of a software update: scanning for anything alarming, then clicking accept.

That was the moment I knew something had to change.

I didn't know yet what the alternative looked like. But I knew that building something I couldn't explain felt like standing on a floor I hadn't checked the weight rating on. Functional, until it isn't.

back to blog