Hi Checkpc2012,
First, I’d edit the post and remove the project ID, deployment IDs, team name, and commit hash. They are not API keys, but they are still internal project/account identifiers that usually do not need to be public.
For the issue itself, the useful distinction is:
Generated deployment URL -> 401 because Deployment Protection is enabled
Stable production alias -> 404 NOT_FOUND at Vercel edge
That does make it look more like alias/routing state than a Next.js route problem, especially if the app build completed and the deployment is Ready.
I’d run these from the same Vercel scope:
vercel switch
vercel alias ls --limit 100
vercel inspect dpl_2B8FZLfK1UXNASiY8JjnpfHXcJGR
Then check whether 3t-app-staging.vercel.app appears exactly once and points to the current deployment. If there are old/stale aliases for the same project, remove the stale one and assign the alias again:
vercel alias rm 3t-app-staging.vercel.app
vercel alias set dpl_2B8FZLfK1UXNASiY8JjnpfHXcJGR 3t-app-staging.vercel.app
If the CLI already shows the alias correctly assigned after re-setting it, but the public URL still returns:
X-Vercel-Error: NOT_FOUND
then I don’t think more app-code debugging will help much. At that point the useful public evidence is just:
Alias: 3t-app-staging.vercel.app
Deployment state: Ready
Alias shown on deployment: yes
Public alias response: 404 NOT_FOUND
Latest X-Vercel-Id: gru1::82srb-1781564125375-b149eb9c7ef8
Timestamp: 2026-06-15T22:55:24Z
Generated deployment URL returns 401 due to Deployment Protection
That should be enough for Vercel to check whether the alias exists in the control plane but has not propagated correctly to the edge routing layer.