Why
A full audit (2026-08-08) of the 360tft website repo found 53 confirmed fabricated blog posts (invented named coaches/children/parents with quoted dialogue, “Name from City” testimonials, “In my experience,000 players” generator artefacts): 27 LIVE on 360tft.co.uk today, 26 queued to auto-publish (first was due 2026-08-11). Roughly 10-15 more are expected in the 96 posts still being read (completion audit running). Fabrication is banned absolutely by the house content rules, and Kevin authorized removal same day.
Kevin’s second instruction shapes the mechanism: make the replacement “SEO brilliant and link to products.” Deleting live URLs would discard their accumulated search equity, so live posts are rewritten IN PLACE, not deleted.
What
- Queued fabricated posts (26): DELETE — never published, zero equity,
pure risk. PR
auto/remove-fabricated-posts(in flight). - Live fabricated posts (27 + any the completion audit adds): REWRITE IN
PLACE — same filename/slug/URL, fabricated narrative stripped, rebuilt
from Kevin’s real corpus only:
- Sources: the book, the 328-session diagrammed library + fca_sessions, Kevin’s WhatsApp corpus, FCA module extracts, verified member quotes (first names only). Per-post source accounting; anything ungroundable is cut, never paraphrased into existence.
- Session-shaped posts embed REAL sessions with diagrams per [[coaching-deliverables-must-embed-real-sessions]] — a coach should see a runnable session, not prose about one.
- SEO: keep the slug, sharpen title/meta/H2s to answer the query the post ranks for, internal links to surviving posts, and product links where the product is genuinely the means/source (FootballGPT, 328 Sessions, FCA, Ball Mastery) — sell-without-selling, no pitch-mode closers.
- Voice: British English, no em dashes, anti-slop rules, Kevin’s grassroots lane.
- Full-name testimonial posts (9): fix to first names (policy repair, separate small PR).
- Link-integrity sweep after the queued deletions merge (internal links pointing at removed queued URLs).
Scope / process
- Batches of ~5 rewrites per PR on
auto/blog-rewrite-batch-Nbranches from origin/main. Kevin merges every PR by hand; nothing auto-merges. - Batch 1 targets the highest evergreen-search-value live posts (rondos, U12 defending drills, goalkeeper guides, first-session-with-a-new-team, striker movement).
- No homepage/landing/pricing surfaces touched — blog posts only.
verification: type: http url: https://360tft.co.uk/ pass_when_status: 200
Honesty artifact
Stated assumptions:
- This PRD was Approved by Kevin in chat on 2026-08-08 and executed for batch 1
(PR #22, merged) before this file existed in 360tft’s own
docs/prd/tree — it lived only in360tft-hub/docs/prd/and, at the time batch 2 was scoped, only in an uncommitted git stash in that repo. It is mirrored here now, unedited in substance, so this repo’s pre-commit PRD gate resolves correctly for batch 2 and any future batch. - The “27 LIVE” and “26 queued” fabricated-post counts came from a 2026-08-08 audit whose source list was not itself committed anywhere retrievable. Batch 2’s specific 5 posts were re-derived by pattern-matching live posts (dated on or before today) against the fabrication markers this PRD describes (invented named personas with quoted dialogue, fabricated parent/coach quotes), cross-checked against the total count implied by this PRD (27 live minus batch 1’s 5 = 22 remaining; pattern matching found exactly 22 candidates, which is strong but not certain confirmation the original audit list and this reconstruction fully agree).
Known gaps:
- No independent record of the original 53-post audit list exists in git history in either repo as of this batch. If the original list differs from the reconstruction above, some posts flagged live-fabricated by the original audit could be missed by future batches, or a clean post could be wrongly caught by the pattern match. Each batch re-verifies fabrication by reading the actual post content before rewriting, not by pattern match alone, which mitigates but does not eliminate this gap.
- This PRD is a content/copy programme, not a code change, so Gate 1
(failing test) and the Expected Experience block do not apply in their
usual form; the
verification:block above (site returns 200) is the closest available automated check for “the site still works,” not a content-quality check. Content quality is verified by human review (Kevin reviews and merges every PR by hand) plus the source-accounting HTML comment on every rewritten post.