What's happening
You hit the Publish button in base44. One of three things happens, and each one looks different in the UI but feels the same to you — the deploy did not work. Either the build fails before publish with a thin "Build failed" message that gives you nothing actionable, or the publish badge turns green but the live site still serves the old version, or the publish hangs because your custom domain is stuck on "DNS pending" and never lets the deploy go live.
Base44 deploy failures fall into three distinct modes — a build error before publish, a stale cache after publish, and a DNS-pending block on a custom domain. The 60-second diagnostic is to check the build log first, then the bundle hash on the live URL, then the domain status badge. The fix is different for each mode, so identifying which mode you are in before changing any code saves hours of guessing.
You are reading this because something looked broken and the base44 UI did not tell you which thing. The three modes have different root causes and different fixes. Mixing them up is how teams burn an afternoon redeploying the same broken code or clearing the wrong cache. The diagnostic below tells you which mode you are in within a minute.
The three deployment failure modes
There are exactly three ways a base44 deploy can go wrong. Knowing which one you are in is the entire fix.
Mode 1: Build error before publish
The build runs on base44's servers, the compiler errors out, the publish never starts. The UI shows "Build failed" with a short, often truncated log. The live site is unchanged because nothing was deployed. Your last working version is still serving.
Root cause is almost always a code change that breaks compile — most often an AI-agent edit that introduced an import to a file that does not exist, a TypeScript error the agent did not catch, or a config change that conflicts with the build pipeline. The agent emits optimistic edits, the platform tries to compile, the compiler refuses.
This mode is the most common. In the last 20 deploy-failure engagements we ran, 13 were build errors. Of those, 9 traced back to an agent regression — see /fix/ai-agent-regression-loop-breaks-code for the pattern.
Mode 2: Stale cache after publish
The build succeeds. The publish badge turns green. You visit the live URL and see the old version. You refresh. Still old. You are convinced the deploy did not actually run, but it did — the bundle is on the edge, just not the edge node nearest you, or your browser cached the previous bundle and is bypassing the network.
Root cause is CDN cache propagation lag, sometimes masked by aggressive browser caching. Base44's edge invalidates over a few minutes after publish, but the propagation is not instant across all geographic nodes. Browsers also cache the previous HTML and JS chunks with long max-age headers, so even after the edge is current the local cache is not.
This mode looks like a deploy failure but the deploy already worked. The fix is purging — not redeploying.
Mode 3: DNS-pending block on custom domain
The build succeeds. The publish appears to start. The domain status badge is "pending" and never changes. The live URL on your custom domain returns an SSL error or a generic "site not found" page. The .base44.app subdomain shows the new version correctly.
Root cause is a domain-handshake failure unrelated to the build itself. DNS records may not have propagated to base44's resolver, CAA records may be blocking Let's Encrypt, or base44's verifier itself is stuck and needs a manual reset. The deploy code is fine. The infrastructure routing the public traffic to it is not.
This mode has its own dedicated playbook because the diagnostic and fix are entirely separate from build and cache concerns. Full reference: /fix/domain-dns-stuck-pending. If the domain badge says pending past 2 hours, stop reading this page and go there.
The 60-second diagnostic
Run these in order. Do not skip steps. Each one rules out a specific mode.
- Open the deploy attempt in base44. Note whether the status is "Build failed", "Published", or "Pending".
- If "Build failed": scroll to the bottom of the build log. Note the last line before the failure marker. You are in Mode 1 — go to "The fix — by mode" below.
- If "Published": open the live URL in an incognito window. Confirm the version matches what you just shipped (look for a visible UI change, a string update, or a new route).
- If incognito shows the new version but your normal browser shows old: you are in Mode 2 with a browser cache. Hard-reload with DevTools open and "Disable cache" on. Done.
- If incognito also shows the old version: view page source. Find the bundle filename or hash (typically something like
_next/static/chunks/main-<hash>.js). Compare to the new build's hash from the deploy log. - If hashes differ between source and live URL: edge propagation is incomplete. You are in Mode 2. Wait 5 to 10 minutes and recheck.
- If hashes match but content still looks old: the build may not have included your latest source. Re-sync your editor with base44 and re-publish.
- If status is "Pending" and never changes: check whether you are deploying to a custom domain. If yes and the domain badge says pending, you are in Mode 3 — go directly to /fix/domain-dns-stuck-pending.
- If status is "Pending" without a custom domain: the build is hung on base44's side. Cancel the deploy from the UI if possible, wait 2 minutes, and re-trigger. If it hangs twice in a row, file a support ticket.
- If none of the above match: you are likely in a mixed mode (e.g. build succeeded but a route is broken in production only). Check the network tab for 404s or 405s — if present, you may be hitting a different bug class that masks as a deploy failure.
If steps 1 to 9 still leave you unsure, treat it as Mode 1 by default — the build log is the source of truth and re-reading it carefully usually surfaces a missed error.
The fix — by mode
Each mode has a different remediation path. Apply the one that matches your diagnostic result.
Fix Mode 1: Build error before publish
Extract the real error, fix the underlying code, re-publish.
Open the build log and copy the last 30 to 50 lines into a local text editor. The actual error is usually 5 to 15 lines above the "Build failed" marker, not on the marker line itself. Look for keywords: error TS, Module not found, Cannot find module, SyntaxError, Unexpected token.
Reproduce locally if the log truncates. From a synced clone of your base44 project:
# Match the platform's build command exactly
npm install
npm run build
The local build prints the full error with file path and line number. Fix the issue at the source — usually a missing import, a typo introduced by an AI edit, or a stale dependency. Common culprits:
Module not found: Can't resolve '@/components/SomeButton'
-> Agent added an import to a file it never created. Create the file or remove the import.
error TS2322: Type 'string' is not assignable to type 'number'
-> Agent edited a prop type without updating callers. Trace usages and align types.
error: Unexpected token (line N)
-> Agent emitted invalid JSX or a half-finished edit. Check the file for syntax breakage.
Once the local build passes, sync the fix back to base44 and re-publish. If the build fails again with a different error, you have a chained regression — fix and re-run until clean. Do not re-publish into a known-broken state hoping the platform compiles differently. It does not.
Fix Mode 2: Stale cache after publish
Confirm the deploy actually shipped, then purge browser and edge caches.
# Compare the live bundle hash to the new build's hash
curl -s https://yourdomain.com | grep -oE '_next/static/chunks/[^"]+\.js' | head -3
If the live URL returns the new hash, the edge is current and your browser is the problem. Hard-reload with cache disabled, or open in incognito, and the new version will appear. Add a visible "last updated" string to your build to make this confirmation faster on future deploys.
If the live URL returns the old hash, edge propagation is incomplete. Wait 5 to 10 minutes — base44's edge invalidation is not instantaneous globally. If the old hash persists past 15 minutes, re-publish to force a new invalidation cycle. If it persists past 30 minutes after a re-publish, file a support ticket — the edge cache is stuck and only base44 can purge it.
For users on your live site who are seeing stale content, you cannot purge their browsers remotely. Communicate the issue and instruct them to hard-reload, or ship a cache-busting query string on critical assets going forward. If your app depends on real-time correctness (auth, payments, dashboards), short cache headers and bundle-hash filenames are a structural fix rather than a per-deploy workaround.
Fix Mode 3: DNS-pending block
This is its own playbook. Validate DNS from multiple resolvers, check CAA records, and re-trigger base44's verifier. Full diagnostic and fix steps including the support-escalation path are at /fix/domain-dns-stuck-pending.
In short: run dig +short A yourdomain.com and dig +short A yourdomain.com @8.8.8.8 and confirm consistency. Run dig CAA yourdomain.com and confirm Let's Encrypt is permitted. If both check out and the badge is still pending past 24 hours, base44's verifier is stuck on its end and only support can reset it. Do not keep redeploying — the deploy is not the problem.
Pre-deploy checklist (prevent recurrence)
Run this from a local clone or git mirror before clicking Publish. Catches roughly 80% of Mode 1 failures.
- Typecheck.
npx tsc --noEmit. Zero errors before deploy. - Lint.
npm run lintif configured. Warnings allowed, errors block. - Build.
npm run build. Must succeed end-to-end locally. - Smoke render. Start the production server (
npm start) and load the home route plus one protected route. No console errors, no 404s on critical assets. - Diff review. Read the diff from your last known-good deploy. Look for AI-agent edits you did not explicitly request — these are the most common deploy breakers.
- Bundle hash check. After publish, compare the live URL's bundle hash to the new build's hash. Confirm the deploy actually shipped before declaring done.
- Smoke test on the live URL. Open in incognito, exercise login, exercise one data fetch. Catches Mode 2 and any silent runtime regressions.
Full pre-deploy checklist with the exact commands and CI-runner config is at /blog/base44-deployment-checklist. For teams shipping more than once a week, formalizing this as a CI step is the structural fix — see /blog/base44-production-readiness-guide for the production-readiness pattern.
When to call us
Three or more failed deploys in a single week is a signal worth treating structurally. Recurring failures usually trace back to an architecture issue — an AI agent regression loop, a fragile import graph, or hidden coupling between routes that keeps breaking on innocuous edits. Patching each surface symptom costs more total hours than running a one-time audit.
If your deploys are failing repeatedly and you cannot tell whether it is the platform, the agent, or your code: book an audit. We will trace the failure pattern across recent deploys, identify the root cause, and recommend either a fix-sprint, a migration, or a structural refactor.
If a single deploy is blocking a launch this week and you need it shipped fast: we run fix-sprints specifically for deploy-blocked teams. Standard scope includes Mode 1 build error remediation, Mode 2 cache purge, Mode 3 domain unstick (with parallel support escalation), and a hardened pre-deploy checklist so the same failure does not return next week.
If your team is at the point where deploy failures are a weekly occurrence and base44 is no longer paying back the time it was supposed to save, the conversation is no longer about deploys — it is about whether the platform is still the right host. We help teams evaluate that honestly: see /migrate.
Related problems
- Base44 custom domain stuck in DNS-pending state — the canonical reference for Mode 3; if your deploy is blocked on a domain handshake, start there.
- CSR makes apps invisible to Google — a successful deploy that nobody finds is its own kind of failure; SEO is a separate post-deploy concern.
- Backend functions return 404 because routing is broken — sometimes a "successful" deploy ships with broken function routing, masking as a runtime bug rather than a deploy bug.
- AI agent regression loop breaks working code — the most common upstream cause of Mode 1 build errors; if the same routes keep breaking after agent edits, this is your real problem.