Files
webmaster 9d14652a57 hide [hidden] site-wide: one [hidden] { display:none !important } in style.css
A filtered-out directory card stayed visible. The card is targeted by an
id-based ready-state selector (`.js #directory[data-dir-state="ready"]
#dirGrid > .dev-card`, two ids), which outranked the old per-element patch
`.dev-card[hidden] { display:none }` — so `card.hidden = true` set the
attribute and every card stayed on screen while the count line correctly
read "Showing 1 of 4".

Fix: one rule, `[hidden] { display:none !important }`, early in /style.css.
A class- or id-based `display` can no longer beat the attribute, so this
cannot recur with the next class that sets `display`. The per-element
`[hidden]` patches are removed so a single mechanism governs:
 - odoo-community-developers: cards + filter row + pager + modal
   (load-bearing — each sets `display`); focus-sliders/noscript (redundant)
 - index/de/es `.hero-notice[hidden]`, odoo-black-friday `.ads-consent[hidden]`
   (redundant — those elements set no `display`)
Re-fingerprint local assets (style.css changed): /style.css?v 3332fbba93 ->
061517baef across 51 pages.

Measured in a real browser (local harness, stubbed webhook; no record created,
no probe write) — computed display + geometry, never the `hidden` property:
 - filtered to one card: the other three report display:none and height 0;
   the visible set (1) equals the count line ("Showing 1 of 4") — 1 == 1
 - HEAD (pre-fix) reproduces the defect: 3 cards hidden=true yet display:flex,
   height 599.38 each; 4 visible vs the count's 1
 - pager: display:none height 0 with one page; display:flex height 66.83 with
   12 cards (Page 1 of 2); page 2 hides page-1 cards (display:none)
 - modals closed: display:none height 0; load state: cards 0, pager/empty
   display:none, filter row visibility:hidden by design
 - 375 px: same result, no horizontal overflow; avatar ask-row top identical
   across a row (2053.97 / links 2086.91)
2026-11-03 22:34:39 +00:00

794 lines
32 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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 595.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 595.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?v=061517baef" />
<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": "595.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 -->
<main>
<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: <a href="/blog/posts/howto-ai-automation.html">an automated action fires on a business event, calls an n8n webhook</a>, 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 595.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; Limited to 6 participants &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, class size, 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 595.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">Class size</th>
<td>&mdash;</td>
<td>Limited to 6 participants</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) -->
</main>
<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="/odoo-community-developers/">Odoo Freelancer Directory</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:support@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?v=3ec49a7e62"></script>
</body>
</html>