Commit Graph
16 Commits
Author SHA1 Message Date
webmaster 3d8fe194be policy(2026-11-01): publish the three new commercial promises
- terms.html: cancel any time + refund unused time (pro rata); delete the
  no-refund sentence and the 'no refund promise beyond' clause
- terms.html: prices are tax included (was 'plus tax where it applies')
- index.html: order widget #orderPlanTax text '+ tax' -> 'tax included'
  (id/class kept; static text, no JS reads or writes it)
- support.html: add the AI-agent-urgent + 24h email support promise,
  bot still scoped to quick fixes
- odoo-erp-automation-bootcamp/index.html: seat transferable any time,
  cancellable up to two weeks before the 21 Jan 2027 start
2026-11-01 16:33:27 +00:00
webmaster 137bd1a2ae feat(staging): inbound links so /odoo-staging-environment/ is not an orphan
The copy's 'Into this page' table, applied as single additive sentences:
- support.html: the 'error 500 after a git check in' FAQ answer links
  'test it safely first'.
- blog/posts/speed-run-backup.html: end of the post links
  'what a staging environment is, and why you probably do not need one'.
- odoo-hosting-2027.html: one contextual note by the backup/module rows
  links 'do you need a staging environment?'.
- index.html: one FAQ card 'Do you need an Odoo staging environment?'.
No footer change. No new impeccable finding category.
2026-11-01 09:32:52 +00:00
oliver e37acde30c feat(seo): wire internal links between the 17 blog posts and the pages that sell
The blog was an island: zero post→page links to hosting/upgrade/support/courses,
and only one page→post link in the whole site. Posts ranked for nothing while the
old blog host ranked for our long-tail queries.

Posts → pages (26 new in-body contextual links across 17 posts):
each post now carries one or two links to the page that answers its reader's next
question — odoo-hosting-2027, odoo-community-upgrade, support, the workshops hub,
the n8n masterclass, and the plan pricing on index.html#pricing.

Pages → posts (7 pages, one contextual link each):
index.html (OCA section), odoo-hosting-2027, odoo-community-upgrade, support,
workshops/, odoo-n8n-masterclass/, odoo-erp-automation-bootcamp/ now link into the
post that fits their own subject. The clearest miss is fixed — the
community-vs-enterprise-cost post and the odoo-community-upgrade page now link
to each other.

Anchors wrap existing sentences where the text already said the thing; four short
linking sentences were added (index OCA section, support first-steps FAQ, masterclass
lessons, bootcamp included section). No new components, no related-posts widget,
in-body anchors only. English pages only; DE/ES untouched (translator follow-up).
2026-10-29 15:15:00 +00:00
webmaster c6adb31afc feat(seo): add /what-can-i-use-odoo-for/ guide page, linked from the homepage and support FAQ
Modelled on odoo-community-upgrade.html (top bar, band rhythm, FAQ details).
Copy published verbatim from the copywriter's 2026-10-28 file: 58-char title,
157-char meta, the six outbound internal links and the WebPage+Article+FAQPage+
BreadcrumbList @graph. Nine FAQ questions marked plausible-event-name=FAQ (no
event fires on page load). Sitemap + llms.txt list the new URL. Inbound links:
one from the homepage FAQ card, one from the support FAQ answer. Nothing else
moves; no footer change.
2026-10-28 23:10:12 +00:00
oliver 0cd0fa1af1 feat(analytics): Plausible snippet on every page, FAQ marked on the bootcamp
The snippet was on 10 of 40 pages, so the Trial / FAQ / Buy / Custom Quote /
search posts / Project Plan goals were inert everywhere else. It now sits
verbatim, in the same <head> position as index.html, on all 39 visitor-facing
pages. email/trial-confirmation.html is deliberately left out (email template).

FAQ: the five <details class="bc-faq"> <summary> elements on the bootcamp page
and its DE/ES twins now carry plausible-event-name=FAQ, and the 15
.faq-question buttons on de/es/support.html get the marking they were believed
to already have. No goal renamed: one FAQ goal across all languages.

No markup, copy or behaviour change, and no third-party request beyond the
snippet itself. verify-html.py PROBLEMS 0; check-links.py OK; event checker
59 PASS / 0 FAIL; impeccable detector +0/-0 findings on the changed files.
2026-10-28 21:50:53 +00:00
webmaster 73b3f34696 feat(analytics): add Plausible custom-event markings for six goals
Mark the six conversion goals on the self-hosted Plausible instance so the
events match the goals to be registered in Plausible. Event names verbatim:
Trial, FAQ, Buy, Custom Quote, search posts, Project Plan.

CSS-class markings (work without JS logic, on the clickable element):
- FAQ  -> index/de/es index .faq-card; odoo-hosting-2027 + odoo-community-upgrade
          (de/es twins) and australia <summary>; support.html .faq-question
- Buy  -> index/de/es index .btn-buy anchors; australia + bootcamp native
          post_basket submit buttons (forms stay native POST)

JS call markings in script.js (loaded by index, de/index, es/index):
- Trial        on the successful trial-form POST (.then branch)
- Custom Quote on the successful custom-quote POST (.then branch)
- Project Plan on the successful business-wizard submit
- search posts on the FIRST input of #blogSearch only (guard flag, one per
  pageview, not on every keystroke, not on #ocaSearch)

