Skip to content

Sites: unpublished website renders blank 200 pages, hiding published changelog/blog/docs #197

Open

Description

@s3rot0n1n

Summary

If a team has never published its website, its public pages are blank. /changelog, /blog and /docs return 200 with an empty page: no header, no content, no footer, no message. Published changelog entries, blog posts and docs don't show either. The homepage returns a 404 that is also blank.

A visitor, or the team owner checking their site, sees a blank screen. Nothing explains that the site hasn't been published yet.

Steps to reproduce (QA, v0.0.1)

  1. Use a team that has no site release. On QA, first and hathi were like this before 2026-11-07; first still is.
  2. Publish a changelog entry (or a blog post or doc) from the dashboard.
  3. Open https://first.frontlit.cluster.clqa.site/changelog.
$ curl -s -o /dev/null -w "%{http_code}" https://first.frontlit.cluster.clqa.site/changelog
200   # body renders nothing visible
$ curl -s -o /dev/null -w "%{http_code}" https://first.frontlit.cluster.clqa.site/
404   # also renders nothing visible

docs-sanity has a release, and the same routes render normally there. Publishing hathi's Changelog page (Website → Pages → Changelog → Publish) fixed hathi's /changelog right away.

Cause

apps/sites/components/site-chrome.tsx renders /changelog, /blog and /docs through SiteChrome. pageLayout() falls back from the index page to the homepage, then to []:

const page = (await getPageBySlug(teamId, slug)) ?? (await getPageBySlug(teamId, ""));
return page?.layout ?? [];

If neither page is published, the layout is empty. There is no content-feed data slot, so the published entries never render. The comment ("A site can expose system content before its layout is published") says this content should still show, but nothing renders it.

Expected

Choose one, keeping it simple:

  • Show the content anyway. If the layout is empty, render the built-in content feed (changelog, blog or docs index) with a minimal themed header and footer built from page-builder primitives. Published content is then always reachable.
  • Or say the site isn't live. Show a clear "This site hasn't been published yet" page, and return 404 or 503 for these routes, not a blank 200.

Separately, the dashboard could warn when someone publishes a changelog entry, post or doc while the website has no release, for example: "Your website isn't published yet, so this won't be visible."

Notes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingseverity: mediumImportant, schedule soon

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions