No placeholder text in shipped pages
On this page
Surface a WARN when shipping HTML / Svelte / Astro / Markdown content contains placeholder patterns that escape into production embarrassingly often:
| Pattern | Why it’s a problem |
|---|---|
lorem ipsum... |
Should have been replaced with real copy; usually a never-finished draft |
INSERT TEXT HERE / INSERT CONTENT HERE |
Template scaffold that didn’t get filled |
<<PLACEHOLDER>> / {{TEMPLATE_VAR}} |
Template marker that wasn’t substituted |
http://localhost / http://127.0.0.1 |
Dev URL that didn’t get swapped for prod |
https://example.com |
Documentation example URL that didn’t get personalized |
FIXME / XXX / HACK |
Markers explicitly tagged as “not done” |
TODO: ship / TODO: prod / TODO: before launch |
Tasks the author flagged as required-before-shipping |
Tier 3 WARN - these aren’t catastrophic but they consistently show up in production sites and damage credibility. The frame is opinionated about what counts as a “ship-blocker placeholder”; suppress per-line when you legitimately need one.
Repository docs#
README, CHANGELOG, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT and LICENSE files are skipped: a site build doesn’t serve them, so a local-preview URL in a README is not shipping content.
Fix#
Replace placeholder with real content, OR move the file outside the shipping path:
content/posts/ # ships - placeholders fire
content/_drafts/ # ignored by build - add to [scan] exclude-paths
examples/ # documentation, not shipping - suppress with appframes-ignore
For documentation that legitimately uses these patterns:
<!-- appframes:disable-next-line web/html-placeholder-content -->
Run with: `curl http://localhost:8080/`
Or for whole-file suppression (typical for examples/ directories):
<!-- appframes:disable web/html-placeholder-content -->
Suggestion: pair with build steps#
The frame catches placeholders at commit time. A complementary pre-deploy check should also grep your built dist/ / .svelte-kit/output/ to catch placeholders that survived templating. The frame doesn’t do that (it scans source, not build output) - wire it as a separate CI step.
WARN lets the push through and records the finding. Turn frames on per repo on the dashboard's Policy page - see choosing what the gate checks.
Source on GitHub Live demo How it works Questions: contact@nimblegate.com