Commit Graph
10 Commits
Author SHA1 Message Date
webmaster b42f754525 Bootcamp: hand cohort term + language to the basket (info field)
All three bootcamp pages (EN/DE/ES), every buy form: the basket line now
carries info="Q1 2027, English" alongside product_id 12 and qty 1, the
same field shape australia.html uses for location. Value verbatim on all
three pages (the programme is delivered in English in every language).
clear=1 / action / method / target / button labels unchanged.

Verified end to end against the live shop: POST /shop/post_basket returns
303 -> /shop/checkout and /shop/cart shows product 12 at qty 1 with the
info text rendered on the order line.
2026-11-01 14:47:30 +00:00
oliver 48266e8e77 i18n(bootcamp): add the 6-seat cohort cap to the DE/ES pages
Mirror the EN cap from 2940d33 in native register, cap only — the Black
Friday call-out (window, second hosted year, BF2026) is not added; it was
dropped from EN in fd3f1dc and stays out of every language.

- de|es/odoo-erp-automation-bootcamp/index.html: Class-size fact row
  (Begrenzt auf 6 Teilnehmer / Limitado a 6 participantes), the .bc-price
  cap line, and JSON-LD CourseInstance maximumAttendeeCapacity: 6.
- No workshops DE/ES copies exist, so no card / comparison row applies.
- why-odoo4projects.html left untracked.
2026-10-30 13:08:58 +00:00
oliver 46e874b1e7 feat(i18n): move DE/ES bootcamp pages to Q1 2027 (21 Jan – 25 Mar 2027)
Mirror the EN term change (01c5dd3) into the published German and Spanish
bootcamp pages: hero kicker, hero first-session stat, the four schedule
facts, the DST note and both JSON-LD dates. Text/date splice only — the
verifier reports the tag sequence, attribute list, <style>/<script> bytes
and JSON-LD shape identical before and after, english_leftovers: none.
2026-10-30 12:45:28 +00:00
oliver 5f647c055a fix(analytics): put the Buy class on the <form> so the goal actually fires
Plausible's click handler walks up from the clicked element and bails out the
moment it meets a <form>, so a plausible-event-name=Buy class on a
<button type="submit"> inside a plain form never fires Buy — the tracker sends
its automatic "Form: Submission" event instead and the goal records nothing.
Measured live on /odoo-erp-automation-bootcamp/ before this change:
{"n":"Form: Submission"}.

- odoo-erp-automation-bootcamp/index.html (3 CTAs): class moved from the
  <button type="submit"> to the enclosing <form>.
- australia.html (2 CTAs): same move.
- de|es/odoo-erp-automation-bootcamp/index.html (3 forms each): the buy forms
  carried no Buy marking at all, so the DE and ES bootcamp sales were invisible
  to the goal. Class added to the <form>.
- odoo/upsell.html: the three .plan-btn buttons drive the same JS buy path and
  were unmarked. A class on a plain <button> (not a form submit) does fire, so
  it was added there and browser-verified. The disabled Trial button is left
  unmarked.

Class attribute only: every button label, every form action and every basket
payload is byte-identical. No CSS or JS rule references the class.

Verified in a real browser (fetch shimmed, tracker's localhost/automation gates
bypassed): EN bootcamp 3/3, australia 2/2, DE 3/3, ES 3/3, upsell 1/1 clicks
each send exactly one {"n":"Buy"} to /api/event and never "Form: Submission".
2026-10-28 22:37:32 +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
oliver 12704a5618 fix(i18n): localise extensionless directory links in the DE/ES pages
build-i18n.py's rebase_paths() only re-pointed a root-absolute page link when it
contained ".html", so extensionless directory links stayed on the EN route even
when the language had its own copy (`/odoo-erp-automation-bootcamp/` on all four
DE and ES pages, and `/` on the DE/ES bootcamp pages). Same guard as the .html
branch: localise only when <lang>/<path>/index.html exists.

Re-applied the rebasing to the 8 already-built DE/ES pages (work/i18n/
relocalise-links.py) - a full re-transform is not safe for them because the
switcher-slot/hero rework means repo pages are not raw transform output. 18 refs
in 8 files. The DE/ES homepages were the stale case: their body links were built
before support.html/odoo-hosting-2027.html existed in that language and were
never revisited.

