Reuses the exact snippet shipped on index.html in 6bb529a, inserted
verbatim as the last thing in <head> (before </head>). Diff is this
file only; the ld+json @graph block is byte-identical.
User-supplied, private self-hosted Plausible instance. Snippet inserted verbatim (unmodified,
byte-for-byte) as the last thing in <head> of index.html only, immediately before </head>.
No other page touched; no CSP exists on the site so no policy change needed.
Checks: verify-html.py PROBLEMS 0; node --check script.js OK; tracker script HTTP 200
application/javascript.
- blog/posts/odoo-19-to-20-invoice-migration-with-n8n-and-mcp.html: in-post image
much.png + og:image
- blog/posts/track-the-oca-modules-you-actually-use.html: in-post image
oca_module_status.png + og:image
- blog/index.json: optional "image" key on those two entries only (text splice)
- script.js: renderBlog() draws .blog-thumb only when the entry carries an image
- style.css: .blog-thumb rule
- sitemap.xml: lastmod 2026-10-24 for the invoice-migration post
Built by profile webmaster (run 20261024_094206_5c4f28, verified PROBLEMS: 0 /
node --check OK); committed by olchi after that run died on an OpenRouter 402.
Add a Video Credits legal-card after Image Credits and before Trademark
Notice, carrying the 10 user-supplied Pixabay video attributions verbatim
(hrefs, utm params and the intentional /de// double slash preserved).
Rows use the existing .credit-row pattern; .video-credits mirrors
.image-credits in the page's inline <style>. Links carry target=_blank
rel=noopener to match the Image Credits convention. Meta description now
lists image and video credits.
The homepage cards gave no domain count to Side Hustle or On the Rise and
gave three to Powerhouse, while the in-app plan page (odoo/upsell.html) and
the published terms.html both say one domain for Side Hustle and three for
On the Rise and Powerhouse. Cards now read 1 / 3 / 3; PRODUCT.md and
llms.txt carry the same counts so no future page has to guess.
script.js: delete applyCoupon(). Its only caller was the coupon button deleted above,
so the function was unreachable dead code that still carried the removed 'Coupon FREE
TRIAL applied - 1 month free' promise in a publicly served file. It would also have
thrown on the two DOM ids that no longer exist.
PRODUCT.md: this file is served publicly and still advertised $19.40/mo, $36.25/mo,
$49.60/mo, the FREE TRIAL coupon, 'yearly billing saves roughly 8-10%', a 'Satisfied
or reimbursed' guarantee and 'redundant slots'. Corrected to the yearly list prices
the site publishes and to the decisions above.
Two new root-level pages, assembled from legal.html so they inherit the existing
head, fonts, style block and .legal-* cards. The trial email's /legal/privacy and
/legal/terms links 404 on the live site and are repointed here.
Both are factual drafts built from product facts (data held, the six regions, Stripe,
cancel-anytime, backup slots) and are NOT lawyer-authored. Decision 12 marks them for
legal review; they must not be treated as final before that review.
Applies the 16 findings the user answered in projects/active/odoo-hosting-2027-landing/
decisions-2026-10-21-user.md, using the wording from
copywriter/out/site-fix-wording-2026-10-21.md.
index.html: Powerhouse 535 -> 595 in the card and in the JSON-LD Offer; delete the
three Save 8%/9%/10% badges and the empty badge div on the Empire card; replace the
'Save 15% with yearly billing' line and the coupon message text (ids kept - script.js
reads them); delete the FREE TRIAL coupon input block; qualify the checkout line as
'Card required to buy, not to start'; fix 'redundant slots' to the real rotating-slot
model; drop the 'coupon codes for startups and NGOs' promise; add Privacy and Terms to
the footer.
email/trial-confirmation.html: stop promising backups, domain mapping and SSL on the
trial (the trial has none); state what the trial is not; copyright 2024 -> 2026;
repoint Privacy/Terms from the 404 /legal/privacy and /legal/terms to the new pages.
support.html: state that custom and OCA modules install from On the Rise up and that
Side Hustle has no module installation.
odoo/upsell.html: '4 weeks free' -> '30 days free'.
blog: the backup speed-run no longer sends readers to a non-existent hosting
dashboard; my-first-post loses the 30-day refund promise and the dashboard domain
step; community-vs-enterprise-cost quotes $214/year instead of $19.40/month;
odoocommunity-agents drops 'per-seat licensing' from the body and both meta
descriptions.
sitemap.xml: add /privacy.html and /terms.html.
llms.txt: publish the Powerhouse price and list the two new pages.
Evidence: every old string verified gone and every new string present in the working
tree; 12 HTML files tag-balanced; JSON-LD and sitemap XML valid.
Match the pattern index.html already uses (media=print + onload swap,
noscript fallback) so the new page adds no render-blocking stylesheet.
Page-scoped critical CSS stays inline.
New page odoo-hosting-2027.html (feature + lifetime-cost comparison tables,
Odoo Online exclusion, Enterprise growth path, JSON-LD). Links it from the
homepage pricing CTA, adds it to sitemap.xml, adds llms.txt for AI-SEO.
Updates the homepage footer tagline to name AI Agents and N8N
automations explicitly. Markup-preserving: existing <strong> emphasis
on "stability" and "power" is unchanged; no structural, style or
layout changes.