The public post route first looks for a published post; if there isn't one, it checks platform access and, only then, loads the draft. A draft renders in the full blog template with a DRAFT PREVIEW banner and metadata that sets index:false, follow:false. No preview token exists, and there is no public URL a search engine could reach.
Also called: preview post · staff preview · see it before it goes live
- 1loadPost() tries the published post first, then requires the platform.view capability before loading a draft.
- 2A visitor without platform access sees the normal 404.
- 3generateMetadata() returns a DRAFT-prefixed title with robots index:false, follow:false for a draft.
- 4The page renders the same hero, table of contents, prose styling and closing CTA the live post will have.
The reason is written into the data-access layer: "Keith 08-20: read the draft in the real template before it goes live, instead of judging a post by an admin textarea." The safety condition is stated in the same breath — the caller must have checked platform access first, and "the public page never uses this without that gate." A preview token was deliberately avoided because a token is a URL that can leak.
- Drafts could only be judged in a plain editor.
- Preview links are shareable URLs that search engines can find.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →