I wanted to share my process on how I used Claude code to build sqlit , a TUI for SQL databases. What was cool was this was my first major python project, and I don’t even know python, but it still was received positively by the community and has become a lot of people’s new favorite SQL client. Which I’m really proud of. It has 4.7k stars on Github, 33 contributors, and I haven’t touched a single line of code manually. So in this post I wanted to share how I managed to “vibe code” something that ended up not being slop. A little background. When I switched to Linux last year I needed a new SQL client as SSMS is only for Windows. The popular asnwer was VS Code’s SQL extension, or terminal tools that required a lot of setup and hard to learn. I wanted a easy keyboard driven sql client like lazygit. I would’ve never attempted to try to build this before, but Claude code, to my surprise, helped me to get a prototype up and it has just taken off from there where I’ve been polishing and making it accessable for more people than just me. So, how did I manage to vibe code a popular open source project not even knowing python? Well first I don’t think I could’ve built this without actually understanding the problem first of all. It’s really the years of experience with SQL clients and the pain of the past that made me able to come up with the idea in the first place. So I need to be a software engineer to make useful things for software engineers. Ok so that’s the product idea. But the coding though? Still, I don’t think I could’ve made this without knowing how to program. Even though I could not have written a hello world app in Python if you put a gun to my head - I can read it - and more importantly I can understand how software is built and how to architect them and keep them expandable and testable. Which brings me to testability which is really the core of what made sqlit successful. My number one priority in using AI to code is not building features so I can test them myself, but to make failing tests so that AI can verify its own work so that I dont’ have to be involved. And this is actually the hardest part about software development: how do you make your thing testable? That’s, I think, is becoming the central question of systems building for me the last year or so. So I had to be really deliberate on how to build things from scratch. You can’t just piece together some code and put tests on top of it. Testing has to be considered from the ground up. I chose the textual TUI framework becaue I can test every layer of the system independently. It was run tests that sees if the service or action layer is working properly, and it can run “pilot” tests which simulate real keyboard input and thus I can test sequences, recording states even screenshots it can verify. I also used docker containers for all the database providers so that it can run against real instances of the different databases. I even went so far as to make infrastructure as code to make “ephemeral” environments in the cloud automatically if the docker container was unavailable. I was hell bent on never testing something and it paid off. The only thing I truly “tested” was aesthethics, and I didn’t even have to open the app or go through steps since I could instruct the AI to do that for me and just send me screenshots. I used claude code (opus 4.5 at the time) for buildings things in real time and codex for long background refactors and code quality scans. Both cc and codex has moved on since December but I still think this combo is the best. This was the first product I experiemented with pros/cons driven-development and it worked out great. I basically focused on decisions and not code. I would typically go in and read quite a bit of code myself, or I would ask an agent to look for code smells, ways to make it more testable, more stable, expandable, more adherent to SOLID principles, etc., and then when it suggested refactors and redesigns, I asked about about 3 to 5 options for every decision each with pros and cons weighing them up. The reason is that I don’t think I understand something until I understand it against its alternatives. What something is is relative to what it’s not. I still think this is the best way to code with AI. My #1 lesson from software architecture is that there is no “right” option. Every choice has trade-offs and AI isn’t there yet when it comes to making those decisions partly because it doesn’t have a a vision for the project it can use to weigh them. I did read quite a bit of code. There’s a limit to how far “refactor 40,000 lines, use SOLID and DDD and design patterns, make no mistakes” gets you. I wouldn’t have read the code if I didn’t have to. But I had to. I can look at code and know whether I like it. When I see if provider == “mssql” scattered across the app and bugs keep popping up, I know it’s time for a centralized strategy pattern, and I intuitively know that a future contributor edits three files instead of twenty when adding a database is a good thing, whereas the AI, apparently didn’t blink unless I put its nose into the carpet. Once the architecture and the test suite were something I trusted, I stopped reading concrete implementations. The inner workings of the one database implementation don’t affect the rest of the system, and with full integration tests on it. I think vibe coding is thus a skill in the sense that you will know from intuitivelly knowing the blast radius of each component of the system and thus knowing what you are able to abstract away and what you need to pay attention to. So I’ve learned to become more of an orchestrator rather than an engineer, I’m just trying to set up walls, boundaries that is testable so I can ignore as much code as possible. Vibe coding is looked down upon, but I think it’s actually the goal. Ironically it takes a lot of time and attention up front to make vibe coding works. The goal should be to make non-technical contributors one-shot PRs with Claude Code and they’re actually pretty good, because I put in the effort to make it near impossible for an AI to write shitty code in this repo. The goal of a software engineer these days is to make oneself seem talentless, if that makes sense. Product development. I’n inspired by John Vervaeke’s philosophy of “relevance realization.” I don’t think AI can fundamentally know what is relevant to us - in that sense AI will never replace humans. Claude could’ve never built this out of the blue because it doesn’t really feel the pain of having to open VS code’s SQL extension or using clumsy CLI’s. Nor can it really take the steering wheel and suggest features. It would’ve been bloated and ugly. What made the product work was that I was scratching my own itch, I knew exactly what I wanted after years of pain with the tools that came before. There’s no way getting around using your own product and feeling the pain of its flaws. That AI cannot do. I did, however, use Claude to brainstorm. I asked it to read the code, understand the product, and it gave me 50 or so suggestions. I then commented on every single one, saying what I liked and didn’t like about it and then recorded those decisions and from those decisions made a master document about what sqlit really should be about, then having the document it gave me better ideas, which made the document more refined, and it not only gave me good ideas but helped me think about the project more than I would alone. How I used Claude to market it After a few weeks of quietly posting in small forums and fixing what people asked for, I was hungry for more feature requests so I wanted more eyeballs on the project. I was new to to the world of TUIs and linux and didn’t really know. So as the “vibe marketer” i am, I had Claude read the codebase and README so it understood what I’d made, then asked it where to post. It found lots of various subreddits and helped me angle the posts, which was useful, but the real breakthrough was when one of its suggestions was Hacker News. At first glance I thought the site was abandoned and old and ugly. But throughout this whole process Claude was acting sort of like a coach encouraging me to post more stuff online anyway sayign literally “you have nothing to lose, just post it” So I did and it went to the front page of hacker news and I got a queue of feature requests. I suddenly felt an amazing pressure to improve it fast and it went pretty smoothly… A week later the creator of Textual tweeted it, Terminal Trove made it Tool of the Week, and the X posts got 200k+ views. After two weeks after launch it had 2,500 stars. Without the tips from claude this wouldn’t have happened. To summarize here’s the five things I learned. Build what you personally miss. Build something that you don’t mind not being used. 0 stars or grand hit, it doesn’t matter since you built something that you find helpful anyway. Plus the UX is doomed to be great cus you will be feeling the pain every day if its not. When something is working for you, post on small forums here and there and you get some ideas or questions “will this work if I use X”? Questions you would never had thought about because you use Y. Use claude code to market it! Have it read your code, understand your audience and suggest angles. Usability is the innovation. There was already exisitng projects that roughly did the same, but I feel that with AI I can now afford to ask crazy questions like “what if we dont have to ask the user to install CLI” what if what if what if? Claude has no hesitations going your crazy directions and run experiemtns in worktrees etc. and finally, as a software engineer, understanding higher-level architecture, systems-design, and a basic ability to read code enough to see what it does in its own context, is becoming increasingly important, not less. I think you need to understand code, but not necessarily be able to remember how to write it anymore. Using AI has made me much smarter, not dumber, because I’m able to take advantage of being able to learn new concepts and tools and technologies that AI keeps suggesting to me in the meaningful context of my personal project instead abstact theories from a book. Using AI the right way has made me learn at 10x speed. I’m learning about architecture where as before I was writing console logs. Happy to answer questions about the workflow or anything else really. Repo: https://github.com/Maxteabag/sqlit submitted by /u/Maxteabag
Originally posted by u/Maxteabag on r/ClaudeCode
