A case for structured, opinionated frameworks for more deterministic, higher quality vibe coding
Hey everyone.
Lately, I’ve been thinking about how AI is changing the way we write software. It’s gotten a lot better at generating code. But the code it generates is often surprisingly bad.
Not broken. Just… off. It runs, but it’s hard to build on. The structure’s wrong. The abstractions don’t quite fit. You end up rewriting most of it.
And that’s not a flaw in the models. That’s a flaw in the interface.
The main problem with AI code gen isn’t accuracy. It’s ambiguity.
Tools like Bolt and Lovable are impressive. You describe what you want: "internal dashboard with filters and a chart and it gives you something that looks like a working app. But beneath the surface, it’s vague. Too many choices are left unresolved. Where does the state live? What happens when the input changes? What triggers recomputation?
These are the questions frameworks are supposed to answer.
If you’re building something serious, you don’t want infinite flexibility. You want constraints. You want the code to behave in predictable ways when the complexity increases. You want structure. Otherwise, the generated code becomes a form of tech debt. It looks like it works, but it doesn’t scale.
The smarter AI gets, the more important frameworks become.
This is what makes something like Preswald work. It gives the LLM a shape to fill in. Inputs live in components. Logic lives in workflows. Execution is deterministic. You don’t need to guess what state gets recomputed. The rules are clear.
Generic tools create generic experiences.
The less opinionated your tool is, the more your users have to bring their own. The best tools aren’t flexible. They’re right. They make assumptions that match the job. Preswald assumes:
-
You’re writing Python
-
You want reactive, stateful components
-
You care about performance, but don’t want to manage it
-
You want to share your app with one command
These assumptions eliminate a lot of decisions. Which makes the result better. People talk about jobs-to-be-done. This is that. Not by adding more knobs and options, but by reducing them.
When you write code using something like Preswald, you're not just gluing together components. You're working inside an opinionated system. You get reactivity, caching, state, and workflow execution all baked in. That structure gives the AI a real target. Not just “make a table” but “use a Preswald component that renders a table and responds to changes with recomputation logic.” That’s a different prompt entirely.
Why Open source matters
Most people think of open source as something developers use. But increasingly, it's something AIs learn from. LLMs don't read your private codebase; they learn by trawling GitHub. So the frameworks you put out there, the patterns they expose, the structure they impose, end up becoming part of the AI’s vocabulary. That means the way you design a framework today can shape how software gets generated tomorrow. The more structure it provides - clear state boundaries, predictable recomputation, deterministic flows, the easier it is for an AI to do something meaningful with it. AIs, like junior programmers, need scaffolding. The difference is that the scaffolding you give an AI becomes training data for a generation of developers you’ll never meet.
That’s all for now
AI doesn’t replace frameworks. It makes them more important. You need opinionated defaults that make the right thing easy and the wrong thing hard.
That’s what frameworks are for.
Try Preswald at https://github.com/StructuredLabs/preswald.