Cloudflare Pages deployment

Emergence is deployed to the Direct Upload project emergence-notes-preview-8a14 on Cloudflare Pages. The production URL is https://emergence-notes-preview-8a14.pages.dev/, and the production branch label is main. The source repository remains private; Cloudflare receives only the generated files under site/public/ when a deployment is run.

The versioned deployment configuration is site/wrangler.jsonc. From site/, npm run deploy:cloudflare runs the type and formatting checks, the test suite, a clean Quartz build, and then uploads public/ with Wrangler. This is a deliberate Direct Upload workflow rather than a Git integration: pushing main and deploying the site are separate states, and a Git push does not publish automatically.

Current access and discovery mode

The Pages site is public to anyone who knows its URL. It is intentionally difficult to discover, not private:

  • every generated HTML page carries noindex, nofollow, noarchive, noimageindex in quartz/components/Head.tsx;
  • sitemap and RSS emission are disabled in quartz.config.yaml; and
  • unlisted: true continues to exclude a page from collection listings and client search data while leaving its direct HTML route available.

Do not add a site-wide robots.txt crawl block as a substitute for noindex. A crawler has to fetch the HTML to observe the robots meta directive; blocking the crawl can leave a bare URL eligible to appear in search results.

This mode is not suitable for confidential material. A page that must not be available to arbitrary visitors needs authentication or must remain undeployed.

Verification

Before deployment, the deploy:cloudflare script runs the repository checks, tests, and build. Also confirm that:

  1. generated HTML contains the global robots meta directive;
  2. sitemap.xml and index.xml are absent from site/public/;
  3. an unlisted: true test page is absent from static/contentIndex.json but its direct HTML file exists; and
  4. after deployment, the production URL and one direct unlisted route load without console errors on desktop and mobile.

For a later fully public launch, make one explicit publishing decision that removes the global robots meta directive and re-enables sitemap and RSS. Review the public URL, canonical metadata, and all previously unlisted pages separately; changing the hosting mode must not silently publish draft content.