
I rebuilt my entire frontend during a break. I was not planning to. The break was the point.
Two days off from O9X. No coding, no planning, no features. What came out of it was the clearest hosting decision I had made since I started building. I did not make it by thinking harder. I made it by stopping.
This is not a story about TanStack Start versus Next.js. It is a story about how an accidental experiment on a low-stakes project gave me evidence to walk away from two weeks of working code on a high-stakes one.
When the Math Stopped Feeling Safe
When I pushed the first working version of O9X to production, I had two options.
Cloudflare was the preference. I had built the code to run there. But as I documented in Log 10, Next.js and Cloudflare are not a clean combination. The deployment worked. The friction did not go away.
So I pushed to Vercel instead. The interface loaded. The data moved. Things looked fine.
Then I checked usage after a week. Forty minutes of Fluid Compute consumed. For a prototype with three collections and a handful of users.
I ran the extrapolation. At full production — 1,000+ associates, multiple customer logins, daily attendance processing — forty minutes would not hold. And Vercel’s pricing has no ceiling: Fluid Compute includes 4 hours per month, then costs 0.0106 per GB-hour after. Invocations include one million per month, then cost $0.60 per million after.
Expected cost: roughly $45 per month combining Vercel Pro and Supabase — above my Rs 3,500 ceiling but manageable on paper.
The worry was not the expected cost. It was the failure case. One runaway function. One bad loop. The meter stays open while you sleep. In 2022, one developer woke up to a $17,000 Vercel bill from a single misconfigured function. That stayed with me.
Cloudflare cuts the CPU at the limit on the free tier — the tier I am currently on. You get an error. You debug it. You fix it. The bill does not compound.
I knew the worry was partly irrational. The probability of a runaway bill was low. But I had a ceiling to protect and Vercel felt like a variable I could not bound. So instead of buying the Pro plan, I stopped.
This is where my project brief mattered. Every workflow, every feature, every logic decision was written down. The code was not the asset. The documentation was. If I had to start from scratch tomorrow, I could. That knowledge made stopping feel safe rather than wasteful.
The Question That Broke the Sunk Cost
On the first day of the break, I ran a thought experiment I have used before. Andy Grove wrote in Only the Paranoid Survive about asking what a new CEO would do — someone who walks in without attachment to existing decisions or existing code. Not because things are broken, but because the question removes attachment.
I asked myself: if I only had my documentation and was starting O9X from scratch today, what stack would I choose? Not what have I already built. Not what is working right now. What is the best choice given what I know today?
The answer was not Next.js. Next.js made sense for its AI fluency and my familiarity with it. But the Cloudflare problem was unresolved. And my cost ceiling pointed toward Cloudflare as the only hosting option that removed variable cost risk entirely. The thought experiment did not give me a new answer. It gave me permission to act on the answer I already had — without the weight of the work already done.
The Experiment I Did Not Plan
The second day, I needed something to do. Not O9X. Something different.
I had been meaning to rebuild The Operator Stack website. It was running on Next.js. While browsing developer content during research, I came across TanStack Start — a framework I had seen before and dismissed when I was deep in the Next.js decision. It had strong developer traction. Cloudflare sponsored it. The foundations had been around long enough for AI to work with confidently. Because both Next.js and TanStack Start share React foundations, switching between them is closer to moving between dialects than learning a new language.
I rebuilt The Operator Stack in TanStack Start in one day.
The Cloudflare deployment went through without major problems. I tested data flow from Supabase. I pushed the AI to build components I was not sure it could handle. By end of day I had a working website and a clear picture of where TanStack Start’s thin AI training data would create friction.
This was not a planned test. It was a distraction that became proof.
The Operator Stack is a content website, not an ERP. I knew that. But the Supabase connection worked. The Cloudflare deployment worked. As I noted in Log 14, AI works best when the foundations are standard even if the surface is new. TanStack Start borrows enough from Next.js, and the shared React foundations mean substitutes exist for what is missing.
When the experiment worked on the lower-stakes project, the case for staying on Next.js fell apart. Not because the logic changed. Because I had live evidence instead of theory.
The Decision and What It Actually Cost
TanStack Start had already taken one day on The Operator Stack. O9X took one more.
That speed came from Log 6. Every function was commented. Every workflow was written down. The AI did not need to reverse-engineer what had been built. It had a clean specification. I handed it the documentation, stated the framework, and it executed.
One day on a content site is not the same as production ERP load. I knew that. But it was evidence I did not have before, and evidence beats theory.
I deployed on Cloudflare. Then I asked my team to test it.
Their feedback was simple: data felt like it was arriving faster. UI transitions were smoother. The application felt more responsive — not because the underlying fetch time changed, but because TanStack Start loads data in the background as users move through the interface. By the time they click, the data is already there.
An expert could get the same result in Next.js. I could not. Spending effort on what an expert could do is not a useful benchmark for a solo operator building with AI for the first time.
My decision was not a spreadsheet. It was three inputs. A cost ceiling I needed to protect. An accidental experiment that gave me live evidence on a lower-stakes project. And team feedback that confirmed the output was better, not just different. None of these were planned. Together, they made the decision obvious.
What I Am Still Figuring Out
TanStack Start is new. AI training data on it is thin. The foundations are solid, but as O9X moves into more complex features, I will hit walls where the AI has less to draw from. The attendance module’s compliance logic — state-by-state rules, grace periods, overtime exceptions — is where I expect the gap to show first.
Before each coding session, I feed the latest framework documentation directly into the AI’s context. Tools like Context7 MCP pull current documentation for any tool and feed it to the AI coding assistant, so it works from what is accurate today rather than what it learned during training.
The experiment worked. The migration worked. The team feedback was positive. But I am not yet in full production. The real test of this decision is still ahead.