Guides

Your AI-built app shows a white screen. Here is what actually happened.

6 min read


You asked for a change, the AI said “Done!”, and now your app is a blank white page. No error, no message, nothing. Just white.

This is the single most common thing people bring me, and it is almost never as bad as it looks. Your work is not gone. Nothing is broken beyond repair. What you are looking at is one specific failure with a small number of causes, and you can usually find it in under ten minutes.

Why the page is white rather than showing an error

Modern apps build the page in your browser rather than sending a finished page from a server. The browser downloads a small, empty shell, then runs the app’s code to fill it in.

If that code stops with an error before it draws anything, the shell is all that remains. The browser does not know how to tell you what went wrong. It has an empty page and no instructions, so it shows you an empty page.

That is the whole mystery. The white screen is not a special kind of error. It is the absence of anything having been drawn.

Which is genuinely good news: the error message still exists. It is just somewhere you have not looked yet.

Finding the actual error

Open your app in Chrome, then press F12 (or right-click anywhere and choose Inspect). A panel opens. Click the Console tab.

You will very likely see a line in red. That is your answer, and it has been sitting there the whole time.

It will look something like one of these:

Uncaught TypeError: Cannot read properties of undefined (reading 'map')
Uncaught ReferenceError: supabase is not defined
Failed to load module script: Expected a JavaScript module

Do not worry about decoding it yourself. Copy the entire red line — all of it, including the file name and numbers at the end — and paste it back to your AI tool with a plain instruction:

This exact error is showing in the browser console and my page is blank. Find the cause and fix it.

The reason this works when “it’s still broken” does not: you have stopped asking it to guess. Before, it was rewriting code that looked suspicious. Now it has the actual failure.

The three causes I see most

Something is missing that the code expects

The most common by far. Your code asks for user.name, but user has not arrived yet — the data is still loading, or the request failed, or the field is spelled differently than the code expects. The code tries to read a property of nothing, and stops.

The error usually says Cannot read properties of undefined or of null. The word right after reading tells you which field was expected.

A file was renamed or deleted

You asked for a tidy-up, or to remove a feature, and something still pointed at the removed file. The app tries to load it, gets nothing back, and stops before drawing.

These errors mention a file path or say Failed to resolve import.

A key or setting is missing

Very common right after your first deploy. Your app worked on your computer because the keys for your database or login service were stored in a file on your machine. That file was never uploaded — deliberately, because it holds secrets. So the live version has no keys, cannot connect, and stops.

The tell is that it works locally and only breaks once published. Errors often mention undefined where a URL or key should be.

What to do before asking for another fix

Two things, and they take a minute.

Undo back to when it worked. If your tool has version history, restore the last working version before you try to fix forward. It is far easier to redo one change carefully than to unpick five rounds of speculative repairs stacked on top of each other.

Change one thing at a time. The reason people end up three hours deep is that each fix attempt changes several things at once. When something improves, you cannot tell what helped. When it worsens, you cannot tell what hurt.

When it keeps happening

If you fix the white screen and it returns two days later with a different error, that is a signal worth taking seriously. It usually means the app is built in a way that has no guard rails — nothing checks whether data arrived before using it, so any hiccup takes down the entire page.

That is a structural thing rather than a bug, and it is worth an hour with someone who can see the shape of it. An app that fails one component at a time is annoying. An app that goes fully blank every time anything goes wrong will keep costing you evenings.


Still stuck? The free setup session exists for exactly this. Bring the app in whatever state it is in — broken is genuinely fine, and honestly more useful than tidied up.

Want a second pair of eyes on yours?

Up to an hour, no charge, nothing to prepare. Bring it broken — that is more useful than tidied up.