All posts
9 min read

Project Canvas vs Lovable and Bolt: the iteration-two problem.

Lovable and Bolt.new deserve the year they had. The 2025 vibe-coding wave was not hype in the way most waves are hype: you typed a paragraph and a running app came back, and for a lot of people that was the first time software felt buildable at all. I watched people who had never opened an editor ship things they had wanted for years. Whatever I argue below, that moment was real, and those products earned it.

This post is about what happens after that moment. Specifically, it is about the second prompt, because in my experience that is where the one-shot pattern stops being astonishing and starts being a fight. I will make the case that the collapse is structural rather than a quality problem, then walk the same app at week three in both worlds.

Where one-shot builders are genuinely great

Landing pages. Throwaway demos. Hackathon builds.

The common thread is that the entire spec fits in one paragraph and the app does not need to survive contact with next month. If you can fully describe the thing in the prompt, the prompt is the spec, and a tool that turns one paragraph into one app in one shot is exactly the right shape for the job. There is no iteration problem because there is no iteration.

Two cases where I would reach for a one-shot builder without hesitation. A landing page on Friday night, to find out whether anyone clicks the button before you build the product behind it. A hackathon where the demo is the deliverable and the code is disposable by design. In both, speed to the first running version is the entire game, and nothing beats a single prompt at that game.

The deeper thing these tools proved is the appetite. An enormous population of people who will never open an editor want to build software, and the one-shot builders found them first. Any comparison has to concede that discovery.

Iteration two, where it collapses

The first prompt is a special case, and it took me a while to see why. On the first prompt there is nothing to preserve. The model makes every decision fresh, and any coherent app satisfies the request. That freedom is exactly what makes the first result feel uncanny.

The second prompt belongs to a different problem class. Now you want one thing changed and everything else preserved, and "everything else" was never written down anywhere. There is no plan document. There is no spec beyond your original paragraph and the model's recollection of its own choices. Every subsequent change is the model guessing which of its earlier decisions you consider load-bearing.

In my own runs with the one-shot pattern, the failure looks like this. You ask for the pricing section to move above the testimonials, and the signup form's validation quietly changes. You ask for a fix to the mobile nav, and the font sizes drift. Nothing tells you what changed, because the unit of change is the whole app. By the eighth prompt you are writing paragraphs that describe your own app back to the tool, enumerating the parts you like so they survive the next generation. The prompt has become a changelog you maintain by hand, which is the one job a prompt is worst at.

I want to be precise about the claim. This is not sloppiness in any one product, and better models shrink the blast radius without changing the shape. The collapse comes from the architecture: one-shot generation keeps no durable structure between your intent and the code, so every change re-litigates the whole. The rest of the industry has been converging on the same diagnosis. Cursor 3 shipped Plan Mode in April, and the same month Anthropic shipped Claude Ultraplan, which drafts a plan for you to approve before anything runs. Plans are becoming the consensus answer. We agree with the diagnosis. We just think the plan should stay on screen and stay alive for the whole life of the project.

What Canvas does instead

Project Canvas starts the same way the one-shot builders do, with a typed idea, because that part they got right. What happens next is different. OMEGA drafts the plan as a graph of nodes on the canvas, and at that stage the plan is the product. You delete the node you disagree with and add the one the draft missed, all before a single line of code exists. Underneath, OMEGA's Neural-Fractal Agentic AI™ (NFA) runs each node as a scoped unit of work with its own context, rather than one giant prompt that has to hold the entire app in its head at once.

Builds are sectioned. Each node produces a bounded piece of the app, which means a change request maps to a node instead of to "the app". When code gets generated you review real diffs, accepting or rejecting each one, so you always know exactly what changed. The code lands in your git repo: Canvas imports files, a local folder, an existing repo, or a Figma link, and everything it writes is ordinary code with ordinary history. A live preview updates beside the plan while you work, and a terminal sits on the same surface for the moments you need one. When you ship, you deploy to your own host, under your own account.

If the design itself is the hard part, Design Studio sits one bridge away: a full AI-guided UI/UX studio with frames on an infinite canvas and a copilot that proposes edits you review and can undo, feeding straight into the Canvas build so the design and the code stay one project instead of drifting apart.

The same app at week three, in both worlds

Abstract architecture arguments are cheap, so here is the walk. The app: an appointment-booking site for a physical therapist. A services list, a calendar with open slots, a booking form, a confirmation email, and a small admin view. Deliberately boring, and exactly the kind of app both worlds produce impressively in week one. I mean that sincerely. In week one the one-shot version and the Canvas version both look great, and if the project ended there this post would have no argument.

Week three is when real software happens, because the therapist has used the thing and now has requests. Intake forms should attach to a new client's first appointment. Tuesdays need to be blocked for hospital rounds. The confirmation email needs a reschedule link. And one client in Phoenix saw the wrong hour on her booking, because Arizona does not observe daylight saving time and somewhere in the code a naive date is pretending it does.

Week three, one-shot world

Each request becomes a prompt against the whole app. The Tuesday block seems safe, and mostly is. The intake forms are not: they cut across the data model and the booking flow at once, and the generation that adds them also reshuffles the admin table you had already gotten the way you wanted. You do not find out from a diff you were asked to approve, because the builder never put one in front of you. You find out by clicking around, which is why by now you keep a text file of things to re-check after every prompt. That text file is the tell. You are hand-maintaining a regression suite for changes you cannot see.

The timezone bug is worse, because it is a bug rather than a feature. You cannot describe the fix, only the symptom, and then you hope. Something changes. The Phoenix booking looks right now. Whether anything else broke, you learn by more clicking. Around this point most people I have watched do the sane thing and move the code into an editor, which works, except they arrive owning an app with no history. Every decision from week one sits in one undifferentiated pile of generated code, and the archaeology starts from zero.

Week three, Canvas world

The plan graph from week one is still on screen, and this is the part I care about most, because the graph is the memory. Intake forms become a new node wired between the services node and the booking-email node. The sectioned build touches those sections and nothing else, and the diff shows precisely what it did: a schema migration and a form component, plus one edit to the email template. You check it in the live preview by booking a fake appointment for a fake new client, then accept the diff.

The Tuesday block is an edit to the calendar node's section. The reschedule link is an edit to the email node. The timezone bug gets debugged rather than described: the terminal is on the same surface, so you reproduce the Phoenix booking and find the naive date construction, and the fix lands as a small reviewable diff on the booking section. Your git history now tells the story from week one to week three in commits you actually reviewed, and the deploy at the end goes to the same host as the first one, on your account.

Because Canvas is a surface of OMEGA rather than a standalone toy, the project's decisions persist too. The 4-layer memory and the Brain knowledge graph carry your week-one choices into week three, so nothing depends on you re-explaining the app to the tool. If you started the build on one model and want a different one for the tricky bug, you can swap models or providers mid-build without losing context. Local models run through Omega-MLX on Apple Silicon, and bringing your own keys carries no token markup.

What you own at the end

When the week-three dust settles, look at what each world leaves you holding. In the one-shot world the durable artifact is a chat transcript plus a pile of generated code, and the transcript is the more accurate record of the two. In Canvas the durable artifact is a plan you can still edit and a repo whose history you reviewed, deployed on your own host.

Ordinary code in an ordinary repo also means Canvas plays fine with editors. I wrote a whole post about that coexistence in Project Canvas vs Cursor; the short version is that Canvas commits normal code and your editor does not care who committed it.

There is also the part one-shot demos never reach: operations. The confirmation and reschedule emails from week three need to keep sending while your Mac sleeps, so you hand them to Automations, OMEGA's plain-English builder for triggers and schedules with an always-on VPS runner. If you already run n8n, Automations import those graphs directly.

Use the right shape

My bottom line has two halves. If the thing dies on Friday, use a one-shot builder and enjoy it. That first-shot speed is real, and for a landing page or a hackathon demo nothing we make will beat a single paragraph of prompt. But if there is any chance the thing lives, week three is already on the calendar the moment you type the first prompt. Build it where the plan survives and the changes are diffs you review, in a repo and on a host that are yours.

Project Canvas ships inside OMEGA, native on macOS 14 and up on Apple Silicon. The download is the fastest way to test the week-three argument for yourself, and the current numbers are on the pricing page.