Nothing fires on page load; the 'Start the free trial' anchors that only
scroll to #trialCard are deliberately not tagged. One goal per topic across
all languages, no language suffix. No visual, behavioural or request change.
2026-10-28 21:07:19 +00:00
webmaster 695f42a04f feat(site): publish /odoo-community-upgrade.html (EN Odoo Community Upgrade page)
New EN landing page for the head term "ODOO Community Upgrade": hero, what an
upgrade is, the 10-step published process, a developer-labelled technical section
with four sourced command blocks and their substitution notes, the ODOO4projects
migration service (new database on our servers), the self-hosting cost honesty
section, an 8-question FAQ and a final CTA. House CI only, page-scoped CSS, no
new blocking resources.

- CTAs are plain links to the real flows: /support.html#contact (opens the
  migration ticket) and /index.html#pricing. No basket POST and no product id:
  no price is published for the migration service, so wiring a buy would invent one.
- JSON-LD: WebPage + Service + FAQPage (8 questions), no Offer node.
- sitemap.xml: new URL added; llms.txt: page listed under Key pages.
- support.html: the "older version" FAQ answer now links the new page so it is not orphaned.

Copy: copywriter/out/odoo-community-upgrade-page-copy-2026-10-27.md. The 7
NOT PUBLISHED gaps (G1-G7) are not in the build.
2026-10-27 18:43:33 +00:00
oliver b69e4ceaed i18n phase 2: publish DE + ES for odoo-hosting-2027.html and support.html
Four new pages, built from the verified translator output with work/i18n/build-i18n.py,
plus the same hreflang cluster and top-bar language selector on the two English pages.
Same recipe as the homepage pilot (main 937dbd4 / 06beab4); nothing else touched.

- de|es/odoo-hosting-2027.html, de|es/support.html: per-language canonical, the full
  hreflang cluster (en-US, de, es, x-default -> EN), /static/lang.js, and the switcher
  slot placed in the page's own top bar (.cmp-topbar on the 2027 page, .blog-header on
  support.html) with the per-shape CSS hook from I18N-BUILD-PLAN.md §3.
- odoo-hosting-2027.html, support.html: same cluster, same selector, so the cluster is
  symmetric (asymmetric hreflang is discarded by Google). support.html's canonical and
  og:url were still on the capitalised ODOO4projects.com host; the build normalises them
  to the lowercase form the rest of the site and sitemap.xml use.
- Internal links: the build's rebase step now also localises a root-absolute page link
  (/support.html#contact in the translator's 2027 pages) once that page exists in the
  language. /de/support.html, /de/odoo-hosting-2027.html, /de/, /de/#pricing and
  /de/#trialCard are local; /legal.html stays on the EN route because the legal pages
  are not translated (lawyer review pending).
- sitemap.xml: +4 URLs, lastmod 2026-10-24, priority reused from the EN entry (2027 -> 0.9,
  support.html -> 0.6 fallback, it has no EN entry). 17 -> 21 <loc>, no duplicates.
- llms.txt: the ## Languages section now names the mirrored pages.

Checks: verify-html.py PROBLEMS: 0; node --check static/lang.js OK; test-lang.js 31/31;
test-build.py 64/64 (was 43; +21 for the four built pages and the root-absolute rule);
check-links.py on the four new pages BROKEN/MISPLACED: 0.
2026-10-24 21:56:08 +00:00
oliver 93511e893d fix(site): correct prices, drop every discount claim and repair trial copy
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.
2026-10-21 23:05:22 +00:00
Reef 354799b9ca fix: repair contact flow and buy flow targets
- Buy Now product IDs aligned to the Odoo shop (54/55/56), matching odoo/upsell.html
- support.html contact form: rewire from dead ODOO4projects.com/website/form endpoint to n8n CRM webhook; remove /web/csrf_token prefetch; show success only on res.ok (previously always showed 'submitted' even when nothing was delivered)
- /contactus links (footer nav, Schema contactPoint, order widget fallback, trial email) retargeted to support.html#contact; canonical/og:url corrected to /support.html
- Custom Quote and footer contact handlers hardened with res.ok checks
- buyNow basket target verified: 20.odoo4projects.com/shop/post_basket (200)
2026-10-12 15:41:11 +00:00
Reef f7460c129d Download static assets from static.odoo4projects.com (agent.js, agent.css, 4.svg, logo.svg, favicon.png) and serve locally. Update all HTML references. 2026-08-24 20:53:34 +00:00
Reef 88e9cbd9f5 Unify all pages with homepage light theme: support, legal, and 9 blog posts (purple primary, light bg) 2026-06-24 21:39:51 +00:00
Reef b0cb28a79b Add chat widget and blog-header style to support and legal pages 2026-06-24 21:30:00 +00:00
Reef 170d351783 Create support page with FAQ accordion tabs and contact form with webhook 2026-06-24 20:52:57 +00:00
oliver 996414dbfe bye 2026-06-23 13:35:07 -03:00
reef a2daa76b5f Move all files to root directory (remove odoo4projects.com folder) 2026-06-22 20:22:54 +00:00