Why your Bolt.new app looks generic, and why the demo may see an empty page

Bolt.new, from StackBlitz, builds and runs full JavaScript apps in the browser from a prompt, and a typical result is a React single-page app built with Vite and styled with Tailwind. That creates two problems worth separating. The app converges on the same layout and copy as every other prompt-built site. And because it renders in the browser, the HTML it serves is mostly empty, which matters to crawlers and to the IntentGrid demo alike. Here is what to fix first.

Last updated 2 October 2026.

Why Bolt.new apps converge

Bolt.new is built for speed from prompt to running app, and speed favours defaults.

  • A common starting stack. Unless you ask for something else, Bolt.new tends to reach for React, Vite and Tailwind with a familiar icon set, the same pieces most generated apps use.
  • Whole-app prompts. “Build a meal planner with a landing page” asks for a product and its marketing in one breath, and the landing page gets the least attention.
  • No copy step. The model writes every word on the first pass, and nothing in the flow asks anyone to replace it, so the first draft is what visitors read.

The app behind the page is often impressive. The landing page in front of it is the part that reads as generated.

What IntentGrid does and does not do for a Bolt.new app

IntentGrid rewrites words for each visitor: headlines, body copy, feature descriptions and button labels, based on how that visitor arrived. It works from the copy your page already has and keeps brand names, prices, dates and numbers on a do-not-touch list.

It does not touch your Bolt.new project, your code, your styling or your deployment, and it cannot fix a client-rendered page that serves no copy. On a page like that there is nothing in the HTML for it to rewrite.

Today the working part is a demo that renders a rewritten copy of a public URL in a sandbox on intentgrid.ai; adaptation on your own domain is early access, set up per site by hand. How it works has the full mechanism.

Client-rendered by default: what the demo actually receives

When a Bolt.new app is a Vite single-page app, its server returns index.html: a title, a meta description, an empty root element and a script. Every headline appears only after that script runs. The demo fetches the HTML and strips scripts, so on these apps it usually finds almost nothing to rewrite, and the preview comes back close to blank. That is a limit of the demo, and we would rather say so here than have you find out.

The same shell is what any crawler that does not run JavaScript receives, including many AI crawlers, and the head of that file is all a link preview reads. To see what they see, open View Source (not Inspect) on your deployed URL. If your headline is not in it, neither the demo nor those crawlers can read it.

An illustrative before and after

Illustrative example: a made-up meal-planning app, not a real site and not a recorded run.
Default, the same for everyone
Plan your meals effortlessly with AI
Arrived from a budgeting thread on Reddit, on a phone, on a Sunday
Plan the week's meals around what is already in your fridge
Clicked a search ad for “weekly meal planner”
A weekly meal plan, and the shopping list that goes with it

Same layout, same prices, same claims. Every version uses only what the original page already says: in this made-up case, planning around ingredients you have and a generated shopping list. On a client-rendered build, the copy would first have to be in the HTML for the demo to rewrite any of it.

What to fix first in a Bolt.new app

Roughly in order of how much each one changes for the effort:

  • Write a real title and meta description in index.html. On a client-rendered app it is often the only text a non-rendering crawler or a link preview ever reads.
  • Get the landing page into the HTML. Ask Bolt.new to prerender the marketing routes, or to build the landing page as a static page in front of the app.
  • Rewrite the hero yourself, in words a real user has used. One sentence written by hand beats any number of regenerations.
  • Ask for a different layout by name. Say what you want instead of a gradient hero and three cards: a product screenshot, a short demo video, one strong worked example.
  • Ban the stock phrases once, explicitly: “effortlessly”, “seamless”, “all-in-one”, “supercharge”. Then ask it to flag any sentence that could sit on a competitor's page.

The design half of the problem is covered in why vibe coded websites look the same.

Bolt.new questions

Why does the IntentGrid demo show a blank page for my Bolt.new app?

Because a client-rendered app sends an almost empty HTML file and builds the page with JavaScript, and the demo strips scripts before rendering. It sees the shell, not your copy. If your Bolt.new app is prerendered or server-rendered, the demo can read it. View Source on your deployed URL tells you which you have.

Is an empty HTML shell bad for SEO?

Google renders JavaScript, so it can usually still index the page, with some delay. Many other crawlers, including many AI crawlers, do not run JavaScript and see only the shell. For a marketing page, putting the copy in the HTML is the safer default.

Does IntentGrid change my Bolt.new code?

No. It does not connect to Bolt.new or to your repository. The demo works on the public page, and on-domain adaptation is early access, set up per site by hand, with installation details published when it ships.