check-links.py now flags an EN-route page link whose language has its own copy:
0 such links on all 10 DE/ES pages after the rebuild. test-build.py 107 passed;
verify-html.py 0 problems.
2026-10-27 19:12:47 +00:00
oliver 66ed209632 Footer "Useful Links": four items on the six DE/ES pages (DE/ES follow-up to 31c02b1)
The translated pages now carry the same four footer items as the three English pages:
ODOO Bootcamp -> /odoo-erp-automation-bootcamp/, ODOO Hosting in 2027 (DE) / ODOO Hosting en
2027 (ES), Support/Soporte, Rechtliches/Aviso legal. Deleted: Startseite/Inicio,
Datenschutz/Privacidad, AGB/Terminos, Kontakt/Contactenos.

Rebuilt with work/i18n/build-i18n.py from the translator's six files (work/i18n/I18N-BUILD-PLAN.md
section 5), then: place-hero-slot.py for de|es/index.html, place-slot.py for the two 2027 pages,
insert-hero-i18n.py for the two bootcamp pages (the hero CSS is language-neutral chrome held
outside the translated source). Nothing else changed: git diff 31c02b1 over these six files is
the footer list and nothing else - bootcamp hero, three buy forms (product_id 12), 465.00,
selector and hreflang clusters untouched.

Checked: verify-html.py PROBLEMS: 0; node --check static/lang.js OK; verify-footer-useful-links-de-es.py
PROBLEMS: 0; test-build.py 88/88; test-lang.js 31/31; check-links.py BROKEN/MISPLACED: 0;
impeccable detector identical finding set on all six pages (0 changed lines).
2026-10-26 15:55:12 +00:00
oliver 0bc4dc05d7 Bootcamp hero: two-zone scrim so the photo actually reads (EN/DE/ES)
The uniform .72 -> .55 scrim composited the whole hero band to luma ~37 and the
right zone to ~35, against a flat midnight of 25.4: a dark photo made darker.
The scrim is now two zones on the same photo:

  .78  0%-88%   (copy zone: kicker, H1, value line, the four facts, the CTA)
  ramp 88%-94%
  .25  94%-100% (the lit skyline, no copy over it)

.78 is the smallest flat alpha that holds every text block over its floor
(body 4.5:1, large 3.0:1) at 1920/1440/1024/390 in EN, DE and ES - measured on
the rendered page, not modelled. 88% is where the ramp has to start: the longest
translated fact line (DE, 1024px) reaches 89.3% of the hero.

Measured before -> after (full-range mean luma of the rendered band):
  whole band     37.3 / 36.8 / 37.6 / 37.3  ->  33.8 / 33.6 / 34.1 / 34.0
  right 88-100%  34.8 / 35.9 / 35.5 / 38.4  ->  38.7 / 40.2 / 39.4 / 43.4
  plateau 94-100%                          ->  41.4 / 44.2 / 42.7 / 46.9
  (= 1.63x-1.91x the flat-midnight 25.4, was 1.37x-1.51x)
Worst text block: 4.87:1 (was 3.13:1). No copy, buy form, JSON-LD, selector,
hreflang or price touched: de/ and es/ differ ONLY by this inserted hero block.
2026-10-25 11:39:40 +00:00
oliver 36c629852f Bootcamp DE/ES: instructor reads 'Oliver - The OC Guy - Arnold' (+ alternateName)
Rebuilt de|es/odoo-erp-automation-bootcamp/index.html from the translator's
updated files with work/i18n/build-i18n.py (same recipe as 89bb7b7: lang,
canonical, the four hreflang links, og:url, the top-bar selector kept as-is).

- 2 occurrences per file: the facts-list <dd> and the "Your instructor"
  <strong> now read "Oliver - The OC Guy - Arnold, Technical Lead bei/de
  ODOO4projects" (the user's alter ego, typed hyphen form).
- Both JSON-LD instructor Person nodes gain alternateName "The OC Guy"
  (the translator mirrored the EN page e5e4f5b; name stays Oliver Arnold).
- Buy forms untouched: three POST forms, product_id 12, clear=1, price 465.00
  in five places per page.
- git diff --stat e5e4f5b = these two files only (+10/-6).
2026-10-25 10:23:20 +00:00
oliver 89bb7b7cba i18n: publish the bootcamp page in DE + ES, cluster the EN page, price 465.00
- add de|es/odoo-erp-automation-bootcamp/index.html (build-i18n.py from the
  translator's files; canonical + hreflang cluster + top-bar selector)
- EN bootcamp page gains the four hreflang alternates (was asymmetric)
- price 790 -> 465.00 across all three pages (JSON-LD offers.price, the three
  buy-button labels, the bc-price sentence); the three buy forms stay
  byte-identical apart from the label language
- sitemap.xml: +/de/ and /es/odoo-erp-automation-bootcamp/; llms.txt: Languages
  section names the new pages
2026-10-24 22:38:21 +00:00