feat(seo): restore /odoo-n8n-masterclass/ and /workshops/, both 404ing but indexed

Two directory URLs Google still has indexed were 404ing after the old site was
torn down. Both are rebuilt as trailing-slash directories (same model as
/odoo-erp-automation-bootcamp/, so the non-slash form 301s to the slash form).

odoo-n8n-masterclass/index.html
- copy from copywriter, structure and page-scoped CSS reused from the bootcamp page
- next session: four Thursdays of February 2027, 17:00 Central Time (hero eyebrow,
  price and booking, JSON-LD startDate 2027-02-04)
- booking: native POST form to 20.odoo4projects.com/shop/post_basket, basket
  product_id 44, zero JavaScript, three CTAs
- n8n environment corrected: we do not hand out n8n workspaces; the participant
  uses n8n's own free plan. Body, hero fact, FAQ and JSON-LD say so plainly.
- JSON-LD Course + FAQPage; Plausible snippet; FAQ and Buy markings

workshops/index.html
- hub page, two cards (masterclass USD 120.00 / bootcamp USD 465.00), pull quote,
  routing section, FAQ, comparison table
- the bootcamp card carries no term or date; the "ERP Automation Quick Wins" free
  offer is gone entirely (no card, no 1-hour format, no /free-webinar link)
- JSON-LD ItemList; Plausible snippet; FAQ markings

SEO: canonical to the slash URL, OG tags, the bootcamp's font/style.css loading
pattern, sitemap.xml (+2 urls, lastmod 2026-10-28, bootcamp lastmod bumped for the
two links added there), llms.txt (+2 lines). Cross-linked both ways and both to the
bootcamp; the bootcamp page gains the inbound links.

English only. No DE/ES twins yet - translator follow-up.

Checks: verify-html.py 0 problems, check-links.py clean, check-links-2026-10-28.py
56 PASS / 0 FAIL, verify-plausible-events 71 PASS / 0 FAIL, JSON-LD parses.
This commit is contained in:
oliver committed 2026-10-28 22:26:35 +00:00
1 parent 0cd0fa1af1
commit 622d9f0310
5 files changed
+1637 -1

No files matched your search

+2
View File
@@ -34,6 +34,8 @@
- [Odoo hosting in Australia — Sydney](https://odoo4projects.com/australia.html): managed Odoo Community hosting on our own servers in Sydney, for Australian businesses. The four plans and yearly prices, the checkout with Australia (Sydney) pre-selected, and the one Sydney claim we make — we host in Sydney (no AU support hours, no AU entity, no AUD price published). - [Odoo hosting in Australia — Sydney](https://odoo4projects.com/australia.html): managed Odoo Community hosting on our own servers in Sydney, for Australian businesses. The four plans and yearly prices, the checkout with Australia (Sydney) pre-selected, and the one Sydney claim we make — we host in Sydney (no AU support hours, no AU entity, no AUD price published).
- [Odoo hosting 2027 — comparison landing page](https://odoo4projects.com/odoo-hosting-2027.html): every route to Odoo (managed, VPS, odoo.sh, Odoo Online, own hardware) side by side, with annual and five-year cost comparisons. - [Odoo hosting 2027 — comparison landing page](https://odoo4projects.com/odoo-hosting-2027.html): every route to Odoo (managed, VPS, odoo.sh, Odoo Online, own hardware) side by side, with annual and five-year cost comparisons.
- [Odoo ERP Automation Bootcamp](https://odoo4projects.com/odoo-erp-automation-bootcamp/): a three-month, ten-session live bootcamp with Oliver Arnold, Technical Lead, that takes a small business from zero to a running ERP. Thursdays, one hour, Q1 2026, starting 8 January 2026; one year of hosted Odoo Community Edition included. The current price is confirmed on registration. - [Odoo ERP Automation Bootcamp](https://odoo4projects.com/odoo-erp-automation-bootcamp/): a three-month, ten-session live bootcamp with Oliver Arnold, Technical Lead, that takes a small business from zero to a running ERP. Thursdays, one hour, Q1 2026, starting 8 January 2026; one year of hosted Odoo Community Edition included. The current price is confirmed on registration.
- [ODOO x N8N Masterclass](https://odoo4projects.com/odoo-n8n-masterclass/): a two-hour live masterclass with Oliver Arnold on connecting Odoo to n8n — calling n8n webhooks from Odoo automated actions, how the n8n integration for Odoo works, and website workarounds that extend your automation. Hands-on in a free Odoo trial system; n8n itself runs on n8n's own free plan, which is not included. USD 120.00, next session the four Thursdays of February 2027 at 17:00 Central Time.
- [ODOO Workshops and Classes](https://odoo4projects.com/workshops/): the two live courses side by side — the two-hour ODOO x N8N Masterclass (USD 120.00) and the ten-session ODOO ERP Automation Bootcamp (USD 465.00), both taught by Oliver Arnold — which course fits which business, and a full comparison table.
- [A briefing for Andrew](https://odoo4projects.com/odooityourself.html): Odoo Community as a first-class citizen — the vision behind our managed Community hosting, the six regions, the management console, the MCP agent that can touch the server, and the plan prices (Empire quoted per setup). - [A briefing for Andrew](https://odoo4projects.com/odooityourself.html): Odoo Community as a first-class citizen — the vision behind our managed Community hosting, the six regions, the management console, the MCP agent that can touch the server, and the plan prices (Empire quoted per setup).
- [Home](https://odoo4projects.com/): plans and pricing, FAQ, server locations. - [Home](https://odoo4projects.com/): plans and pricing, FAQ, server locations.
- [Support](https://odoo4projects.com/support.html): support and frequently asked questions. - [Support](https://odoo4projects.com/support.html): support and frequently asked questions.
+2
View File
@@ -794,6 +794,8 @@
</div> </div>
<ul class="bc-related"> <ul class="bc-related">
<li><a href="/support.html#contact">Questions before you book? Talk to us first</a></li> <li><a href="/support.html#contact">Questions before you book? Talk to us first</a></li>
<li><a href="/workshops/">All our live courses, side by side</a></li>
<li><a href="/odoo-n8n-masterclass/">The two-hour masterclass on calling n8n from Odoo</a></li>
<li><a href="/odoo-hosting-2027.html">What hosting looks like after your year with us</a></li> <li><a href="/odoo-hosting-2027.html">What hosting looks like after your year with us</a></li>
<li><a href="/support.html">What our support does and does not cover</a></li> <li><a href="/support.html">What our support does and does not cover</a></li>
<li><a href="/blog/posts/community-vs-enterprise-cost.html">What Community costs compared with Enterprise</a></li> <li><a href="/blog/posts/community-vs-enterprise-cost.html">What Community costs compared with Enterprise</a></li>
+834
View File
@@ -0,0 +1,834 @@
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>ODOO x N8N Masterclass: Call n8n from Odoo, Live in 2 Hours</title>
<meta
name="description"
content="Two live hours with Oliver Arnold: call n8n webhooks from Odoo automated actions and build a working automation yourself. Free trial systems, $120."
/>
<link rel="canonical" href="https://odoo4projects.com/odoo-n8n-masterclass/" />
<meta property="og:title" content="ODOO x N8N Masterclass: Call n8n from Odoo, Live in 2 Hours" />
<meta
property="og:description"
content="Two live hours with Oliver Arnold: call n8n webhooks from Odoo automated actions and build a working automation yourself. Free trial systems, $120."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://odoo4projects.com/odoo-n8n-masterclass/" />
<meta name="twitter:card" content="summary" />
<link rel="icon" href="/images/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap"
media="print"
onload="this.media='all'"
/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="stylesheet" href="/style.css" media="print" onload="this.media='all'" />
<noscript><link rel="stylesheet" href="/style.css" /></noscript>
<style>
/* ---- ODOO x N8N Masterclass landing page (page-scoped; additive).
The block below is the bootcamp page's page-scoped CSS, reused so the two
course pages share one visual language. Only the hero photo comment is
rewritten; every value is the bootcamp's. ---- */
.bc-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Top bar (page-scoped: the site has no global header) */
.bc-topbar {
background: var(--midnight-2);
border-bottom: 1px solid var(--line-brass);
padding: 0.85rem 0;
}
.bc-topbar .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
flex-wrap: wrap;
}
.bc-brand {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
letter-spacing: 0.04em;
color: #fff;
}
.bc-brand span {
color: var(--brass);
}
.bc-topbar-links {
display: flex;
gap: 1.25rem;
font-size: 0.82rem;
}
.bc-topbar-links a {
color: rgba(255, 255, 255, 0.7);
}
.bc-topbar-links a:hover {
color: var(--brass);
}
/* Language selector — slides into the top-bar row, right of the links, behind a hairline brass divider.
CI §1/§2: brass marks the active language; lang.js owns the markup. */
.bc-topbar-links {
margin-left: auto;
}
.bc-topbar .lang-switch-slot {
display: flex;
align-items: center;
padding-left: 1rem;
border-left: 1px solid rgba(201, 162, 39, 0.45);
}
.bc-topbar .lang-switch {
color: rgba(255, 255, 255, 0.7);
}
.bc-topbar .lang-switch a:hover,
.bc-topbar .lang-switch a:focus-visible {
color: var(--brass-bright);
}
.bc-topbar .lang-switch a[aria-current="true"] {
color: var(--brass);
text-decoration: underline;
text-underline-offset: 3px;
}
/* Hero — same treatment as the bootcamp page: our own London night aerial
(CI §5) behind the header copy, with the identical two-zone scrim
(.78 0%-88%, ramp 88%-94%, .25 94%-100%) so every text block in the copy
zone keeps its contrast floor. Numbers for the scrim: see the bootcamp
page's comment and handoffs/2026-10-24-webmaster-to-olchi-bootcamp-page-published.md. */
.bc-hero {
min-height: 0;
padding: 3.5rem 0 3rem;
background-image: linear-gradient(90deg,
rgba(13, 27, 46, 0.78) 0%,
rgba(13, 27, 46, 0.78) 88%,
rgba(13, 27, 46, 0.25) 94%,
rgba(13, 27, 46, 0.25) 100%),
url("/images/hero/bootcamp-hero-desktop-1920.webp");
background-size: cover;
background-position: 50% 25%;
background-repeat: no-repeat;
}
/* The global .hero::after is a second, 50%-opacity midnight wash for the homepage's
flat hero; with the photo + gradient scrim above the copy it only dulls the shot,
so it is switched off on this page. One page-scoped rule, no global CSS touched. */
.bc-hero::after {
content: none;
}
@media (max-width: 640px) {
.bc-hero {
background-image: linear-gradient(90deg,
rgba(13, 27, 46, 0.78) 0%,
rgba(13, 27, 46, 0.78) 88%,
rgba(13, 27, 46, 0.25) 94%,
rgba(13, 27, 46, 0.25) 100%),
url("/images/hero/bootcamp-hero-mobile-900.webp");
background-position: 50% 50%;
}
}
/* wrapped hero-stat labels keep their tick on the first line */
.bc-hero .hero-stat {
align-items: flex-start;
}
.bc-hero .hero-stat i {
line-height: 1.6;
}
.bc-lead {
font-size: 1.05rem;
color: rgba(23, 28, 38, 0.78);
max-width: 720px;
margin: 0 auto 1rem;
line-height: 1.75;
}
.section-dark .bc-lead,
.bc-lead.on-dark {
color: rgba(255, 255, 255, 0.72);
}
.bc-subline {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
color: var(--midnight);
text-align: center;
max-width: 720px;
margin: 1.75rem auto 1.25rem;
letter-spacing: 0.02em;
}
.bc-action {
text-align: center;
margin-top: 0.5rem;
}
/* The CTAs are native basket <form>s with a <button>. A <button> takes
`line-height: normal` from the UA font shorthand while an <a> inherits the
body line-height, which would make the button 5.6px shorter. Match the
anchors' height: one declaration, no new look. */
form[action$="/shop/post_basket"] .btn {
line-height: inherit;
}
/* Grids — auto-fit so no breakpoint is needed */
.bc-list {
list-style: none;
padding: 0;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
max-width: 1040px;
}
/* Learning tiles (light canvas) */
.bc-lessons {
list-style: none;
counter-reset: bc-lesson;
padding: 0;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem;
max-width: 1040px;
}
.bc-lessons li {
counter-increment: bc-lesson;
position: relative;
background: var(--ivory);
border: 1px solid var(--line);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-rest);
padding: 1.4rem 1.4rem 1.4rem 3.4rem;
transition: box-shadow 0.25s, transform 0.25s;
}
.bc-lessons li:hover {
box-shadow: var(--shadow-hover);
transform: translateY(-3px);
}
.bc-lessons li::before {
content: counter(bc-lesson);
position: absolute;
left: 1.15rem;
top: 1.3rem;
font-family: Marcellus, Georgia, serif;
font-size: 1.5rem;
color: var(--brass-deep);
line-height: 1;
}
.bc-lessons h3 {
font-size: 1rem;
font-weight: 400;
color: var(--midnight);
margin-bottom: 0.35rem;
}
.bc-lessons p {
font-size: 0.86rem;
color: rgba(23, 28, 38, 0.78);
line-height: 1.6;
margin: 0;
}
/* Cards on midnight */
.bc-cards {
list-style: none;
padding: 0;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
max-width: 1040px;
}
.bc-cards li {
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--line-brass);
border-radius: var(--radius-lg);
padding: 1.35rem 1.4rem;
}
.bc-cards h3 {
font-size: 1rem;
color: #fff;
margin-bottom: 0.45rem;
}
.bc-cards p {
font-size: 0.86rem;
color: rgba(255, 255, 255, 0.72);
line-height: 1.65;
margin: 0;
}
.bc-note {
max-width: 720px;
margin: 1.5rem auto 0;
font-size: 0.86rem;
color: rgba(23, 28, 38, 0.78);
line-height: 1.65;
}
.bc-note.on-dark {
color: rgba(255, 255, 255, 0.6);
}
.bc-note strong {
color: var(--midnight);
}
.bc-note.on-dark strong {
color: #fff;
}
/* Definition list (prerequisites) */
.bc-schedule {
max-width: 720px;
margin: 0 auto;
display: grid;
grid-template-columns: minmax(9rem, auto) 1fr;
gap: 0.55rem 1.25rem;
background: var(--ivory);
border: 1px solid var(--line);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-rest);
padding: 1.5rem 1.75rem;
}
.bc-schedule dt {
font-family: Marcellus, Georgia, serif;
font-size: 0.92rem;
color: var(--brass-deep);
}
.bc-schedule dd {
margin: 0;
font-size: 0.9rem;
color: var(--ink);
line-height: 1.55;
}
/* Price line */
.bc-price {
font-family: Marcellus, Georgia, serif;
font-size: 1.3rem;
color: var(--midnight);
text-align: center;
margin: 0 auto 1rem;
}
/* Related links */
.bc-related {
list-style: none;
padding: 0;
margin: 2rem auto 0;
max-width: 720px;
display: grid;
gap: 0.5rem;
}
.bc-related li {
position: relative;
padding-left: 1.4rem;
font-size: 0.88rem;
}
.bc-related li::before {
content: "";
position: absolute;
left: 0.25rem;
top: 0.55rem;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--brass);
}
.bc-related a {
color: var(--midnight);
text-decoration: underline;
text-decoration-color: var(--brass);
text-underline-offset: 2px;
}
.bc-related a:hover {
text-decoration-color: var(--brass-deep);
text-decoration-thickness: 2px;
}
/* FAQ (native details/summary — no JS) */
.bc-faq-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
max-width: 1000px;
margin: 0 auto;
align-items: start;
}
.bc-faq {
background: var(--ivory);
border: 1px solid var(--line);
border-radius: var(--radius-lg);
padding: 0.4rem 1.25rem;
box-shadow: var(--shadow-rest);
transition: box-shadow 0.25s;
}
.bc-faq[open],
.bc-faq:hover {
box-shadow: var(--shadow-hover);
}
.bc-faq summary {
cursor: pointer;
list-style: none;
padding: 0.85rem 0;
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.75rem;
font-family: Marcellus, Georgia, serif;
font-size: 0.98rem;
color: var(--midnight);
}
.bc-faq summary::-webkit-details-marker {
display: none;
}
.bc-faq summary::after {
content: "+";
font-family: Inter, sans-serif;
color: var(--brass);
font-size: 1.15rem;
line-height: 1;
flex-shrink: 0;
}
.bc-faq[open] summary::after {
content: "\2212";
}
.bc-faq summary:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.bc-faq .bc-a {
font-size: 0.87rem;
color: rgba(23, 28, 38, 0.78);
line-height: 1.7;
padding-bottom: 1rem;
}
.bc-faq .bc-a p:last-child {
margin-bottom: 0;
}
@media (max-width: 768px) {
.bc-faq-grid {
grid-template-columns: 1fr;
}
.bc-schedule {
grid-template-columns: 1fr;
gap: 0.15rem 0;
padding: 1.25rem 1.35rem;
}
.bc-schedule dd {
margin-bottom: 0.7rem;
}
}
/* Focus states */
.btn:focus-visible,
.bc-topbar-links a:focus-visible,
.bc-related a:focus-visible {
outline: 3px solid var(--brass-bright);
outline-offset: 2px;
border-radius: var(--radius);
}
.btn-brass:focus-visible {
outline-color: #fff;
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Course",
"name": "ODOO × N8N Masterclass",
"description": "A two-hour live masterclass on connecting Odoo to n8n: calling n8n webhooks from Odoo automated actions, how the n8n integration for Odoo works, and website workarounds for extending your automation. Hands-on in free trial systems.",
"url": "https://odoo4projects.com/odoo-n8n-masterclass/",
"provider": {
"@type": "Organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/"
},
"instructor": {
"@type": "Person",
"name": "Oliver Arnold",
"jobTitle": "Technical Lead",
"worksFor": {
"@type": "Organization",
"name": "ODOO4projects"
}
},
"inLanguage": "en",
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"courseWorkload": "PT2H",
"startDate": "2027-02-04",
"instructor": {
"@type": "Person",
"name": "Oliver Arnold"
}
},
"offers": {
"@type": "Offer",
"price": "120.00",
"priceCurrency": "USD",
"category": "Paid",
"url": "https://20.odoo4projects.com/shop/post_basket"
}
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do I need to know n8n already?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. You can arrive having never opened it. The session starts at the webhook and builds up from there, inside n8n's own free plan."
}
},
{
"@type": "Question",
"name": "What do I need to know before I join?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Two things. Basic Odoo, meaning you know what workflows and automated actions are and where they live in the interface. And basic programming, enough to know what an API is and how one gets called."
}
},
{
"@type": "Question",
"name": "What do I need installed?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nothing. A computer and a browser. We provide the free Odoo trial system, so you are working in a live setup rather than a video. You use n8n on n8n's own free plan."
}
},
{
"@type": "Question",
"name": "Do I get a certificate?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. You receive a certificate at the end of the masterclass."
}
},
{
"@type": "Question",
"name": "What language is it in?",
"acceptedAnswer": {
"@type": "Answer",
"text": "English."
}
},
{
"@type": "Question",
"name": "Is this for me if I do not write code?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, as long as you can read code rather than write it. You need to understand what an API call is, not to build an application. If code is entirely foreign to you, the bootcamp covers automating your business without any of it."
}
}
]
}
]
}
</script>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
<div class="bc-topbar">
<div class="container">
<a class="bc-brand" href="/">ODOO4<span>projects</span></a>
<nav class="bc-topbar-links" aria-label="Page links">
<a href="/index.html#pricing">Plans &amp; pricing</a>
<a href="/workshops/">Workshops</a>
<a href="/support.html">Support</a>
</nav>
<div data-lang-switcher class="lang-switch-slot"></div>
</div>
</div>
<!-- Hero -->
<section class="hero bc-hero">
<div class="container">
<p class="hero-kicker">2 HOURS &middot; LIVE &middot; OLIVER ARNOLD &middot; ENGLISH</p>
<p class="hero-kicker">NEXT SESSION &middot; THURSDAYS IN FEBRUARY 2027 &middot; 17:00 CENTRAL TIME</p>
<h1>ODOO &times; N8N Masterclass</h1>
<p class="hero-sub">
Two live hours with Oliver Arnold, working inside real Odoo and n8n systems: make your ERP start
its own jobs instead of waiting for someone to click.
</p>
<div class="hero-stats">
<span class="hero-stat"><i aria-hidden="true">&#10003;</i> 2 hours live, with a Q&amp;A at the end</span>
<span class="hero-stat"><i aria-hidden="true">&#10003;</i> You build and test a live automation yourself</span>
<span class="hero-stat"><i aria-hidden="true">&#10003;</i> A free Odoo trial system; n8n on n8n's own free plan</span>
<span class="hero-stat"><i aria-hidden="true">&#10003;</i> Certificate when you are done</span>
</div>
<div class="hero-actions">
<form method="post" action="https://20.odoo4projects.com/shop/post_basket" target="_blank">
<input type="hidden" name="basket" value='[{"product_id":44,"qty":1}]' />
<input type="hidden" name="clear" value="1" />
<button type="submit" class="btn btn-brass btn-lg plausible-event-name=Buy">Buy for 120.00 USD</button>
</form>
</div>
</div>
</section>
<!-- What the two hours give you -->
<section class="section-light">
<div class="container">
<h2 class="section-title">What the two hours give you</h2>
<p class="bc-lead">
Your Odoo system already knows the moment a quote is confirmed, a stock level drops, or an
invoice gets paid. Today most of that knowledge sits still until a person notices it and does the
next thing by hand.
</p>
<p class="bc-lead">
In two hours you learn how to hand that next thing to n8n. One Odoo automated action fires on a
business event, calls an n8n webhook, and n8n carries the work forward while you are somewhere
else. You build it in the session and you keep the pattern afterwards.
</p>
<p class="bc-subline">Two hours. One working automation. Your system doing its own work.</p>
<div class="bc-action">
<form method="post" action="https://20.odoo4projects.com/shop/post_basket" target="_blank">
<input type="hidden" name="basket" value='[{"product_id":44,"qty":1}]' />
<input type="hidden" name="clear" value="1" />
<button type="submit" class="btn btn-brass btn-lg plausible-event-name=Buy">Buy for 120.00 USD</button>
</form>
</div>
</div>
</section>
<!-- Who this is for -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">Who this is for</h2>
<p class="bc-lead">
You already run Odoo and you can name the manual steps that pile up every week. The quote that
needs a message sent, the payment that needs a note added, the report someone rebuilds by hand on
Friday. You know your way around workflows and automated actions in the interface, and you are
comfortable enough with code to read a payload.
</p>
<p class="bc-lead">
This is not a first course in Odoo, and it is not an owner's introduction to ERP. If you have
never opened Odoo, or an API is still a vague word to you, start with the
<a href="/odoo-erp-automation-bootcamp/">ODOO ERP Automation Bootcamp</a> instead. This
masterclass assumes you are already past that line.
</p>
</div>
</section>
<!-- What you will learn -->
<section class="section-light">
<div class="container">
<h2 class="section-title">What you will learn</h2>
<ol class="bc-lessons">
<li>
<h3>Calling n8n webhooks from Odoo automated actions.</h3>
<p>The core of the session. You set an automated action to fire on a business event and call an n8n webhook, carrying the record's data with it, and you watch the workflow pick it up on the other side. This is the piece most people have never wired up themselves.</p>
</li>
<li>
<h3>How the n8n integration for Odoo works, with tips and tricks from real use cases.</h3>
<p>What is actually happening underneath when the two systems talk, the parts that trip people up, and the shortcuts that come from running this on live systems rather than in a demo.</p>
</li>
<li>
<h3>Smart website workarounds for extending your Odoo automation.</h3>
<p>Where Odoo's own automation stops, and the website-side workarounds that get you further without writing a custom module.</p>
</li>
</ol>
</div>
</section>
<!-- The hands-on part -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">The hands-on part</h2>
<p class="bc-lead">
You spend most of the two hours inside the systems. We give you a free Odoo trial environment,
and you work through the exercises step by step inside n8n's own free plan: build the automated
action, wire the webhook, run the workflow, then break it and fix it with Oliver alongside you.
</p>
<p class="bc-lead">
You finish having tested a live automation on your own screen, and you keep access to the pattern
you built.
</p>
<p class="bc-note on-dark">
<strong>On n8n, in plain words:</strong> the n8n workspace is n8n's own free plan, which you sign
up for yourself. It is not part of the $120 and not included.
</p>
</div>
</section>
<!-- What you need first -->
<section class="section-light">
<div class="container">
<h2 class="section-title">What you need first</h2>
<dl class="bc-schedule">
<dt>Basic Odoo</dt>
<dd>You know what workflows and automated actions are and where to find them.</dd>
<dt>Basic programming</dt>
<dd>You know what an API is and how one gets called. You do not need to be a developer.</dd>
<dt>n8n experience</dt>
<dd>None needed. You can arrive having never opened n8n.</dd>
</dl>
<p class="bc-note">
If the first two do not describe you yet, the
<a href="/odoo-erp-automation-bootcamp/">bootcamp</a> is the right first step.
</p>
</div>
</section>
<!-- Your instructor -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">Your instructor</h2>
<p class="bc-lead">
<strong>Oliver Arnold, Technical Lead at ODOO4projects.</strong>
</p>
<p class="bc-lead">
Oliver has spent more than 25 years building software that has to keep working, and he is the lead
architect of the platform our hosting runs on. He teaches the way he works: the real system on the
screen, the real error in front of you, and the two of you fixing it together.
</p>
<p class="bc-lead">
He is the only instructor on this masterclass. Every session is him.
</p>
</div>
</section>
<!-- Price and booking -->
<section class="section-light">
<div class="container">
<h2 class="section-title">Price and booking</h2>
<p class="bc-price">The masterclass costs USD 120.00.</p>
<p class="bc-lead">
Covers two live hours with Oliver, the Q&amp;A, the step-by-step exercises, the free Odoo trial
system, and your certificate when you finish.
</p>
<p class="bc-subline">Next session: Thursdays in February 2027, 17:00 Central Time</p>
<p class="bc-note">
The four Thursdays are 4, 11, 18 and 25 February 2027. Central Time is UTC&minus;6 in February
&mdash; calendar invites carry the correct local time.
</p>
<div class="bc-action">
<form method="post" action="https://20.odoo4projects.com/shop/post_basket" target="_blank">
<input type="hidden" name="basket" value='[{"product_id":44,"qty":1}]' />
<input type="hidden" name="clear" value="1" />
<button type="submit" class="btn btn-brass btn-lg plausible-event-name=Buy">Buy for 120.00 USD</button>
</form>
</div>
<ul class="bc-related">
<li><a href="/support.html#contact">Questions before you book? Talk to us first</a></li>
<li><a href="/workshops/">All our live courses, side by side</a></li>
<li><a href="/odoo-erp-automation-bootcamp/">The ten-week bootcamp, if you are starting from zero</a></li>
<li><a href="/support.html">What our support does and does not cover</a></li>
</ul>
</div>
</section>
<!-- FAQ -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">Questions people ask first</h2>
<div class="bc-faq-grid">
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">Do I need to know n8n already?</summary>
<div class="bc-a">
<p>No. You can arrive having never opened it. The session starts at the webhook and builds up from there, inside n8n's own free plan.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What do I need to know before I join?</summary>
<div class="bc-a">
<p>Two things. Basic Odoo, meaning you know what workflows and automated actions are and where they live in the interface. And basic programming, enough to know what an API is and how one gets called.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What do I need installed?</summary>
<div class="bc-a">
<p>Nothing. A computer and a browser. We provide the free Odoo trial system, so you are working in a live setup rather than a video. You use n8n on n8n's own free plan.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">Do I get a certificate?</summary>
<div class="bc-a">
<p>Yes. You receive a certificate at the end of the masterclass.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What language is it in?</summary>
<div class="bc-a">
<p>English.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">Is this for me if I do not write code?</summary>
<div class="bc-a">
<p>Yes, as long as you can read code rather than write it. You need to understand what an API call is, not to build an application. If code is entirely foreign to you, the <a href="/odoo-erp-automation-bootcamp/">bootcamp</a> covers automating your business without any of it.</p>
</div>
</details>
</div>
</div>
</section>
<!-- Footer (copied from index.html; icon-font glyphs replaced with inline SVG so the page
carries no external icon dependency) -->
<footer class="footer">
<div class="container">
<div class="fgrid">
<div>
<h4>Useful Links</h4>
<ul>
<li><a href="/odoo-erp-automation-bootcamp/">ODOO Bootcamp</a></li>
<li><a href="/odoo-hosting-2027.html">ODOO Hosting in 2027</a></li>
<li><a href="/support.html">Support</a></li>
<li><a href="/legal.html">Legal</a></li>
</ul>
</div>
<div>
<h4>Partners</h4>
<div class="partner-list">
<a href="https://oc-guy.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OC Guy</a>
<a href="https://oca-py.org" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OCA Paraguay</a>
<a href="https://OD8N.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OD8N</a>
</div>
</div>
<div class="fcol-desc">
<h4>About us</h4>
<p>We build smart, scalable business solutions by combining the <strong>stability</strong> of Odoo ERP with the <strong>power</strong> of AI Agents and N8N automations.</p>
<p>From streamlined sales to global rollouts, our <strong>lean, eco-friendly</strong> approach helps businesses cut costs, boost efficiency, and grow without limits.</p>
</div>
<div>
<h4>Follow us on</h4>
<div class="social">
<a href="https://www.linkedin.com/company/odoo4projects/" target="_blank" aria-label="LinkedIn"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9h4v12H3zM9 9h3.8v1.7h.05c.53-.95 1.83-1.95 3.76-1.95 4.02 0 4.76 2.5 4.76 5.75V21h-4v-5.5c0-1.31-.02-3-1.9-3-1.9 0-2.19 1.42-2.19 2.9V21H9z" /></svg></a>
<a href="https://www.youtube.com/@ODOO4projects" target="_blank" aria-label="YouTube"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M23 12s0-3.2-.41-4.73a2.5 2.5 0 0 0-1.76-1.77C19.3 5.1 12 5.1 12 5.1s-7.3 0-8.83.4A2.5 2.5 0 0 0 1.4 7.27C1 8.8 1 12 1 12s0 3.2.41 4.73a2.5 2.5 0 0 0 1.76 1.77c1.53.4 8.83.4 8.83.4s7.3 0 8.83-.4a2.5 2.5 0 0 0 1.76-1.77C23 15.2 23 12 23 12zM9.75 15.02V8.98L15.5 12z" /></svg></a>
</div>
<form class="footer-contact-form" id="footerContactForm" action="mailto:hello@odoo4projects.com" method="post" enctype="text/plain">
<label class="bc-sr-only" for="footerContactEmail">Your email address</label>
<input type="email" id="footerContactEmail" name="email" placeholder="Your email address" required />
<div class="footer-textarea-wrap">
<label class="bc-sr-only" for="footerContactText">Your message</label>
<textarea id="footerContactText" name="message" placeholder="Your message..." required></textarea>
<button type="submit" class="footer-send-btn" aria-label="Send message"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 21l21-9L2 3v7l15 2-15 2z" /></svg></button>
</div>
<div class="footer-form-status" id="footerFormStatus" role="status"></div>
</form>
</div>
</div>
<div class="fcopy">Copyright &copy; ODOO4projects LLC</div>
</div>
</footer>
<script defer src="/static/buy.js"></script>
<script defer src="/static/lang.js"></script>
</body>
</html>
+13 -1
View File
@@ -26,7 +26,19 @@
</url> </url>
<url> <url>
<loc>https://odoo4projects.com/odoo-erp-automation-bootcamp/</loc> <loc>https://odoo4projects.com/odoo-erp-automation-bootcamp/</loc>
<lastmod>2026-10-26</lastmod> <lastmod>2026-10-28</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://odoo4projects.com/odoo-n8n-masterclass/</loc>
<lastmod>2026-10-28</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://odoo4projects.com/workshops/</loc>
<lastmod>2026-10-28</lastmod>
<changefreq>monthly</changefreq> <changefreq>monthly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
+786
View File
@@ -0,0 +1,786 @@
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>ODOO Workshops and Classes: Live Courses from USD 120</title>
<meta
name="description"
content="Two live courses with Oliver Arnold: the two-hour ODOO x N8N Masterclass at USD 120.00 and the ten-session ODOO ERP Automation Bootcamp at USD 465.00."
/>
<link rel="canonical" href="https://odoo4projects.com/workshops/" />
<meta property="og:title" content="ODOO Workshops and Classes: Live Courses from USD 120" />
<meta
property="og:description"
content="Two live courses with Oliver Arnold: the two-hour ODOO x N8N Masterclass at USD 120.00 and the ten-session ODOO ERP Automation Bootcamp at USD 465.00."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://odoo4projects.com/workshops/" />
<meta name="twitter:card" content="summary" />
<link rel="icon" href="/images/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap"
media="print"
onload="this.media='all'"
/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="stylesheet" href="/style.css" media="print" onload="this.media='all'" />
<noscript><link rel="stylesheet" href="/style.css" /></noscript>
<style>
/* ---- Workshops and Classes hub page (page-scoped; additive).
The block below is the bootcamp page's page-scoped CSS, reused so the two
course pages and this hub share one visual language, plus the comparison
table block already in use on odoo-hosting-2027.html. Three additions only,
each marked below. ---- */
.bc-sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Top bar (page-scoped: the site has no global header) */
.bc-topbar {
background: var(--midnight-2);
border-bottom: 1px solid var(--line-brass);
padding: 0.85rem 0;
}
.bc-topbar .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
flex-wrap: wrap;
}
.bc-brand {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
letter-spacing: 0.04em;
color: #fff;
}
.bc-brand span {
color: var(--brass);
}
.bc-topbar-links {
display: flex;
gap: 1.25rem;
font-size: 0.82rem;
}
.bc-topbar-links a {
color: rgba(255, 255, 255, 0.7);
}
.bc-topbar-links a:hover {
color: var(--brass);
}
/* Language selector — slides into the top-bar row, right of the links, behind a hairline brass divider.
CI §1/§2: brass marks the active language; lang.js owns the markup. */
.bc-topbar-links {
margin-left: auto;
}
.bc-topbar .lang-switch-slot {
display: flex;
align-items: center;
padding-left: 1rem;
border-left: 1px solid rgba(201, 162, 39, 0.45);
}
.bc-topbar .lang-switch {
color: rgba(255, 255, 255, 0.7);
}
.bc-topbar .lang-switch a:hover,
.bc-topbar .lang-switch a:focus-visible {
color: var(--brass-bright);
}
.bc-topbar .lang-switch a[aria-current="true"] {
color: var(--brass);
text-decoration: underline;
text-underline-offset: 3px;
}
/* Hero — same treatment as the bootcamp page: our own London night aerial
(CI §5) behind the header copy, with the identical two-zone scrim
(.78 0%-88%, ramp 88%-94%, .25 94%-100%) so every text block in the copy
zone keeps its contrast floor. */
.bc-hero {
min-height: 0;
padding: 3.5rem 0 3rem;
background-image: linear-gradient(90deg,
rgba(13, 27, 46, 0.78) 0%,
rgba(13, 27, 46, 0.78) 88%,
rgba(13, 27, 46, 0.25) 94%,
rgba(13, 27, 46, 0.25) 100%),
url("/images/hero/bootcamp-hero-desktop-1920.webp");
background-size: cover;
background-position: 50% 25%;
background-repeat: no-repeat;
}
/* The global .hero::after is a second, 50%-opacity midnight wash for the homepage's
flat hero; with the photo + gradient scrim above the copy it only dulls the shot,
so it is switched off on this page. One page-scoped rule, no global CSS touched. */
.bc-hero::after {
content: none;
}
@media (max-width: 640px) {
.bc-hero {
background-image: linear-gradient(90deg,
rgba(13, 27, 46, 0.78) 0%,
rgba(13, 27, 46, 0.78) 88%,
rgba(13, 27, 46, 0.25) 94%,
rgba(13, 27, 46, 0.25) 100%),
url("/images/hero/bootcamp-hero-mobile-900.webp");
background-position: 50% 50%;
}
}
/* wrapped hero-stat labels keep their tick on the first line */
.bc-hero .hero-stat {
align-items: flex-start;
}
.bc-hero .hero-stat i {
line-height: 1.6;
}
.bc-lead {
font-size: 1.05rem;
color: rgba(23, 28, 38, 0.78);
max-width: 720px;
margin: 0 auto 1rem;
line-height: 1.75;
}
.section-dark .bc-lead,
.bc-lead.on-dark {
color: rgba(255, 255, 255, 0.72);
}
.bc-subline {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
color: var(--midnight);
text-align: center;
max-width: 720px;
margin: 1.75rem auto 1.25rem;
letter-spacing: 0.02em;
}
.bc-action {
text-align: center;
margin-top: 0.5rem;
}
/* Grids — auto-fit so no breakpoint is needed */
.bc-list {
list-style: none;
padding: 0;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
max-width: 1040px;
}
/* Cards on midnight */
.bc-cards {
list-style: none;
padding: 0;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1rem;
max-width: 1040px;
}
.bc-cards li {
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--line-brass);
border-radius: var(--radius-lg);
padding: 1.35rem 1.4rem;
/* the two course cards carry a CTA: flex column lets .bc-card-cta sit on the
card floor so the two buttons line up across the grid row */
display: flex;
flex-direction: column;
}
.bc-cards .bc-card-cta {
margin-top: auto;
padding-top: 0.8rem;
}
.bc-cards h3 {
font-size: 1rem;
color: #fff;
margin-bottom: 0.45rem;
}
.bc-cards p {
font-size: 0.86rem;
color: rgba(255, 255, 255, 0.72);
line-height: 1.65;
margin: 0;
}
/* ADDITION 1 — the bootcamp's card carries a single paragraph; the course cards
here carry price, promise, format and a button. One spacing rule, no new look. */
.bc-cards li > * + * {
margin-top: 0.7rem;
}
.bc-cards p.bc-card-price {
font-family: Marcellus, Georgia, serif;
font-size: 1.05rem;
color: var(--brass);
}
.bc-cards .bc-card-format {
font-size: 0.78rem;
color: rgba(255, 255, 255, 0.55);
}
.bc-note {
max-width: 720px;
margin: 1.5rem auto 0;
font-size: 0.86rem;
color: rgba(23, 28, 38, 0.78);
line-height: 1.65;
}
.bc-note.on-dark {
color: rgba(255, 255, 255, 0.6);
}
.bc-note strong {
color: var(--midnight);
}
.bc-note.on-dark strong {
color: #fff;
}
/* Pull quote (hero-adjacent, the old page's treatment) */
.bc-quote {
font-family: Marcellus, Georgia, serif;
font-size: 1.25rem;
line-height: 1.55;
color: var(--midnight);
text-align: center;
max-width: 760px;
margin: 0 auto 0.75rem;
}
.bc-quote-attr {
font-family: Inter, sans-serif;
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.15em;
text-transform: uppercase;
/* midnight, not brass-deep: brass-deep on cream measures 4.2:1 and fails AA
at this size (detector finding, 2026-10-28) */
color: var(--midnight);
text-align: center;
}
/* Related links */
.bc-related {
list-style: none;
padding: 0;
margin: 2rem auto 0;
max-width: 720px;
display: grid;
gap: 0.5rem;
}
.bc-related li {
position: relative;
padding-left: 1.4rem;
font-size: 0.88rem;
}
.bc-related li::before {
content: "";
position: absolute;
left: 0.25rem;
top: 0.55rem;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--brass);
}
.bc-related a {
color: var(--midnight);
text-decoration: underline;
text-decoration-color: var(--brass);
text-underline-offset: 2px;
}
.bc-related a:hover {
text-decoration-color: var(--brass-deep);
text-decoration-thickness: 2px;
}
/* FAQ (native details/summary — no JS) */
.bc-faq-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
max-width: 1000px;
margin: 0 auto;
align-items: start;
}
.bc-faq {
background: var(--ivory);
border: 1px solid var(--line);
border-radius: var(--radius-lg);
padding: 0.4rem 1.25rem;
box-shadow: var(--shadow-rest);
transition: box-shadow 0.25s;
}
.bc-faq[open],
.bc-faq:hover {
box-shadow: var(--shadow-hover);
}
.bc-faq summary {
cursor: pointer;
list-style: none;
padding: 0.85rem 0;
display: flex;
justify-content: space-between;
align-items: center;
gap: 0.75rem;
font-family: Marcellus, Georgia, serif;
font-size: 0.98rem;
color: var(--midnight);
}
.bc-faq summary::-webkit-details-marker {
display: none;
}
.bc-faq summary::after {
content: "+";
font-family: Inter, sans-serif;
color: var(--brass);
font-size: 1.15rem;
line-height: 1;
flex-shrink: 0;
}
.bc-faq[open] summary::after {
content: "\2212";
}
.bc-faq summary:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.bc-faq .bc-a {
font-size: 0.87rem;
color: rgba(23, 28, 38, 0.78);
line-height: 1.7;
padding-bottom: 1rem;
}
.bc-faq .bc-a p:last-child {
margin-bottom: 0;
}
/* ADDITION 2 — comparison table, copied verbatim from odoo-hosting-2027.html
(same component, same dark palette, no new look). */
.cmp-table-wrap {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
border-radius: var(--radius-lg);
border: 1px solid var(--line-brass);
background: rgba(255, 255, 255, 0.03);
}
.cmp-table {
width: 100%;
border-collapse: collapse;
min-width: 860px;
}
.cmp-table th,
.cmp-table td {
padding: 0.7rem 0.9rem;
font-size: 0.85rem;
text-align: left;
vertical-align: top;
border-bottom: 1px solid rgba(201, 162, 39, 0.1);
}
.cmp-table thead th {
font-family: Marcellus, Georgia, serif;
font-size: 0.82rem;
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--brass);
background: rgba(13, 27, 46, 0.55);
border-bottom: 1px solid var(--line-brass);
white-space: normal;
line-height: 1.3;
}
.cmp-table tbody th {
font-family: Inter, sans-serif;
font-weight: 600;
font-size: 0.82rem;
color: #fff;
background: rgba(255, 255, 255, 0.02);
}
.cmp-table td {
color: rgba(255, 255, 255, 0.78);
line-height: 1.5;
}
.cmp-table tbody tr:hover td,
.cmp-table tbody tr:hover th {
background: rgba(201, 162, 39, 0.06);
}
.cmp-table tbody tr:last-child th,
.cmp-table tbody tr:last-child td {
border-bottom: none;
}
.cmp-table a {
color: var(--brass-bright);
text-decoration: underline;
text-underline-offset: 2px;
}
@media (max-width: 768px) {
.bc-faq-grid {
grid-template-columns: 1fr;
}
}
/* ADDITION 3 — focus states for the two new interactive elements on this page
(the anchor CTA and the card buttons); the bootcamp's two rules unchanged. */
.btn:focus-visible,
.bc-topbar-links a:focus-visible,
.bc-related a:focus-visible,
.cmp-table a:focus-visible {
outline: 3px solid var(--brass-bright);
outline-offset: 2px;
border-radius: var(--radius);
}
.btn-brass:focus-visible {
outline-color: #fff;
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "ODOO4projects workshops and classes",
"url": "https://odoo4projects.com/workshops/",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Course",
"name": "ODOO × N8N Masterclass",
"url": "https://odoo4projects.com/odoo-n8n-masterclass/",
"provider": { "@type": "Organization", "name": "ODOO4projects", "url": "https://odoo4projects.com/" },
"instructor": { "@type": "Person", "name": "Oliver Arnold", "jobTitle": "Technical Lead" },
"inLanguage": "en",
"offers": { "@type": "Offer", "price": "120.00", "priceCurrency": "USD", "category": "Paid" },
"hasCourseInstance": { "@type": "CourseInstance", "courseMode": "online", "courseWorkload": "PT2H" }
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Course",
"name": "ODOO ERP Automation Bootcamp",
"url": "https://odoo4projects.com/odoo-erp-automation-bootcamp/",
"provider": { "@type": "Organization", "name": "ODOO4projects", "url": "https://odoo4projects.com/" },
"instructor": { "@type": "Person", "name": "Oliver Arnold", "jobTitle": "Technical Lead" },
"inLanguage": "en",
"offers": { "@type": "Offer", "price": "465.00", "priceCurrency": "USD", "category": "Paid" },
"hasCourseInstance": { "@type": "CourseInstance", "courseMode": "online", "courseWorkload": "PT10H" }
}
}
]
}
</script>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
<div class="bc-topbar">
<div class="container">
<a class="bc-brand" href="/">ODOO4<span>projects</span></a>
<nav class="bc-topbar-links" aria-label="Page links">
<a href="/index.html#pricing">Plans &amp; pricing</a>
<a href="/odoo-erp-automation-bootcamp/">Bootcamp</a>
<a href="/support.html">Support</a>
</nav>
<div data-lang-switcher class="lang-switch-slot"></div>
</div>
</div>
<!-- Hero -->
<section class="hero bc-hero">
<div class="container">
<p class="hero-kicker">TWO LIVE COURSES &middot; ONLINE &middot; OLIVER ARNOLD &middot; ENGLISH</p>
<h1>Workshops and Classes</h1>
<p class="hero-sub">
Two live courses, one instructor, and a working system at the end of both. You work on real data
with the person who runs this platform, and you leave able to do the thing the course is named
after.
</p>
<div class="hero-actions">
<a class="btn btn-brass btn-lg" href="#our-workshops">See the two courses</a>
</div>
</div>
</section>
<!-- Pull quote (kept verbatim, attributed) -->
<section class="section-light">
<div class="container">
<p class="bc-quote">
&ldquo;You need to learn your skills from people who use them on a daily basis!&rdquo;
&ldquo;That is what I teach my kids and that is how we organize our workshops.&rdquo;
</p>
<p class="bc-quote-attr">&mdash; Oliver Arnold, Technical Lead, ODOO4projects</p>
</div>
</section>
<!-- Our Workshops -->
<section class="section-dark" id="our-workshops">
<div class="container">
<h2 class="section-title">Our Workshops</h2>
<p class="bc-lead">
Two courses. Both live, both online, both taught by Oliver Arnold, and both end with something
running in front of you rather than notes to file away. Pick the one that matches where your
business is today.
</p>
<ul class="bc-cards">
<li>
<h3>ODOO &times; N8N Masterclass</h3>
<p class="bc-card-price">USD 120.00 &middot; 2 hours</p>
<p>You leave able to make Odoo start its own jobs: an automated action fires on a business event, calls an n8n webhook, and n8n carries the work forward while you are somewhere else.</p>
<p class="bc-card-format">Live webinar with a Q&amp;A at the end &middot; Online &middot; English</p>
<p class="bc-card-cta"><a class="btn btn-brass" href="/odoo-n8n-masterclass/">More Info</a></p>
</li>
<li>
<h3>ODOO ERP Automation Bootcamp</h3>
<p class="bc-card-price">USD 465.00 &middot; 10 live sessions, 1 hour each</p>
<p>You leave with a working ERP for your own company: your products, your customers, your quotes, your invoices and your stock in one system you can keep running yourself.</p>
<p class="bc-card-format">Live and online, every Thursday 18:00&ndash;19:00 Central Time &middot; One year of hosted Odoo Community Edition included &middot; English</p>
<p class="bc-card-cta"><a class="btn btn-brass" href="/odoo-erp-automation-bootcamp/">More Info</a></p>
</li>
</ul>
</div>
</section>
<!-- Which one is yours -->
<section class="section-light">
<div class="container">
<h2 class="section-title">Which one is yours</h2>
<p class="bc-lead">
The two courses answer two different problems, and the price difference is the honest measure of
how much work is in front of you.
</p>
<p class="bc-lead">
<strong>If Odoo already runs your business.</strong> Take the masterclass if Odoo is already
running your business and the gap is between the systems. You know what workflows and automated
actions are and where they live in the interface, and you are comfortable enough with code to
read a payload. Two hours later the automation you have been doing by hand is running without
you.
</p>
<p class="bc-lead">
<strong>If you do not have a system yet.</strong> Take the bootcamp if the system is the thing
you do not have. You run the business, the stock and the invoices, and most of it lives in a
spreadsheet and one person's memory. No ERP knowledge and no coding are assumed, because the ten
sessions are about your business running, not about the software under it.
</p>
<p class="bc-lead">
<strong>The honest limit.</strong> If you have never opened Odoo, or an API is still a vague word
to you, start with the
<a href="/odoo-erp-automation-bootcamp/">bootcamp</a>. The masterclass assumes you are already
past that line.
</p>
<p class="bc-lead">
If you want n8n but not the technical depth, lesson 9 of the bootcamp is n8n and AI for your
business, built for the owner rather than the developer.
</p>
</div>
</section>
<!-- How our sessions work -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">How our sessions work</h2>
<ul class="bc-cards">
<li>
<h3>Live and online.</h3>
<p>Everything runs in your browser, on the computer you already have, with nothing to install on it.</p>
</li>
<li>
<h3>One instructor.</h3>
<p>Oliver Arnold, Technical Lead at ODOO4projects, teaches every session of both courses. You get the same person in week ten that you met in week one.</p>
</li>
<li>
<h3>English, with your questions answered in the room.</h3>
<p>The masterclass ends in a Q&amp;A; the bootcamp's last session is an open workshop where we fix whatever is still broken in your setup.</p>
</li>
</ul>
<p class="bc-note on-dark">
<strong>On n8n, in plain words:</strong> n8n is a third-party tool, used on n8n's own free plan.
The free plan is not part of either price and is not included.
</p>
</div>
</section>
<!-- Your instructor -->
<section class="section-light">
<div class="container">
<h2 class="section-title">Your instructor</h2>
<p class="bc-lead">
<strong>Oliver Arnold, Technical Lead at ODOO4projects.</strong>
</p>
<p class="bc-lead">
Oliver has spent more than 25 years building software that has to keep working, and he is the lead
architect of the platform these courses run on. He teaches by putting the real system in front of
you and fixing the real problem with you, which is the whole reason the courses are live instead
of recorded.
</p>
<p class="bc-lead">He is the only instructor on both courses.</p>
<ul class="bc-related">
<li><a href="/odoo-n8n-masterclass/">The two-hour ODOO &times; N8N Masterclass</a></li>
<li><a href="/odoo-erp-automation-bootcamp/">The ten-session ODOO ERP Automation Bootcamp</a></li>
<li><a href="/support.html#contact">Questions before you book? Talk to us first</a></li>
</ul>
</div>
</section>
<!-- FAQ -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">Questions people ask first</h2>
<div class="bc-faq-grid">
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">Which one should I take?</summary>
<div class="bc-a">
<p>Take the masterclass if Odoo already runs your business and you want Odoo and n8n working together. Take the bootcamp if you do not have a system yet and want to build one. If you have never opened Odoo, the bootcamp comes first.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">Do I need technical skills?</summary>
<div class="bc-a">
<p>For the bootcamp, no. The sessions assume no ERP knowledge and no coding. For the masterclass, two things: you already run Odoo and know what workflows and automated actions are, and you know what an API is and how one gets called. You do not need to be a developer.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What do I need installed?</summary>
<div class="bc-a">
<p>Nothing. A computer and a browser. The masterclass hands you a free Odoo trial system and you use n8n on n8n's own free plan; the bootcamp runs on your own hosted system from the first session.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What language are the courses in?</summary>
<div class="bc-a">
<p>English.</p>
</div>
</details>
<details class="bc-faq">
<summary class="plausible-event-name=FAQ">What is the difference in length?</summary>
<div class="bc-a">
<p>Two hours, once, for the masterclass. Ten sessions of one hour across three months for the bootcamp, ten hours of teaching in total.</p>
</div>
</details>
</div>
</div>
</section>
<!-- Both courses, side by side -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">Both courses, side by side</h2>
<div class="cmp-table-wrap">
<table class="cmp-table">
<caption class="bc-sr-only">
The two live courses compared on price, length, format, prerequisites and what is included.
</caption>
<thead>
<tr>
<th scope="col">&nbsp;</th>
<th scope="col">ODOO &times; N8N Masterclass</th>
<th scope="col">ODOO ERP Automation Bootcamp</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Price</th>
<td>USD 120.00</td>
<td>USD 465.00</td>
</tr>
<tr>
<th scope="row">Length</th>
<td>2 hours</td>
<td>10 sessions &times; 1 hour (10 hours)</td>
</tr>
<tr>
<th scope="row">Format</th>
<td>Live webinar with Q&amp;A</td>
<td>Live and online, Thursdays 18:00&ndash;19:00 Central Time</td>
</tr>
<tr>
<th scope="row">Prerequisites</th>
<td>Basic Odoo, basic programming</td>
<td>None</td>
</tr>
<tr>
<th scope="row">Included</th>
<td>2 live hours, Q&amp;A, free Odoo trial system, certificate</td>
<td>10 live sessions, one year of hosted Odoo CE, alumni chat, setup review</td>
</tr>
<tr>
<th scope="row">More info</th>
<td><a href="/odoo-n8n-masterclass/">/odoo-n8n-masterclass/</a></td>
<td><a href="/odoo-erp-automation-bootcamp/">/odoo-erp-automation-bootcamp/</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- Footer (copied from index.html; icon-font glyphs replaced with inline SVG so the page
carries no external icon dependency) -->
<footer class="footer">
<div class="container">
<div class="fgrid">
<div>
<h4>Useful Links</h4>
<ul>
<li><a href="/odoo-erp-automation-bootcamp/">ODOO Bootcamp</a></li>
<li><a href="/odoo-hosting-2027.html">ODOO Hosting in 2027</a></li>
<li><a href="/support.html">Support</a></li>
<li><a href="/legal.html">Legal</a></li>
</ul>
</div>
<div>
<h4>Partners</h4>
<div class="partner-list">
<a href="https://oc-guy.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OC Guy</a>
<a href="https://oca-py.org" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OCA Paraguay</a>
<a href="https://OD8N.com" target="_blank" rel="noopener" class="partner-item"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#c9a227" stroke-width="2" aria-hidden="true"><path d="M20 7h-9M14 17H5M20 7l-4-4M20 7l-4 4M4 17l4 4M4 17l4-4" /></svg> OD8N</a>
</div>
</div>
<div class="fcol-desc">
<h4>About us</h4>
<p>We build smart, scalable business solutions by combining the <strong>stability</strong> of Odoo ERP with the <strong>power</strong> of AI Agents and N8N automations.</p>
<p>From streamlined sales to global rollouts, our <strong>lean, eco-friendly</strong> approach helps businesses cut costs, boost efficiency, and grow without limits.</p>
</div>
<div>
<h4>Follow us on</h4>
<div class="social">
<a href="https://www.linkedin.com/company/odoo4projects/" target="_blank" aria-label="LinkedIn"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5zM3 9h4v12H3zM9 9h3.8v1.7h.05c.53-.95 1.83-1.95 3.76-1.95 4.02 0 4.76 2.5 4.76 5.75V21h-4v-5.5c0-1.31-.02-3-1.9-3-1.9 0-2.19 1.42-2.19 2.9V21H9z" /></svg></a>
<a href="https://www.youtube.com/@ODOO4projects" target="_blank" aria-label="YouTube"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M23 12s0-3.2-.41-4.73a2.5 2.5 0 0 0-1.76-1.77C19.3 5.1 12 5.1 12 5.1s-7.3 0-8.83.4A2.5 2.5 0 0 0 1.4 7.27C1 8.8 1 12 1 12s0 3.2.41 4.73a2.5 2.5 0 0 0 1.76 1.77c1.53.4 8.83.4 8.83.4s7.3 0 8.83-.4a2.5 2.5 0 0 0 1.76-1.77C23 15.2 23 12 23 12zM9.75 15.02V8.98L15.5 12z" /></svg></a>
</div>
<form class="footer-contact-form" id="footerContactForm" action="mailto:hello@odoo4projects.com" method="post" enctype="text/plain">
<label class="bc-sr-only" for="footerContactEmail">Your email address</label>
<input type="email" id="footerContactEmail" name="email" placeholder="Your email address" required />
<div class="footer-textarea-wrap">
<label class="bc-sr-only" for="footerContactText">Your message</label>
<textarea id="footerContactText" name="message" placeholder="Your message..." required></textarea>
<button type="submit" class="footer-send-btn" aria-label="Send message"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M2 21l21-9L2 3v7l15 2-15 2z" /></svg></button>
</div>
<div class="footer-form-status" id="footerFormStatus" role="status"></div>
</form>
</div>
</div>
<div class="fcopy">Copyright &copy; ODOO4projects LLC</div>
</div>
</footer>
<script defer src="/static/lang.js"></script>
</body>
</html>