Stage 4: Content
Goal: every public page carries text the owner approved and photos that are real, legal and light. Nothing on the site claims what the business can't prove.
Copy steps
- Inventory: list each page and item with what it needs (text, facts, photos) in
docs/data/content-plan.md. - Facts first:
- Facts (prices, inclusions, times, policies, safety notes) come from the owner via
docs/BRIEF.mdor a data file indocs/data/<type>/. - Missing →
PENDING-<who>in a flags list (docs/data/<type>/_SUMMARY.md). Never invent a fact.
- Facts (prices, inclusions, times, policies, safety notes) come from the owner via
- Draft: AI may draft, but the draft is marked as a draft (a
<prefix>_copy_statusmeta, or a list in the content plan) until the owner approves it. - Claims audit before anything ships (
references/copy-and-claims.md):- every claim is checked against its source;
- banned words are removed;
- numbers, awards and reviews need proof.
If the
claims-auditoragent is installed, run it.
- Owner review on staging, in batches. Send short messages, each with one question that can be answered with yes or no. Long questionnaires go unanswered for weeks.
- Legal pages: privacy notice (with the enquiry retention period), terms or booking policy (only the owner's wording), cookie notice if any tracking needs consent, and an imprint where the law requires one (Germany, Austria).
- Changes to live content go through
docs/data/content-changes/*.jsonandscripts/apply-content-change.sh(stagewp-ship). Never through hand edits on live.
Photo steps (details: references/photo-library.md)
- Keep the owner's originals in a backed-up folder outside git.
python3 -I scripts/photos/photos.py review <folder>→ a review CSV: duplicates (perceptual hash), photos already in the library, small photos.- Look at every candidate yourself, or have a cheaper model do it with the CSV. Decide IMPORT, HOLD-people (no consent yet), HOLD-licence (stock or unknown), or SKIP.
- Write the manifest (
group,file,key,alt). Run the import with--dry-run, then for real. Paste the printed lines intophoto-library.php. - Templates use
<prefix>_photo( 'key' ). Use at most two photos per section, and only the LCP image loads eagerly.
Gate (tick in SITE_STATUS.md)
- Every public page has owner-approved copy (dates)
- Real photos imported with alt text; AI images logged in
AI_IMAGES.md - Privacy notice, terms and policies published (owner wording)
- No
PENDING-facts and no placeholder text on public pages
Never
- Fake or imported review counts, star ratings, "as seen in" badges, "12,000+ happy customers" without proof. (We removed a made-up number like that, and made-up review counts on an old site.)
- AI images of a named room, place, product or person, or anything that says "this is what you get".
- Photos of people without their consent. Stock photos without a licence you can show.
- A price or a policy sentence typed into a template or a translation.