Skip to content

feat: landing-chrome 404 page for unknown routes - #541

Draft
ghesp wants to merge 3 commits into
mainfrom
cursor/site-404-page-9894
Draft

feat: landing-chrome 404 page for unknown routes#541
ghesp wants to merge 3 commits into
mainfrom
cursor/site-404-page-9894

Conversation

@ghesp

@ghesp ghesp commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Summary

First slice is a static 404 with landing chrome; shader dissolve of the 404 into the 22px spot grid comes next.

Unknown routes now render a real landing-chrome 404 instead of the docs empty state. The page reuses the homepage Header, Footer bar, and Background (periwinkle atmosphere), centers a honey 404 block, and uses existing landing tokens (Lexend Light, JetBrains Mono, honey pill CTA).

This does not add the dot-grid dissolve of the 404 number, and does not touch the feature-card sticky work on #535. Docs-site misses (/owner/repo/... with a missing .mdx) still use DocsNotFoundPage.

Scope

  • app/ (hosted site, MCP, Ask AI)
  • packages/cli/
  • packages/mdx-bundler/
  • docs/ (product documentation)
  • Repo / CI / other

Type of change

  • Bug fix
  • New feature
  • Documentation
  • Refactor / chore

Test plan

  • bun run check passes locally
  • Tested locally (bun dev)
  • Updated docs/ (if user-facing) — N/A for this slice
  • Verified locally after review: 404 sits on landing periwinkle atmosphere (Background); closer CTA is gone; footer bar (logo, Built by Invertase, ©, Privacy, Terms) remains. Homepage Footer closer unchanged.

Notes for reviewers

  • pages/404.tsx holds the static page. The optional catch-all ([[...path]].tsx) still matches unknown URLs, so a 1-segment miss sets res.statusCode = 404 and renders kind: "siteNotFound" rather than returning { notFound: true }.
  • In this mixed App + Pages tree, { notFound: true } is served as Next.js 16’s App Router builtin 404 (__next_builtin__not-found.js), which is why docs misses already render from the catch-all instead of relying on notFound: true.
  • Homepage Footer gained an optional showCloser (default true) so this page can drop the “Bring your docs…” closer without changing the landing page.
  • ?debug on a 1-segment path still shows the existing debug card.
  • Repo docs 404s are unchanged (branding + GitHub source still go through DocsNotFoundPage).
  • Shader dissolve of the 404 into the 22px spot grid is intentionally out of scope.

Follow-up from review: landing Background on the 404; closer CTA removed on this page only.

Open in Web Open in Cursor 
Render a static site 404 with homepage Header/Footer so missing
single-segment paths hit pages/404.tsx instead of the catch-all.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@railway-app

railway-app Bot commented Aug 28, 2026

Copy link
Copy Markdown

🚅 Deployed to the docs.page-pr-541 environment in docs.page

Service Status Web Updated (UTC)
docs.page ✅ Success (View Logs) Web Aug 28, 2026 at 10:27 am
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-541 August 28, 2026 09:58 Destroyed
Next.js 16 mixed App + Pages routing serves the App builtin 404 when
getServerSideProps returns { notFound: true }. Unknown single-segment
paths now set 404 and render the landing-chrome page instead.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
@railway-app
railway-app Bot temporarily deployed to docs.page / docs.page-pr-541 August 28, 2026 10:01 Destroyed
Reuse Homepage Background so the 404 sits on the periwinkle field.
Hide Footer closer on this page only; landing Footer is unchanged.

Co-authored-by: ghesp <ghesp@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants