Files
ODOO4projects.com/odoo-black-friday/index.html
T
webmaster 2a62ac871a fix(bf-pages): restore ODOO Bootcamp footer link; add HOST27 to the BF block
Both pages shipped (355c5d0) with a three-item footer; the site footer is a
four-item commitment. The /odoo-erp-automation-bootcamp/ entry is restored on
both pages, matching index.html / odoo-hosting-2027.html.

/odoo-hosting-offers/: the code HOST27 is added inside the date-scoped Black
Friday block only (BF-BLOCK-START..END), so it disappears with the block after
30 Nov. Title, meta description and H1 are untouched — the intent split holds.

verify-html.py: PROBLEMS 0. node --check script.js: OK.
2026-10-30 13:22:48 +00:00

639 lines
25 KiB
HTML
Raw 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 Black Friday 2026: $100 Off Your First Year</title>
<meta
name="description"
content="Our Black Friday and Cyber Monday offer: $100 off your first year of managed Odoo hosting with code HOST27. Runs 16–30 November 2026."
/>
<link rel="canonical" href="https://odoo4projects.com/odoo-black-friday/" />
<meta property="og:title" content="Odoo Black Friday 2026: $100 Off Your First Year" />
<meta
property="og:description"
content="Our Black Friday and Cyber Monday offer: $100 off your first year of managed Odoo hosting with code HOST27. Runs 16–30 November 2026."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://odoo4projects.com/odoo-black-friday/" />
<meta name="twitter:card" content="summary_large_image" />
<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 Black Friday 2026 page (page-scoped; additive) ---- */
.bf-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) */
.bf-topbar {
background: var(--midnight-2);
border-bottom: 1px solid var(--line-brass);
padding: 0.85rem 0;
}
.bf-topbar .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
flex-wrap: wrap;
}
.bf-brand {
font-family: Marcellus, Georgia, serif;
font-size: 1.15rem;
letter-spacing: 0.04em;
color: #fff;
}
.bf-brand span {
color: var(--brass);
}
.bf-topbar-links {
display: flex;
gap: 1.25rem;
font-size: 0.82rem;
margin-left: auto;
}
.bf-topbar-links a {
color: rgba(255, 255, 255, 0.7);
}
.bf-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. */
.bf-topbar .lang-switch-slot {
display: flex;
align-items: center;
padding-left: 1rem;
border-left: 1px solid rgba(201, 162, 39, 0.45);
}
.bf-topbar .lang-switch {
color: rgba(255, 255, 255, 0.7);
}
.bf-topbar .lang-switch a:hover,
.bf-topbar .lang-switch a:focus-visible {
color: var(--brass-bright);
}
.bf-topbar .lang-switch a[aria-current="true"] {
color: var(--brass);
text-decoration: underline;
text-underline-offset: 3px;
}
/* Hero */
.bf-hero {
min-height: 0;
padding: 3.5rem 0 3rem;
}
.bf-hero .hero-sub {
max-width: 640px;
}
.bf-hero .hero-window {
font-size: 0.95rem;
color: rgba(255, 255, 255, 0.78);
line-height: 1.6;
margin: 0 0 0.25rem;
}
.bf-hero .hero-deadline {
font-size: 0.95rem;
color: rgba(255, 255, 255, 0.6);
line-height: 1.6;
margin: 0 0 1.5rem;
}
/* The one product box */
.bf-box-inner {
max-width: 720px;
margin: 0 auto;
background: var(--ivory);
border: 1px solid var(--line-brass);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-rest);
padding: 2rem 2rem 1.5rem;
}
.bf-box-title {
text-align: center;
margin-bottom: 1.25rem;
}
/* Reveal mechanic — native <details>/<summary>: the panel is in the DOM in both states,
keyboard-operable, and works with JavaScript disabled. CSS reveals it; JS only mirrors
the open state to aria-expanded. The panel is never display:none by our stylesheet. */
.bf-reveal {
border-top: 1px solid var(--line);
}
.bf-reveal-summary {
cursor: pointer;
list-style: none;
display: block;
padding: 1.25rem 0 1rem;
}
.bf-reveal-summary::-webkit-details-marker {
display: none;
}
.bf-reveal-summary:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.bf-teaser {
font-size: 1.02rem;
color: var(--ink);
line-height: 1.6;
margin: 0 0 1rem;
}
.bf-open-label {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-family: Inter, sans-serif;
font-weight: 600;
font-size: 0.82rem;
letter-spacing: 0.04em;
text-transform: uppercase;
color: var(--midnight);
background: var(--brass);
border-radius: var(--radius-pill);
padding: 0.6rem 1.25rem;
}
.bf-open-label::after {
content: "+";
font-size: 1.05rem;
line-height: 1;
}
/* closed state only: the label is the invitation, so it goes once the panel is open.
`[open]` is set by the browser natively — this needs no JavaScript. */
.bf-reveal[open] .bf-open-label {
display: none;
}
.bf-panel {
padding: 0.25rem 0 1.25rem;
border-top: 1px solid var(--line);
}
.bf-price {
font-size: 1.05rem;
color: var(--ink);
margin: 1rem 0 0.75rem;
}
.bf-price strong {
font-family: Marcellus, Georgia, serif;
font-weight: 400;
font-size: 1.55rem;
color: var(--brass-deep);
letter-spacing: 0.02em;
}
.bf-included {
font-size: 0.9rem;
color: var(--ink-soft);
line-height: 1.7;
margin: 0 0 0.9rem;
}
.bf-mechanism {
font-size: 0.98rem;
color: var(--ink);
background: rgba(201, 162, 39, 0.12);
border: 1px solid var(--line-brass);
border-radius: var(--radius-lg);
padding: 0.85rem 1.1rem;
margin: 0 0 0.75rem;
}
.bf-mechanism strong {
color: var(--midnight);
}
.bf-deadline {
font-size: 0.85rem;
color: var(--ink-soft);
margin: 0 0 1.25rem;
}
.bf-cta {
margin: 0;
}
.bf-cta a {
display: inline-block;
font-family: Marcellus, Georgia, serif;
font-size: 0.9rem;
letter-spacing: 0.04em;
color: var(--midnight);
background: var(--brass);
border-radius: var(--radius-pill);
padding: 0.8rem 1.75rem;
text-decoration: none;
transition: background 0.2s;
}
.bf-cta a:hover {
background: var(--brass-bright);
color: var(--midnight);
}
.bf-cta a:focus-visible {
outline: 3px solid var(--midnight);
outline-offset: 2px;
}
/* "What the code does" band */
.bf-lead {
font-size: 1.05rem;
line-height: 1.75;
max-width: 760px;
margin: 0 auto 1.25rem;
text-align: center;
}
.section-dark .bf-lead {
color: rgba(255, 255, 255, 0.78);
}
.bf-lead:last-child {
margin-bottom: 0;
}
.bf-lead code {
font-family: Inter, sans-serif;
font-weight: 600;
color: var(--brass-bright);
}
.bf-lead strong {
color: #fff;
}
/* FAQ (native details/summary — no JS) */
.cmp-faq-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
max-width: 1000px;
margin: 0 auto;
}
.cmp-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;
}
.cmp-faq[open] {
box-shadow: var(--shadow-hover);
}
.cmp-faq:hover {
box-shadow: var(--shadow-hover);
}
.cmp-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);
}
.cmp-faq summary::-webkit-details-marker {
display: none;
}
.cmp-faq summary::after {
content: "+";
font-family: Inter, sans-serif;
color: var(--brass);
font-size: 1.15rem;
line-height: 1;
flex-shrink: 0;
transition: transform 0.25s;
}
.cmp-faq[open] summary::after {
content: "\2212";
}
.cmp-faq summary:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.cmp-faq .faq-a,
.cmp-faq .cmp-a {
font-size: 0.87rem;
color: var(--ink-soft);
line-height: 1.7;
padding-bottom: 1rem;
}
.cmp-faq .faq-a p:last-child,
.cmp-faq .cmp-a p:last-child {
margin-bottom: 0;
}
@media (max-width: 768px) {
.cmp-faq-grid {
grid-template-columns: 1fr;
}
}
/* Related links */
.bf-links {
display: flex;
gap: 1.25rem;
flex-wrap: wrap;
justify-content: center;
max-width: 900px;
margin: 2.5rem auto 0;
}
.bf-links a {
font-size: 0.88rem;
color: var(--brass-deep);
text-decoration: underline;
text-underline-offset: 3px;
}
.bf-links a:focus-visible {
outline: 2px solid var(--brass);
outline-offset: 3px;
border-radius: var(--radius);
}
.btn:focus-visible,
.bf-topbar-links a:focus-visible,
.bf-links a:focus-visible {
outline: 3px solid var(--brass-bright);
outline-offset: 2px;
border-radius: var(--radius);
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://odoo4projects.com/#organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/",
"foundingDate": "2020",
"sameAs": ["https://www.linkedin.com/company/odoo4projects/"],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"url": "https://odoo4projects.com/support.html#contact"
}
},
{
"@type": "WebPage",
"@id": "https://odoo4projects.com/odoo-black-friday/",
"url": "https://odoo4projects.com/odoo-black-friday/",
"name": "Odoo Black Friday 2026: $100 Off Your First Year",
"description": "Our Black Friday and Cyber Monday offer: $100 off your first year of managed Odoo hosting with code HOST27. Runs 16–30 November 2026.",
"isPartOf": { "@id": "https://odoo4projects.com/#organization" },
"about": [
{ "@type": "Thing", "name": "Odoo Black Friday" },
{ "@type": "Thing", "name": "managed Odoo Community hosting" }
]
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://odoo4projects.com/" },
{ "@type": "ListItem", "position": 2, "name": "Odoo Black Friday 2026", "item": "https://odoo4projects.com/odoo-black-friday/" }
]
},
{
"@type": "Product",
"name": "On the Rise — managed Odoo Community hosting",
"description": "Managed Odoo Community hosting on the On the Rise plan: the server, backups, SSL certificate and version upgrades are run for you on one yearly price, with no per-user licence.",
"brand": { "@id": "https://odoo4projects.com/#organization" },
"offers": [
{
"@type": "Offer",
"name": "On the Rise — Black Friday 2026",
"price": "295.00",
"priceCurrency": "USD",
"url": "https://odoo4projects.com/odoo-black-friday/"
}
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "When does the Odoo Black Friday offer run?",
"acceptedAnswer": {
"@type": "Answer",
"text": "From 16 to 30 November 2026. It ends on Cyber Monday, 30 November 2026."
}
},
{
"@type": "Question",
"name": "What does the HOST27 code give me?",
"acceptedAnswer": {
"@type": "Answer",
"text": "One hundred dollars off your first year of hosting. It is once per customer, one redemption."
}
},
{
"@type": "Question",
"name": "What does On the Rise cost in the offer?",
"acceptedAnswer": {
"@type": "Answer",
"text": "It is $395.00 a year, and $295.00 for your first year with HOST27. After the first year it renews at the $395 list price."
}
},
{
"@type": "Question",
"name": "Does the discount apply to renewals?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. It applies to your first year only. After that, hosting renews at its normal price, $395.00 a year on On the Rise."
}
},
{
"@type": "Question",
"name": "What happens if I miss the deadline?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The price goes back to normal on 1 December 2026 and the code stops working. It returns with next year's offer."
}
}
]
}
]
}
</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>
<script defer src="/static/lang.js"></script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
<div class="bf-topbar">
<div class="container">
<a class="bf-brand" href="/">ODOO4<span>projects</span></a>
<nav class="bf-topbar-links" aria-label="Page links">
<a href="/index.html#pricing">Plans &amp; pricing</a>
<a href="/support.html">Support</a>
</nav>
<div data-lang-switcher class="lang-switch-slot"></div>
</div>
</div>
<!-- Hero -->
<section class="hero bf-hero">
<div class="container">
<p class="hero-kicker">16–30 NOVEMBER 2026 · ONCE A YEAR</p>
<h1>Odoo Black Friday 2026</h1>
<p class="hero-sub">One hundred dollars off the year your business runs on.</p>
<p class="hero-window">The window is 16–30 November 2026.</p>
<p class="hero-deadline">Last day to use it: Monday 30 November 2026.</p>
<div class="hero-actions">
<a href="/index.html#trialCard" class="btn btn-brass btn-lg">Start the 30-day free trial</a>
</div>
</div>
</section>
<!-- The one product box — Hosting, On the Rise -->
<section class="section-light bf-box" id="offer">
<div class="container">
<div class="bf-box-inner">
<h2 class="bf-box-title">Hosting: On the Rise</h2>
<details class="bf-reveal">
<summary class="bf-reveal-summary" aria-expanded="false">
<p class="bf-teaser">Your whole business in one system, $395 a year. Open to see the Black Friday price.</p>
<span class="bf-open-label">Open the Black Friday price</span>
</summary>
<div class="bf-panel">
<p class="bf-price"><strong>$395.00</strong> a year — <strong>$295.00</strong> for your first year.</p>
<p class="bf-included">Then it renews at the $395 list price. One yearly price, no per-user licence, no setup fee. We run the server, the backups, your certificate and the version upgrades for you.</p>
<!-- mechanism string, used verbatim — see §3 -->
<p class="bf-mechanism">Black Friday: <strong>$100 off your first year</strong> with code <strong>HOST27</strong>. One redemption per customer.</p>
<p class="bf-deadline">Ends Monday 30 November 2026.</p>
<p class="bf-cta"><a href="/odoo-hosting-offers/">See what a year of hosting includes</a></p>
</div>
</details>
</div>
</div>
</section>
<!-- What the code does -->
<section class="section-dark">
<div class="container">
<h2 class="section-title">What the code does</h2>
<p class="bf-lead">HOST27 takes $100 off your first year of hosting. It is once per customer, one redemption.</p>
<p class="bf-lead">It is applied at checkout, and it ends on 30 November 2026. After that the price goes back to normal until next year.</p>
</div>
</section>
<!-- FAQ -->
<section class="section-light" id="faq">
<div class="container">
<h2 class="section-title">Black Friday questions</h2>
<div class="cmp-faq-grid">
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">When does the Odoo Black Friday offer run?</summary>
<div class="faq-a"><p>From 16 to 30 November 2026. It ends on Cyber Monday, 30 November 2026.</p></div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">What does the HOST27 code give me?</summary>
<div class="faq-a"><p>One hundred dollars off your first year of hosting. It is once per customer, one redemption.</p></div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">What does On the Rise cost in the offer?</summary>
<div class="faq-a"><p>It is $395.00 a year, and $295.00 for your first year with HOST27. After the first year it renews at the $395 list price.</p></div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">Does the discount apply to renewals?</summary>
<div class="faq-a"><p>No. It applies to your first year only. After that, hosting renews at its normal price, $395.00 a year on On the Rise.</p></div>
</details>
<details class="cmp-faq">
<summary class="plausible-event-name=FAQ">What happens if I miss the deadline?</summary>
<div class="faq-a"><p>The price goes back to normal on 1 December 2026 and the code stops working. It returns with next year's offer.</p></div>
</details>
</div>
<nav class="bf-links" aria-label="Related pages">
<a href="/odoo-hosting-2027.html">Odoo hosting in 2027, compared</a>
<a href="/blog/posts/community-vs-enterprise-cost.html">What Community costs compared with Enterprise</a>
<a href="/index.html#trialCard">Start the 30-day free trial</a>
</nav>
</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="bf-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="bf-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>
/* Enhancement only: mirror the reveal's open state to aria-expanded. Without JS the native
<details> still toggles, keyboard-operable, and exposes its state. */
(function () {
var r = document.querySelector(".bf-reveal");
if (!r) return;
var s = r.querySelector("summary");
function sync() {
if (s) s.setAttribute("aria-expanded", r.open ? "true" : "false");
}
sync();
r.addEventListener("toggle", sync);
})();
</script>
</body>
</html>