Vibe
balajmarius.comKey Features
Tech Stack
Key Features
Tech Stack
At some point you hit a project size that is too large or has too many interdependencies, and you have to be very careful about how you manage the context and should expect the llm to start generating too much code or subtle bugs.
Once you hit that size, in my opinion, it's usually best to drop back to brainstorming mode, only use the llm to help you with the design, and either write the code yourself, or write the skeleton of the code yourself and have the llm fill it in.
With too much code, llms just don't seem able yet to only add a few more lines of code, make use of existing code, or be clever and replace a few lines of code with a few more lines of code. They nearly always will add a bunch of new abstractions.
You can be explicit about these things.
But I have no issues with using Claude Code to write code in larger projects, including adapting to existing patterns, it’s just not vibe coding - I architect the modules, and I know more or less exactly what I want the end result to be. I review all code in detail to make sure it’s precisely what I want. You just have to write good instructions and manage the context well (give it sample code to reference, have agent.md files for guidance, etc.)
This is key.
And this is also why AI doesn't work that well for me. I don't know yet how I want it to work. Part of the work I do is discovering this, so it can be defined.
1. Have the ai come up with an implementation plan based on my requirements
2. Iterate on the implementation plan / tweak as needed
3. Have it build designed product
On projects where we split up the task into well defined, smaller tickets, this works pretty well. For larger stuff that is less well defined, I do feel like it's less efficient, but to be fair, I am also less efficient when building this stuff myself.
And usually that code contains at least one or two insights you would not normally have considered, but that makes perfect sense, given the situation.
These are the perfect size projects vibe coding is currently good for.
So far... it's going to keep getting better to the point until all software is written this way.ARC AGI 2: https://x.com/poetiq_ai/status/2003546910427361402
METR: https://metr.org/blog/2025-03-19-measuring-ai-ability-to-com...
The key is that the LLMs get smart enough.
I’m thinking 5 years at most.
I use LLMs to generate systems that interpret code that I use to express my wishes, but I don't think is would be desirable to express those wishes in natural language all of the time.
So, yes, ONE DAY, AI will be doing all sorts of things (from POTUS and CEO on down), once it is capable of on-the-job learning and picking up new skills, and everything else that isn't just language model + agent + RAG. It the meantime, the core competence of an LLM is blinkers-on (context-on) executing - coding - according to tasks assigned to it by a human who (just like a lead assigning tasks to team members) is aware of what it can and can not do.
Once your codebase exceeds a certain size, it becomes counter-productive to have code that is dependent on the implementation of other modules (tight coupling). In Claude Code terms this means your current architecture is forcing the model to read too many lines of code into its context which is degrading performance.
The solution is the same as it is for humans:
"Program to an interface, not an implementation." --Design Patterns: Elements of Reusable Object-Oriented Software (1994)
You have to carefully draw boundaries around the distinct parts of your application and create simple interfaces for them that only expose the parts that other modules in your application need to use. Separate each interface definition into its own file and instruct Claude (or your human coworker) to only use the interface unless they're actually working on the internals of that module.Suddenly, you've freed up large chunks of context and Claude is now able to continue making progress.
Of course, the project could continue to grow and the relatively small interface declarations could become too many to fit in context. At that point it would be worthwhile taking a look at the application to see if larger chunks of it could be separated from the rest. Managing the number and breadth of changes that Claude is tasked with making would also help since it's unlikely that every job requires touching dozens of different parts of the application so project management skills can get you even further.
For me, Codex ended up being the reliable executor for actual logic and glue code, while Claude Code (especially the frontend design skill) was much better at overall UI structure, spacing, and interaction flow. I stopped trying to make one model do everything and just let them do what they seemed naturally good at.
This only worked because the project was tiny and mostly stateless — once scope or dependencies grow, the coordination cost goes up fast. Curious if others have seen a similar split in practice, or if this is just project-type dependent.
The capabilities now are strong enough to mix and match almost fully in the co-pilot range on most substantial projects and repos.
you can tell by how many people earnestly share AI generated images, many are completely tasteless but people don't care
Side note: I once wrote about recreating Delicious Library: https://dingyu.me/blog/recreating-delicious-library-in-2025
Something you don’t really mention in the post is why do this? Do you have an end goal or utility in mind for the book shelf? Is it literally just to track ownership? What do you do with that information?
I want my website to slowly become a collection of things I do and like, and this bookshelf is just one of those pieces.
So many systems are fault-tolerant, and it’s great to remember that in a world where LLMs introduce new faults. Kudos to OP for this mindset; more anti-AI posters would benefit from sitting with the idea from time to time.
I also have a bookshelf (fully manual, in another comment), and I’m looking for better ways for retention. I do highlights but I rarely do notes. Also with audiobooks I have yet to find a good way to do this outside of my text note for each book I’m reading/listening-to.
I think highlighting is why I strongly prefer ebooks nowadays.
cool to check out your version as well thanks for sharing.
> Claude did not invent that idea. It executed it.
> Claude handled implementation. I handled taste.
This style of writing always gets me now :)
^^ These dramatic statements are almost always AI influenced, I seem to always see them in people's emails now as well. "we didnt reinvent the wheel. we are the wheel."
Seriously: what tool do you want to use that's immediately available to the absolute lowest common denominator "writers" on the Internet?
"It's not X, it's Y" literally makes my stomach churn from seeing so much of it on LinkedIn.
I usually grimace at "GPT smell". The lines you quoted stood out to me as well, but I interpreted them as "early career blogger smell". It's similar, but it didn't come off as AI. I think because it avoided grandiose words, and because it reused the exact same phrase format (like a human tic) rather than randomly sampling the format category (like an AI). This is what human text looks like when it's coming from someone who is earnestly trying to have a punchy, intentional writing style, but who has not yet developed an editor's eye (or asked others to proofread), which would help smooth out behaviors that seem additive in isolation but amateur in aggregate.
Did others share the impression that it's a human doing the same classic tricks that AI is trained to copy, or does anything in this category immediately betray AI usage?
Many weaker or non-native writers might use AI for that "editor's eye" without realizing that they are being driven to sound identical to every other blog post these days. And while I'm certainly growing tired of constantly reading the same LLM style, it's hard to fault someone for wanting to polish what they publish.
I think it some kind of value - vibe dynamics that play in making the brain conscious about it being written with AI or otherwise.
> What I needed was not a better app, but a way to tolerate imperfection
> That decision was not technical, it was judgment
> What makes it interesting is not the covers, but the spines
> Claude did not invent that idea. It executed it
> my caution dropped, not because the tool was always right, but because the cost of trying ideas had collapsed
> Not because it was broken, but because it was unnecessary
> I started asking for things I did not need.
For a community that prides itself on depth of conversation, ideas, etc. I'm surprised to so much praise for a post like this. I'll be the skeptic. What does it bring to you to vibe code your vibe shelf?
To me, this project perfectly encapsulates the uselessness of AI, small projects like this are good learning or relearning experience and by outsourcing your thinking to AI you deprive yourself of any learning, ownership, or the self fulfillment that comes with it. Unless, of course, you think engaging in "tedious" activities with things you enjoy have zero value, and if getting lost in the weeds isn't the whole point. Perhaps in one of those books you didn't read, you missed a lesson about the journey being more important than the destination, but idk I'm more of a film person.
The only piece of wisdom here is the final sentence:
> Taste still does not [get cheaper].
Though, only in irony.
As for the main concern in your comment, I did in fact read the blog post; see how I quoted multiple parts, verbatim ("word for word")?. I now understand this audience may not be entirely familiar with literature or reading beyond basic instructions from their preferred datacenter or advertising company, but generally the beginning of a piece of writing (the "introduction") serves as the premise while the end (the "conclusion") describes the abstract ideas a reader should take away from the entire piece. I'll even let you in on a little secret: the word "conclusion" is synonymous with "a judgement following logical steps". As I mentioned in my original comment there is also a middle section which can often be more important or meaningful (to both characters and readers) than the introduction or conclusion. Howver, in this piece of writing it amounted to "I didn't know how to do something so I asked AI and when it didn't do the right thing I asked it again" which isn't a very engaging story (there's a similar famous premise about an "oracle" that can respond to three "queries", however the entertainment relies on this limitation). Anyways, the badic premise seems to be well received already and lacking any interesting description of the process, I chose to engage with the conclusion. The question of taste.
The author believes, or rather instructed an LLM to generate an article from the perspective in which someone belives, generative AI can enable the good taste of someone in prototype hell to come to fruition. But in my original comment I'm making the point that creating something of good taste is inextricably linked to engagement with the medium. But the author shows a willful lack of engagement, with their medium whether that be software or a book shelf.
If you'd like to engage with my original comment in good faith, here are some questions: * do you really think this project constitutes good taste? for software? for book shelves? * can someone with an apathy for a craft as extreme the author have good taste? * might this even be considered bad taste given the technological sensibilities of this forum? (disdain for js bloat, foss, "elegant solutions")
>To me, this project perfectly encapsulates the uselessness of AI, small projects like this are good learning or relearning experience and by outsourcing your thinking to AI you deprive yourself of any learning, ownership, or the self fulfillment that comes with it. Unless, of course, you think engaging in "tedious" activities with things you enjoy have zero value, and if getting lost in the weeds isn't the whole point.
In the context of his first paragraph
>I own more books than I can read. Not in a charming, aspirational way, but in the practical sense that at some point I stopped knowing what I owned. Somewhere around 500 books, memory stopped being a reliable catalog.[...] For years, I told myself I would fix this. Nothing elaborate, nothing worthy of a startup idea. A spreadsheet would have been enough. I never did it, not because it was hard, but because it was tedious.
Wouldn't your statement be completely moot because he plainly said the purpose of the project was to create a system to handle his books, and the only reason he hasn't done it yet was because it was tedious? (Hint: if you need the paragraph or thge rest of his article to be broken down for you more, I suggest asking ChatGPT to give a summery for you).
This is still pretty great!
Don't get me wrong, AI is at least as game-changing for programming as StackOverflow and Google were back in the day. Being able to not only look up but automatically integrate things into your codebase that already exist in some form in the training data is incredibly useful. I use it every day, and it's saved me hours of work for certain specific tasks [0]. For tasks like that, it is indeed a 10x productivity multiplier. But since these tasks only comprise a small fraction of the full software development process, the rest of which cannot be so easily automated, AI is not the overall 10x force multiplier that some claim.
Until it decides to include code it gathered from a stackoverflow post 15 years ago probably introducing security related issues or makes up libraries on the go or even worse, tries to make u install libs that were part of a data poisoning attack.
As someone who frequently uses Claude Code, I cannot say that a year's worth of features/improvements have been added in the last month. It bears repeating: if AI is truly a 10x force multiplier, you should expect to see a ~year's worth of progress in a month.
They are by definition a biased source and should not be referenced as such.
I do however think he is not an actively dishonest source. When he says "In the last thirty days, I landed 259 PRs -- 497 commits, 40k lines added, 38k lines removed. Every single line was written by Claude Code + Opus 4.5." I believe he is telling the truth.
That's what dogfooding your own product looks like!
That's obviously not going to happen, because AI tools can't solve for taste. Just because a developer can churn out working code with an LLM doesn't mean they have the skills to figure out what the right working code to contribute to a project is, and how to do so in a way that makes the maintainers lives easier and not harder.
That skill will remain rare.
(Also SQLite famously refuses to accept external contributions, but that's a different issue.)
I will make sure not to spread that misinformation further in the future!
I learned it from newspapers: papers that publish prompt and clear corrections when they publish mistakes are more credible than papers that don't acknowledge their errors.
> Contributed Code
> In order to keep SQLite completely free and unencumbered by copyright, the project does not accept patches. If you would like to suggest a change and you include a patch as a proof-of-concept, that would be great. However, please do not be offended if we rewrite your patch from scratch.
I realize that in the section, "Open-Source, not Open-Contribution" it says that the project accepts contributions, but I'm having trouble understanding how that section and the "Contributed Code" section can both be accurate. Is there a distinction between accepting a "patch" vs. accepting a "contribution?"
If you're planning to update this page to reduce confusion of the contribution policy, I humbly suggest a rewrite of this sentence to eliminate the single and double negatives, which make it harder to understand:
> In order to keep SQLite in the public domain and ensure that the code does not become contaminated with proprietary or licensed content, the project does not accept patches from people who have not submitted an affidavit dedicating their contribution into the public domain.
Could be rewritten as:
> In order to keep SQLite in the public domain and prevent contamination of the code from proprietary or licensed content, the project only accepts patches from people who have submitted an affidavit dedicating their contribution into the public domain.
Why? People don't ask hammers to do much more than bash in nails into walls.
AI coding tools can be incredibly powerful -- but shouldn't that power be focused on what the tool is actually good at?
There are many, many times that AI coding tools can and should be used to create a "small program that already exists in multiple forms in the training data."
I do things like this very regularly for my small business. It's allowed me to do things that I simply would not have been able to do previously.
People keep asking AI coding tools to be something other than what they currently are. Sure, that would be cool. But they absolutely have increased my productivity 10x for exactly the type of work they're good at assisting with.
I think it's for a very reasonable reason: the AI coding tool salespeople are often selling the tools as something other than what they currently are.
I think you're right, that if you calibrate your expectations to what the tools are capable of, there's definitely. It would be nice if the marketing around AI also did the same thing.
And if this submission was an AI salesperson trying to sell something, the comment/concern would be pertinent. It is otherwise irrelevant here.
The parent specifically noted that generally "people keep asking AI coding tools to be something other than what they currently are."
There's an explanation for why that is happening, so I think it's relevant here.
Maybe this is possible. Maybe not.
However, it's a fantasy. Granted, it is a compelling fantasy. But its not one based on reality.
A good example:
"AI will probably be smarter than any single human next year. By 2029, AI is probably smarter than all humans combined.” -- Elon Musk
This is, of course, ridiculous. But, why should we let reality get in the way of a good fantasy?
Arguably that's already so. There's no clear single dimension for "smart"; even within exact sciences, I wouldn't know how to judge e.g. "Who was smarter, Einstein or Von Neumann?". But for any particular "smarts competition", especially if it's time limited, I'd expect Claude 4.5 Opus and Gemini 3 Pro to get higher scores than any single human.
Hear me out: let's say that generating a new and better compression algorithm is something that might take a dedicated researcher about a year of their life, and that person is being paid to work on it, in the industry or via a grant. Is there anyone who has been running Claude Code instances for a human-year in a loop with the instruction to try different approaches until it has a better compression algorithm?
Let's not disregard interesting achievements because they are not something else.
No one is propping up a multi-billion dollar tech bubble by promising hammers that do more than bash nails. As a point of comparison that makes no sense.
This is the "promise" that was being sold here and in reality, we yet haven't seen anything innovative or even a sophisticated original groundbreaking discovery from an LLM with most of the claims being faked or unverified.
Most of the 'vibe-coding' uses here are quite frankly performative or used for someone's blog for 'content'.
Vibe coding has really helped me explore skills outside of my comfort zone which can then be applied in combination with other existing skills or interests in new ways.
In the case of your project, I imagine that now that you can gather data such as books from an image of a bookshelf, you can do something similar in infinite other ways.
One-off scripts and single page html/css/js apps that run locally are fantastically accessible now too.
As someone who doesn't code for a living, but can write code, I would often go on hours/day long side quests writing these kind of apps for work and for my personal life. I know the structure and architecture but lack the fluency for speedy execution since I'm not writing code everyday. Claude code fills that speed gap and turned my days/hours long side quests into minutes for trivial stuff, and hours for genuinely powerful stuff at home and at work.
I’ve been vibe-coding a personalized Logseq clone in Rust based on gpui and CRDTs (loro.dev) over the last couple days - something just for me, and in a big part just to explore the problem space - and so far it’s been very nice and fun.
Especially exploring multiple approaches, because exploring an approach just means leaving the laptop working for an hour without my attendance and then seeing the result.
Often I would have it write up a design doc with todos for a feature I wanted based on its exploration, and then just launch a bash for loop that launches Claude with “work on phase $i” (with some extra boilerplate instructions), which would have it occupied for a while.
First, I took photographs of all my physical books simply by photographing the bookshelves such that the book spines were visible.
Then passed the photographs with a prompt akin to, "These are photographs of bookshelves. Create a table of book title and book author based on the spines of the books in these photographed shelves." ChatGPT4’s vision model handled this no problem with pretty high accuracy.
I then vibe-coded a Python program with ChatGPT4 to use the Google Books API (an API key for that is free) to generate a table, and then a CSV, of: book title, book author, and isbn13. Google Books API lets you look up an ISBN based on other metadata like title and author easily.
Finally, I uploaded the enriched CSV into a free account of https://libib.com. This is a free SaaS that creates a digital bookshelf and it can import books en masse if you have their ISBNs. You can see the result of this here for my bookshelf:
https://www.libib.com/u/freenode-fr33n0d3
My admin app for Libib (https://libib) is more full-featured than the above public website showcases. It's basically software for running small lending libraries.
But, in my case, the “lending library” is just my office’s physical bookshelf.
I also added a Libib collection there that is a sync of my Goodreads history, since I read way more Kindle books than physical books these days. That was a similarly vibe-coded project. But easier since Goodreads can export your book collection, including isbn13, to a file.
As for my actual physical bookshelf, it is more a collection of books I either prefer in print, or that are old or out-of-print (or pre-digital + un-digitized) books.
I liked the Libib software so much I ended up donating to it. I originally discovered it because it is used for Recurse Center’s lending library in the Recurse Center space in Brooklyn, NY (https://recurse.com).
Also, libib has a Android, iPhoneOS, and iPadOS apps -- these are very basic but they do allow you to add new books simply by scanning their ISBN barcode, which is quite handy when I pick up new items.
I did enjoy reading the OP writeup, it’s a fun idea to vibe-code the actual digital bookshelf app, as well!
SerpAPI provides a very valuable programmatic access to search that Google are hell bent on never properly providing
I wonder if you could develop this as an add on to Hardcover.app - you could fetch people's books, images, and display the bookshelf.
All the data seems to be there:
https://hardcover.app/@BenHouston3D/books/read?order=owner_l...
This is my experience with agents, particularly Claude Code. It supplies sufficient activation energy to get me over the hump. It makes each next step easy enough that I take it.
50 more comments available on Hacker News
Not affiliated with Hacker News or Y Combinator. We simply enrich the public API with analytics.