Files
ODOO4projects.com/odoo-black-friday/index.html
T
webmaster e6f0b6a395 feat(bf): clarify the one-year offer and drop the Bootcamp box on /odoo-black-friday/
Two user-requested changes on the Black Friday landing page.

1. The one-year framing is now unmissable where the price is stated:
   "$295 for your first year — then $395 a year after that." (was: "$395.00 a year —
   $295.00 for your first year"). The hero, meta description, og:description and the
   JSON-LD WebPage description all carry the same first-year-then-$395 wording. The
   offer itself is unchanged ($295 first year, $395 after, code HOST27, 16-30 Nov 2026).

2. The Bootcamp box is removed; the page is now a hosting-only offer surface. The
   meta/og, the JSON-LD Product entry and WebPage.about Thing were rewritten, the FAQ
   answer no longer claims the Bootcamp is part of the offer (HTML + JSON-LD, byte-
   identical), and the offer grid re-flows to one centred card (no empty cell).
   The removed box is archived, with line numbers, at
   webmaster/out/2026-11-02-bootcamp-box-removed-archive.md.
   The OG card was re-rendered hosting-only (sub line "your first year"); og:image:alt
   updated to match.

Verified: verify-html.py exit 0; competitor QC on the page exit 0; impeccable detector
0 new findings (23 -> 21); JSON-LD valid, 1 Product, FAQ 6/6 byte-identical.
2026-11-02 08:17:12 +00:00

677 lines
28 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="Black Friday 2026: $100 off your first year of managed Odoo Community hosting — $295 for year one, then $395 a year. The offer 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="Black Friday 2026: $100 off your first year of managed Odoo Community hosting — $295 for year one, then $395 a year. The offer runs 16–30 November 2026."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://odoo4projects.com/odoo-black-friday/" />
<meta property="og:image" content="https://odoo4projects.com/images/black-friday/bf2026-hosting-og.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta
property="og:image:alt"
content="Black Friday 2026 poster: 'Black Friday — 16–30 November', 'Save $100 on Odoo hosting', with the Black Friday code HOST27."
/>
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://odoo4projects.com/images/black-friday/bf2026-hosting-og.png" />
<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;
}
/* One offer box now: a single centred column, so removing the Bootcamp box leaves no empty
cell beside the Hosting card. Narrower than the old half-width card, centred on the page. */
.bf-box .container {
display: grid;
grid-template-columns: minmax(0, 620px);
justify-content: center;
gap: 1.5rem;
align-items: start;
}
.bf-box-inner {
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;
}
/* The offer card is always open: the Black Friday price and the code are readable on
arrival, with no reveal and no click. The scroll animation further down is presentation
only — the base state is fully visible, so the offer is complete with JavaScript off,
under reduced motion, or if the animation never runs. */
.bf-teaser {
font-size: 1.02rem;
color: var(--ink);
line-height: 1.6;
margin: 0 0 1rem;
}
.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);
}
/* The code lives on the offer surface only. It is readable on arrival; the chip is easy to
select so it can be copied at checkout. */
.bf-code-wrap {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 0.4rem 0.7rem;
}
.bf-code-label {
font-family: Inter, sans-serif;
font-weight: 600;
font-size: 0.72rem;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--brass-deep);
}
.bf-code {
font-family: Marcellus, Georgia, serif;
font-size: 1.3rem;
letter-spacing: 0.12em;
color: var(--midnight);
background: var(--brass);
border-radius: var(--radius-pill);
padding: 0.2rem 0.9rem;
user-select: all;
}
.bf-code-note {
font-size: 0.9rem;
color: var(--ink-soft);
}
/* Presentation only: the code fades and rises a little as it scrolls into view. Opacity and
transform only — never visibility. The base state is fully opaque, so a build where the
animation never fires still shows the code. Everything here is behind @supports, so an
unsupported browser renders the static, visible code. */
@media (prefers-reduced-motion: no-preference) {
@supports (animation-timeline: view()) {
.bf-code {
animation-name: bf-code-in;
animation-timing-function: linear;
animation-fill-mode: both;
animation-duration: auto;
animation-timeline: view();
animation-range: entry 0% cover 45%;
}
}
}
@keyframes bf-code-in {
from {
opacity: 0.8;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.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;
}
/* Hosting CTA: a native form that posts the plan straight to the shop basket, so one click
from this page lands the visitor in checkout with the plan already in the cart. Works with
JavaScript off (it is a plain form POST). */
.bf-cta-form {
margin: 0 0 0.75rem;
}
.bf-cta-form .btn {
display: inline-block;
font-family: Marcellus, Georgia, serif;
font-size: 0.9rem;
letter-spacing: 0.04em;
color: var(--midnight);
background: var(--brass);
border: 0;
border-radius: var(--radius-pill);
padding: 0.8rem 1.75rem;
cursor: pointer;
}
.bf-cta-form .btn:hover {
background: var(--brass-bright);
color: var(--midnight);
}
.bf-cta-form .btn:focus-visible {
outline: 3px solid var(--midnight);
outline-offset: 2px;
}
.bf-cta-secondary {
font-size: 0.85rem;
margin: 0;
}
.bf-cta-secondary a {
color: var(--brass-deep);
text-decoration: underline;
text-underline-offset: 3px;
}
/* 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": "Black Friday 2026: $100 off your first year of managed Odoo Community hosting — $295 for year one, then $395 a year. The offer 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 hosting discount 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": "Is the Bootcamp part of the Black Friday offer?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. This page covers the hosting offer only. The Bootcamp is a separate programme with its own page and its own campaign."
}
},
{
"@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. 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 offer 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 Black Friday offer: $100 off your first year of hosting — $295 for year one, then $395 a year after that.</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 Black Friday offer — one section, one box. The card is always open: the price and the
code are readable on arrival, with no reveal and no click. -->
<section class="section-light bf-box" id="offer">
<div class="container">
<!-- The offer box — Hosting, On the Rise -->
<div class="bf-box-inner">
<h2 class="bf-box-title">Hosting: On the Rise</h2>
<div class="bf-panel">
<p class="bf-teaser">Your whole business in one system. The Black Friday price is right here — no code to hunt for.</p>
<p class="bf-price"><strong>$295</strong> for your first year — then <strong>$395</strong> a year after that.</p>
<p class="bf-included">One price a year, 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. The code is the offer surface: it stays out
of meta, alt text, structured data and build comments. -->
<p class="bf-mechanism bf-code-wrap"><span class="bf-code-label">Your code</span><span class="bf-code">HOST27</span><span class="bf-code-note">takes $100 off your first year at checkout. One redemption per customer.</span></p>
<p class="bf-deadline">Ends Monday 30 November 2026.</p>
<!-- Buy = CLICK PROXY (offer-CTA click), NOT a sale.
See wiki/concepts/conversion-tracking-contract. The form posts the On the Rise
product (id 4) straight to the shop basket, so one click lands the visitor in
checkout with the plan already in the cart. -->
<form method="post" action="https://20.odoo4projects.com/shop/post_basket" target="_blank" class="bf-cta-form plausible-event-name=Buy">
<input type="hidden" name="basket" value='[{"product_id":4,"qty":1}]' />
<input type="hidden" name="clear" value="1" />
<input type="hidden" name="redirect" value="/coupon/HOST27?r=/shop/checkout" />
<button type="submit" class="btn btn-brass btn-lg">Buy On the Rise — $295 first year</button>
</form>
<p class="bf-cta-secondary"><a href="/odoo-hosting-offers/">See everything a year of hosting includes</a></p>
</div>
</div>
</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 hosting discount 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">Is the Bootcamp part of the Black Friday offer?</summary>
<div class="faq-a"><p>No. This page covers the hosting offer only. The Bootcamp is a separate programme with its own page and its own campaign.</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. 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 offer 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>
</body>
</html>