Commit Graph
7 Commits
Author SHA1 Message Date
webmaster 04199bd606 fix(freelancer-directory): delete the dark anonymous-contact modal; retire hello@ -> support@ site-wide
Two user decisions (2026-11-03). The page is live.

1. The anonymous-contact modal is removed in full, not just its gate: its markup and
   comment, the .contact-modal and .dev-anon-btn CSS, the JS (modalEls, openContactModal,
   closeContactModal, initContactModal, enhanceContact), the two init-time calls and the
   per-card render call. ODOO_EXPERTS_QUOTE_WEBHOOK is deleted — the only readers were the
   two gates (initContactModal, enhanceContact) and the postTo inside the modal's own
   submit handler; nothing else read it. The modal's lede ("We pass your request on ...")
   goes with it, so no relay copy survives. Kept on purpose: the invite relay form and
   ODOO_EXPERTS_INVITE_WEBHOOK, the OCA filter + badge, ODOO_EXPERTS_WEBHOOK, and the
   card's direct "Email this freelancer" chip.

2. hello@odoo4projects.com is retired site-wide: 24 occurrences (mailto + visible text)
   become support@odoo4projects.com, and the 12 support@ODOO4projects.com case variants
   are normalised to lower case. oliver@odoo4projects.com is a freelancer's own published
   contact address on their card and is left untouched.

Tests run: verify-html.py PROBLEMS 0; check-inline-js.py OK; competitor QC exit 3 with 74
pre-existing hits and 0 added; impeccable detect 1 -> 1 (identical, 0 new).
2026-11-03 13:52:44 +00:00
webmaster 0e832d8fd1 perf(site-wide): render-blocking /style.css on 17 pages; <main> landmark; BF footer form action
Same defect the bootcamp carried (2aa9b19), fixed site-wide in one mechanical pass.

P0 (17 pages): /style.css was deferred via media="print" onload=... -> unstyled
first paint -> a BODY layout shift. Now a normal render-blocking
<link rel="stylesheet">; the now-redundant no-JS <noscript> for style.css is
dropped. Web fonts + Font Awesome keep their legitimate deferral.
Pages: index.html, odoo-black-friday/, odoo-hosting-offers/, de/index.html,
es/index.html, odoo-hosting-2027.html (+de/+es), odoo-community-upgrade.html
(+de/+es), odoo-staging-environment/, odoo-community-ai/,
odoo-n8n-masterclass/, australia.html, workshops/, what-can-i-use-odoo-for/.

P1 (1 page): /odoo-black-friday/ footer form action mailto: -> CRM webhook
(Lighthouse is-on-https). Changed only because the page already loads a handler
for #footerContactForm (static/black-friday.js). The other 13 mailto-form pages
load no handler and are left alone on purpose (no drive-by handler copy-in).
Added the no-JS <noscript> fallback so a JS-off visitor keeps a path.

P2 (35 pages): add a single <main> landmark wrapping the primary content; top
bar and footer stay outside. Additive only, no redesign.

Guards held: bootcamp EN/DE/ES and every JS/static file untouched; Buy forms
product_id 4/17 intact; one [data-bc-seats]; ads-consent gate intact.
verify-html.py PROBLEMS 0; competitor QC 74 pre-existing, 0 added.
2026-11-02 18:18:46 +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 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
oliver 141bf20c03 fix(seo): mirror the visible version chain (14 → 15 → … → 20) into the EN FAQPage JSON-LD
The visible FAQ answer used arrows while the structured-data copy spelled the
chain out with 'to', so acceptedAnswer.text was not verbatim-present on the
page. FAQ parity check now reports 8/8 on EN/DE/ES.
2026-10-27 19:16:50 +00:00
oliver 2fe0c31e2b copy(upgrade): apply the 5 ICP-required changes to /odoo-community-upgrade.html
Retrospective ICP 1 review (kanban t_03b62410) found the EN page made a
non-technical owner-operator hesitate: the offer sat behind four blocks of
shell commands, the hero ended on "a developer", one hero line carried an
untraced claim, there was no route to a number, the FAQ printed the
OpenUpgrade data-loss warning against our own fresh-database service, and
the "restaurant meal" simile was unitless.

R1 move "The ODOO4projects way" above the process and the commands; swap the
   two band classes so the page still alternates; keep the offer's code cards
   legible on the dark band; reword the §5 intro and §6 opening sentence.
R2 hero subhead reworded, dropping the untraced "costs you your history".
R3 "See the plans" route added inside §6, with the honest "not priced on that
   page" clause. No price, no plan hero, no Offer node.
R4 FAQ "What happens to my history…" answer rewritten (JSON-LD acceptedAnswer
   kept verbatim-equal to the visible text).
R5 "restaurant meal" clause deleted.

Band-aware text colours added for the elements the class swap re-parented
(process list on light, technical section and its notes on dark, the §6 link).
No other content changed: H1, CTAs, code blocks (all 4 byte-identical),
Sweat Equity, the 8 FAQs and the JSON-LD shape are untouched.
2026-10-27 19:03:06 +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