Files
apps/index.html
T
2026-04-09 13:24:23 -03:00

1675 lines
83 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
ODOO4projects | Odoo Extensions for n8n &amp; AI Automation
</title>
<script src="https://cdn.tailwindcss.com"></script>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
/>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
brand: "#714B67",
"brand-dark": "#4a3c5a",
accent: "#FF6D5A",
dark: "#1f1f2e",
},
fontFamily: {
sans: [
"Inter",
"system-ui",
"-apple-system",
"sans-serif",
],
},
},
},
};
</script>
<style>
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap");
.gradient-hero {
background: linear-gradient(135deg, #1f1f2e 0%, #2d1f3d 100%);
}
.module-card {
transition:
transform 0.25s ease,
box-shadow 0.25s ease;
display: block;
text-decoration: none;
color: inherit;
}
.module-card:hover {
transform: translateY(-6px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.12);
}
.btn-brand {
background: linear-gradient(135deg, #714b67 0%, #5a3d52 100%);
transition: all 0.25s ease;
}
.btn-brand:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(113, 75, 103, 0.3);
}
.btn-accent {
background: linear-gradient(135deg, #ff6d5a 0%, #ff5242 100%);
transition: all 0.25s ease;
}
.btn-accent:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgba(255, 109, 90, 0.3);
}
.faq-answer {
display: none;
}
.faq-item.open .faq-answer {
display: block;
}
.faq-icon {
transition: transform 0.2s ease;
}
.faq-item.open .faq-icon {
transform: rotate(45deg);
}
</style>
</head>
<body class="bg-white text-gray-800 font-sans">
<!-- Navigation -->
<nav class="bg-white shadow-sm sticky top-0 z-50">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16">
<div class="flex items-center">
<span class="text-2xl font-bold text-brand"
>ODOO4<span class="text-accent"
>projects</span
></span
>
</div>
<div class="hidden md:flex items-center space-x-8">
<a
href="#modules"
class="text-gray-600 hover:text-brand transition-colors text-sm font-medium"
>Modules</a
>
<a
href="#faq"
class="text-gray-600 hover:text-brand transition-colors text-sm font-medium"
>FAQ</a
>
<a
href="#trial"
class="text-gray-600 hover:text-brand transition-colors text-sm font-medium"
>Try Free</a
>
<a
href="https://odoo4projects.com"
class="text-gray-600 hover:text-brand transition-colors text-sm font-medium"
>Main Site</a
>
</div>
<div class="md:hidden flex items-center">
<button
id="mobile-menu-button"
class="text-gray-600 hover:text-brand"
>
<i class="fas fa-bars text-xl"></i>
</button>
</div>
</div>
</div>
<div
id="mobile-menu"
class="hidden md:hidden bg-white border-t px-4 py-3 space-y-3"
>
<a
href="#modules"
class="block text-gray-600 hover:text-brand text-sm"
>Modules</a
>
<a
href="#faq"
class="block text-gray-600 hover:text-brand text-sm"
>FAQ</a
>
<a
href="#trial"
class="block text-gray-600 hover:text-brand text-sm"
>Try Free</a
>
<a
href="https://odoo4projects.com"
class="block text-gray-600 hover:text-brand text-sm"
>Main Site</a
>
</div>
</nav>
<!-- Hero -->
<section class="gradient-hero text-white py-24 md:py-36">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="max-w-3xl mx-auto text-center">
<div class="inline-flex items-center gap-2 mb-5">
<span
class="text-xs font-semibold tracking-widest uppercase text-purple-300 mr-1"
>Works with Odoo</span
>
<span
class="bg-white/10 border border-white/20 text-white text-xs font-bold px-2.5 py-1 rounded-full"
>v17</span
>
<span
class="bg-white/10 border border-white/20 text-white text-xs font-bold px-2.5 py-1 rounded-full"
>v18</span
>
<span
class="bg-purple-500/40 border border-purple-400/40 text-purple-200 text-xs font-bold px-2.5 py-1 rounded-full"
>v19</span
>
</div>
<h1
class="text-4xl md:text-5xl lg:text-6xl font-bold leading-tight mb-6"
>
Connect Odoo to
<span class="text-accent">n8n</span> &amp; AI — without
the custom code
</h1>
<p class="text-xl text-gray-300 mb-10 leading-relaxed">
Five production-ready modules that add REST APIs,
automation hooks and workflow tools to Odoo. One-time
purchase, no subscriptions.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="#modules"
class="btn-accent text-white px-8 py-4 rounded-xl font-semibold text-lg text-center"
>
See the Modules
</a>
<a
href="#trial"
class="bg-white/10 hover:bg-white/20 text-white px-8 py-4 rounded-xl font-semibold text-lg text-center transition-colors border border-white/20"
>
Try Free on Our Hosting
</a>
</div>
</div>
</div>
</section>
<!-- Value props -->
<section class="py-16 bg-gray-50">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid md:grid-cols-3 gap-8">
<div class="bg-white rounded-2xl p-8 shadow-sm">
<div
class="w-12 h-12 bg-brand/10 rounded-xl flex items-center justify-center text-brand text-xl mb-5"
>
<i class="fas fa-plug"></i>
</div>
<h3 class="text-lg font-semibold text-dark mb-2">
Zero-session REST APIs
</h3>
<p class="text-gray-500 text-sm leading-relaxed">
Call Odoo from n8n, scripts or dashboards using API
keys or per-query tokens — no browser session
required.
</p>
</div>
<div class="bg-white rounded-2xl p-8 shadow-sm">
<div
class="w-12 h-12 bg-accent/10 rounded-xl flex items-center justify-center text-accent text-xl mb-5"
>
<i class="fas fa-robot"></i>
</div>
<h3 class="text-lg font-semibold text-dark mb-2">
n8n-ready out of the box
</h3>
<p class="text-gray-500 text-sm leading-relaxed">
Every endpoint is designed to drop straight into an
n8n HTTP Request node. No wrapper code, no custom
nodes.
</p>
</div>
<div class="bg-white rounded-2xl p-8 shadow-sm">
<div
class="w-12 h-12 bg-green-500/10 rounded-xl flex items-center justify-center text-green-600 text-xl mb-5"
>
<i class="fas fa-shield-alt"></i>
</div>
<h3 class="text-lg font-semibold text-dark mb-2">
Buy once, yours forever
</h3>
<p class="text-gray-500 text-sm leading-relaxed">
One-time purchase, no subscription. Includes DE
&amp; ES translations and future updates for that
Odoo version.
</p>
</div>
</div>
</div>
</section>
<!-- Modules -->
<section id="modules" class="py-20">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-14">
<h2 class="text-3xl md:text-4xl font-bold text-dark mb-4">
The Modules
</h2>
<p class="text-lg text-gray-500 max-w-2xl mx-auto">
Each module solves one specific problem. Buy only what
you need — directly in the Odoo App Store.
</p>
</div>
<!-- BI Queries -->
<a
href="https://apps.odoo.com/apps/modules/19.0/o4p_n8n_bi"
target="_blank"
rel="noopener noreferrer"
class="module-card bg-white rounded-2xl shadow-md overflow-hidden mb-10 border border-gray-100"
>
<div class="md:flex">
<div
class="md:w-72 bg-dark p-8 text-white flex-shrink-0 flex flex-col"
>
<div class="flex-1">
<div class="text-4xl mb-5">
<i class="fas fa-database"></i>
</div>
<h3 class="text-xl font-bold mb-1">
BI Queries
</h3>
<p class="text-gray-500 text-xs font-mono mb-4">
o4p_n8n_bi
</p>
<div class="flex gap-1.5 flex-wrap">
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v17</span
>
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v18</span
>
<span
class="bg-purple-500/30 text-purple-200 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-purple-400/30"
>v19</span
>
</div>
</div>
<div class="mt-6 pt-5 border-t border-white/10">
<div
class="flex items-center gap-2.5 mb-3 bg-white/5 hover:bg-white/10 transition-colors rounded-xl px-3 py-2.5"
>
<div
class="w-7 h-7 bg-purple-500/20 rounded-lg flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-store text-purple-400 text-xs"
></i>
</div>
<div class="flex-1 min-w-0">
<p
class="text-white text-[11px] font-semibold leading-tight"
>
Buy on Odoo App Store
</p>
<p class="text-gray-500 text-[10px]">
Direct purchase &middot; Instant
download
</p>
</div>
<i
class="fas fa-external-link-alt text-[9px] text-gray-500 flex-shrink-0"
></i>
</div>
<span
class="bg-purple-600 text-white text-sm font-bold px-4 py-1.5 rounded-full inline-block"
>$390 one-time</span
>
</div>
</div>
<div class="p-8 flex-1">
<h4 class="text-lg font-semibold text-dark mb-3">
Expose SQL queries as secure JSON endpoints
</h4>
<p
class="text-gray-500 text-sm leading-relaxed mb-5"
>
Store named PostgreSQL queries in Odoo, each
protected by a per-query Bearer token. Call them
from any BI tool, dashboard or n8n workflow — no
Odoo session needed.
</p>
<div class="grid sm:grid-cols-2 gap-3">
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Per-query Bearer token auth
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Masked token UI with copy button
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Direct PostgreSQL execution
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Structured JSON response
</div>
</div>
<div
class="mt-5 bg-gray-900 rounded-lg px-4 py-3 font-mono text-xs text-gray-300"
>
GET /bi_query/&lt;id&gt;?db=&lt;dbname&gt;
&nbsp; Authorization: Bearer &lt;token&gt;
</div>
</div>
</div>
</a>
<!-- Payment Link API -->
<a
href="https://apps.odoo.com/apps/modules/19.0/o4p_n8n_payment_link_api"
target="_blank"
rel="noopener noreferrer"
class="module-card bg-white rounded-2xl shadow-md overflow-hidden mb-10 border border-gray-100"
>
<div class="md:flex">
<div
class="md:w-72 bg-dark p-8 text-white flex-shrink-0 flex flex-col"
>
<div class="flex-1">
<div class="text-4xl mb-5">
<i class="fas fa-link"></i>
</div>
<h3 class="text-xl font-bold mb-1">
Payment Link API
</h3>
<p class="text-gray-500 text-xs font-mono mb-4">
o4p_n8n_payment_link_api
</p>
<div class="flex gap-1.5 flex-wrap">
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v17</span
>
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v18</span
>
<span
class="bg-purple-500/30 text-purple-200 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-purple-400/30"
>v19</span
>
</div>
</div>
<div class="mt-6 pt-5 border-t border-white/10">
<div
class="flex items-center gap-2.5 mb-3 bg-white/5 hover:bg-white/10 transition-colors rounded-xl px-3 py-2.5"
>
<div
class="w-7 h-7 bg-purple-500/20 rounded-lg flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-store text-purple-400 text-xs"
></i>
</div>
<div class="flex-1 min-w-0">
<p
class="text-white text-[11px] font-semibold leading-tight"
>
Buy on Odoo App Store
</p>
<p class="text-gray-500 text-[10px]">
Direct purchase &middot; Instant
download
</p>
</div>
<i
class="fas fa-external-link-alt text-[9px] text-gray-500 flex-shrink-0"
></i>
</div>
<span
class="bg-purple-600 text-white text-sm font-bold px-4 py-1.5 rounded-full inline-block"
>$249 one-time</span
>
</div>
</div>
<div class="p-8 flex-1">
<h4 class="text-lg font-semibold text-dark mb-3">
Generate payment links for invoices &amp; sales
orders
</h4>
<p
class="text-gray-500 text-sm leading-relaxed mb-5"
>
One REST endpoint returns a signed Odoo portal
link for any invoice or sales order. Send it via
WhatsApp, SMS or email directly from n8n — the
customer pays without logging in.
</p>
<div class="grid sm:grid-cols-2 gap-3">
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Works for invoices &amp; sales orders
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Odoo API key authentication
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Signed portal links, no login needed
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Single JSON response with link
</div>
</div>
<div
class="mt-5 bg-gray-900 rounded-lg px-4 py-3 font-mono text-xs text-gray-300"
>
POST
/api/payment-link/&lt;invoice|sale&gt;/&lt;id&gt;
&nbsp; Authorization: Bearer &lt;api-key&gt;
</div>
</div>
</div>
</a>
<!-- Website Webhook -->
<a
href="https://apps.odoo.com/apps/modules/19.0/o4p_n8n_website_webhook"
target="_blank"
rel="noopener noreferrer"
class="module-card bg-white rounded-2xl shadow-md overflow-hidden mb-10 border border-gray-100"
>
<div class="md:flex">
<div
class="md:w-72 bg-dark p-8 text-white flex-shrink-0 flex flex-col"
>
<div class="flex-1">
<div class="text-4xl mb-5">
<i class="fas fa-globe"></i>
</div>
<h3 class="text-xl font-bold mb-1">
Website Form Webhook
</h3>
<p class="text-gray-500 text-xs font-mono mb-4">
o4p_n8n_website_webhook
</p>
<div class="flex gap-1.5 flex-wrap">
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v17</span
>
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v18</span
>
<span
class="bg-purple-500/30 text-purple-200 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-purple-400/30"
>v19</span
>
</div>
</div>
<div class="mt-6 pt-5 border-t border-white/10">
<div
class="flex items-center gap-2.5 mb-3 bg-white/5 hover:bg-white/10 transition-colors rounded-xl px-3 py-2.5"
>
<div
class="w-7 h-7 bg-purple-500/20 rounded-lg flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-store text-purple-400 text-xs"
></i>
</div>
<div class="flex-1 min-w-0">
<p
class="text-white text-[11px] font-semibold leading-tight"
>
Buy on Odoo App Store
</p>
<p class="text-gray-500 text-[10px]">
Direct purchase &middot; Instant
download
</p>
</div>
<i
class="fas fa-external-link-alt text-[9px] text-gray-500 flex-shrink-0"
></i>
</div>
<span
class="bg-purple-600 text-white text-sm font-bold px-4 py-1.5 rounded-full inline-block"
>$95 one-time</span
>
</div>
</div>
<div class="p-8 flex-1">
<h4 class="text-lg font-semibold text-dark mb-3">
POST website form submissions to n8n in real
time
</h4>
<p
class="text-gray-500 text-sm leading-relaxed mb-5"
>
Adds a dedicated webhook form to your Odoo
website — submissions are POSTed to a
configurable n8n URL instantly, enabling AI spam
filtering, lead enrichment, custom routing and
more.
</p>
<div class="grid sm:grid-cols-2 gap-3">
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Real-time delivery, no polling
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Dedicated webhook form for n8n
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Optional auth header support
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Zero-code setup via system params
</div>
</div>
</div>
</div>
</a>
<!-- Invoice Address Edit -->
<a
href="https://apps.odoo.com/apps/modules/19.0/o4p_n8n_edit_invoice_address"
target="_blank"
rel="noopener noreferrer"
class="module-card bg-white rounded-2xl shadow-md overflow-hidden mb-10 border border-gray-100"
>
<div class="md:flex">
<div
class="md:w-72 bg-dark p-8 text-white flex-shrink-0 flex flex-col"
>
<div class="flex-1">
<div class="text-4xl mb-5">
<i class="fas fa-edit"></i>
</div>
<h3 class="text-xl font-bold mb-1">
Invoice Address Edit
</h3>
<p class="text-gray-500 text-xs font-mono mb-4">
o4p_n8n_edit_invoice_address
</p>
<div class="flex gap-1.5 flex-wrap">
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v17</span
>
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v18</span
>
<span
class="bg-purple-500/30 text-purple-200 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-purple-400/30"
>v19</span
>
</div>
</div>
<div class="mt-6 pt-5 border-t border-white/10">
<div
class="flex items-center gap-2.5 mb-3 bg-white/5 hover:bg-white/10 transition-colors rounded-xl px-3 py-2.5"
>
<div
class="w-7 h-7 bg-purple-500/20 rounded-lg flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-store text-purple-400 text-xs"
></i>
</div>
<div class="flex-1 min-w-0">
<p
class="text-white text-[11px] font-semibold leading-tight"
>
Buy on Odoo App Store
</p>
<p class="text-gray-500 text-[10px]">
Direct purchase &middot; Instant
download
</p>
</div>
<i
class="fas fa-external-link-alt text-[9px] text-gray-500 flex-shrink-0"
></i>
</div>
<span
class="bg-purple-600 text-white text-sm font-bold px-4 py-1.5 rounded-full inline-block"
>$49 one-time</span
>
</div>
</div>
<div class="p-8 flex-1">
<h4 class="text-lg font-semibold text-dark mb-3">
Let customers fix their billing address at
checkout
</h4>
<p
class="text-gray-500 text-sm leading-relaxed mb-5"
>
Adds an "Edit Invoice Address" button to the
portal payment page. Customers can correct name,
street, city, ZIP and country in one step — no
support ticket, no back-office involvement.
</p>
<div class="grid sm:grid-cols-2 gap-3">
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Inline edit on payment page
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Secure — access token verified
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Saves immediately to partner record
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Zero configuration
</div>
</div>
</div>
</div>
</a>
<!-- Risk Management -->
<a
href="https://apps.odoo.com/apps/modules/19.0/o4p_risk_management"
target="_blank"
rel="noopener noreferrer"
class="module-card bg-white rounded-2xl shadow-md overflow-hidden mb-10 border border-gray-100"
>
<div class="md:flex">
<div
class="md:w-72 bg-dark p-8 text-white flex-shrink-0 flex flex-col"
>
<div class="flex-1">
<div class="text-4xl mb-5">
<i class="fas fa-shield-alt"></i>
</div>
<h3 class="text-xl font-bold mb-1">
Risk Management
</h3>
<p class="text-gray-500 text-xs font-mono mb-4">
o4p_risk_management
</p>
<div class="flex gap-1.5 flex-wrap">
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v17</span
>
<span
class="bg-white/10 text-gray-300 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-white/15"
>v18</span
>
<span
class="bg-purple-500/30 text-purple-200 text-[11px] font-semibold px-2.5 py-0.5 rounded-full border border-purple-400/30"
>v19</span
>
</div>
</div>
<div class="mt-6 pt-5 border-t border-white/10">
<div
class="flex items-center gap-2.5 mb-3 bg-white/5 hover:bg-white/10 transition-colors rounded-xl px-3 py-2.5"
>
<div
class="w-7 h-7 bg-purple-500/20 rounded-lg flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-store text-purple-400 text-xs"
></i>
</div>
<div class="flex-1 min-w-0">
<p
class="text-white text-[11px] font-semibold leading-tight"
>
Buy on Odoo App Store
</p>
<p class="text-gray-500 text-[10px]">
Direct purchase &middot; Instant
download
</p>
</div>
<i
class="fas fa-external-link-alt text-[9px] text-gray-500 flex-shrink-0"
></i>
</div>
<span
class="bg-purple-600 text-white text-sm font-bold px-4 py-1.5 rounded-full inline-block"
>$590 one-time</span
>
</div>
</div>
<div class="p-8 flex-1">
<h4 class="text-lg font-semibold text-dark mb-3">
Risk register with scoring, workflow and Kanban
</h4>
<p
class="text-gray-500 text-sm leading-relaxed mb-5"
>
A full organisational risk register inside Odoo.
Risks move through Identified &rarr; Understood
&rarr; Mitigated &rarr; Closed with automatic
score-based classification (Low / Medium / High
/ Critical).
</p>
<div class="grid sm:grid-cols-2 gap-3">
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Auto-score: (Likelihood &times; Impact) /
100
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Four-stage workflow with audit log
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
Mitigation actions sub-list per risk
</div>
<div
class="flex items-start gap-2 text-sm text-gray-600"
>
<i
class="fas fa-check text-green-500 mt-0.5"
></i>
List and Kanban views
</div>
</div>
</div>
</div>
</a>
</div>
</section>
<!-- FAQ -->
<section id="faq" class="py-20">
<div class="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="text-center mb-14">
<div
class="text-sm font-semibold tracking-widest uppercase text-brand mb-3"
>
Got questions?
</div>
<h2 class="text-3xl md:text-4xl font-bold text-dark mb-4">
Frequently Asked Questions
</h2>
<p class="text-lg text-gray-500 max-w-xl mx-auto">
Everything you need to know before you buy. Can't find
an answer?
<a
href="https://odoo4projects.com/contactus"
class="text-brand font-semibold hover:underline"
>Just ask us.</a
>
</p>
</div>
<div class="space-y-3">
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Which Odoo versions are supported?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
All modules are available for Odoo
<strong class="text-dark"
>v17, v18 and v19</strong
>. When you purchase on the Odoo App Store,
select the version that matches your
installation. Each Odoo version is sold
separately. We test on both Community and
Enterprise editions.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Do these modules work with self-hosted
Odoo?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Yes — self-hosted (on-premise or VPS) is the
primary use case. You install them like any
other Odoo addon. They also work on Odoo.sh.
<strong class="text-dark"
>Odoo Online (odoo.com SaaS)</strong
>
does not allow third-party custom modules, so
those installations are not supported.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Do I need n8n to use these modules?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p
class="text-gray-500 text-sm leading-relaxed mb-3"
>
None of these modules require n8n specifically.
<strong class="text-dark">BI Queries</strong>,
<strong class="text-dark"
>Payment Link API</strong
>
and
<strong class="text-dark"
>Invoice Address Edit</strong
>
expose standard REST endpoints that work with
any HTTP client — curl, Postman, Make, Zapier,
or anything else you already use.
<strong class="text-dark"
>Website Form Webhook</strong
>
POSTs to any webhook URL, so any automation
platform can receive submissions.
</p>
<p
class="text-gray-500 text-sm leading-relaxed mb-3"
>
That said, n8n is what we actually use and
recommend. Every endpoint is designed to drop
straight into an n8n HTTP Request node — but
you're never locked in.
</p>
<p class="text-gray-500 text-sm leading-relaxed">
<strong class="text-dark"
>Risk Management</strong
>
is a different category entirely — it's a
standalone Odoo feature with no external
dependency of any kind.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Is this really a one-time payment? No hidden
fees?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Correct. You pay once per module per Odoo
version, through the Odoo App Store. No
subscription, no annual renewal, no per-seat
fee. Bugfix and compatibility updates within the
same Odoo version line are included. Upgrading
to a new major Odoo version (e.g. v18 &rarr;
v19) requires a new purchase for the new version
line.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Can I try a module before purchasing?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Yes. We host Odoo for businesses of all sizes,
and every hosting plan includes all five modules
at no additional cost. Start a free trial via
the form below, explore everything in a live
environment, and only purchase from the App
Store if you'd rather run them on your own
server.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Do you offer installation or setup
support?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Yes. As Odoo consultants, implementation is
exactly what we do. If you need help installing
a module, designing your n8n workflow, or
building a complete automation stack,
<a
href="https://odoo4projects.com/contactus"
class="text-brand font-semibold hover:underline"
>get in touch</a
>. We offer fixed-scope setup packages as well
as ongoing consulting engagements.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>What languages are included?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
All modules ship with
<strong class="text-dark">English</strong>,
<strong class="text-dark">German (DE)</strong>
and
<strong class="text-dark">Spanish (ES)</strong>
translations included. You can add further
languages at any time via the standard Odoo
translation mechanism in the backend.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>What if a module doesn't work for my
setup?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Purchases are handled through the Odoo App
Store, so their refund policy applies. That said
— we actively want the modules to work for you.
If you hit a compatibility issue or something
isn't behaving as documented,
<a
href="https://odoo4projects.com/contactus"
class="text-brand font-semibold hover:underline"
>contact us first</a
>. In most cases we can resolve it quickly. We'd
rather fix the problem than issue a refund.
</p>
</div>
</div>
<div
class="faq-item bg-white border border-gray-200 rounded-2xl overflow-hidden"
>
<button
onclick="toggleFaq(this)"
class="w-full flex items-center justify-between px-7 py-5 text-left gap-4"
>
<span class="font-semibold text-dark text-sm"
>Can I buy all five modules as a bundle?</span
>
<i
class="fas fa-plus faq-icon text-brand text-sm flex-shrink-0"
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
There's no bundle in the App Store — each module
is purchased individually so you only pay for
what you actually need. If you'd like a volume
discount for buying multiple modules,
<a
href="https://odoo4projects.com/contactus"
class="text-brand font-semibold hover:underline"
>reach out to us directly</a
>
and we'll sort something out.
</p>
</div>
</div>
</div>
</div>
</section>
<!-- Try Before You Buy -->
<section id="trial" class="py-0 overflow-hidden">
<div class="md:flex min-h-[560px]">
<!-- Left: pitch -->
<div
class="md:w-1/2 bg-gradient-to-br from-dark via-[#2d1f3d] to-brand-dark flex flex-col justify-center px-10 py-16 md:px-16 text-white"
>
<div
class="text-xs font-bold tracking-widest uppercase text-purple-300 mb-4"
>
4-Week Free Trial
</div>
<h2
class="text-3xl md:text-4xl font-bold leading-tight mb-5"
>
Try it live before<br />you spend a cent.
</h2>
<p class="text-gray-300 text-sm leading-relaxed mb-8">
We host Odoo for businesses of all sizes. Every plan
ships with
<strong class="text-white"
>all five modules pre-installed</strong
>
— no setup, no credit card, no commitment.
</p>
<ul class="space-y-3 mb-8">
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
<span
class="w-6 h-6 rounded-full bg-green-500/20 border border-green-400/30 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-check text-green-400 text-[10px]"
></i>
</span>
All 5 modules active from day one
</li>
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
<span
class="w-6 h-6 rounded-full bg-green-500/20 border border-green-400/30 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-check text-green-400 text-[10px]"
></i>
</span>
Managed hosting — we handle updates &amp; backups
</li>
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
<span
class="w-6 h-6 rounded-full bg-green-500/20 border border-green-400/30 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-check text-green-400 text-[10px]"
></i>
</span>
Full Odoo or n8n instance, not a sandbox
</li>
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
<span
class="w-6 h-6 rounded-full bg-green-500/20 border border-green-400/30 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-check text-green-400 text-[10px]"
></i>
</span>
4 weeks free, cancel or keep — your call
</li>
</ul>
</div>
<!-- Right: form -->
<div
class="md:w-1/2 bg-white flex flex-col justify-center px-10 py-16 md:px-16"
>
<h3 class="text-xl font-bold text-dark mb-1">
Start your free trial
</h3>
<p class="text-gray-400 text-sm mb-8">
No credit card required. Up and running in minutes.
</p>
<form id="trial-form" class="space-y-6" novalidate>
<input
type="hidden"
name="affiliate"
id="trial-affiliate"
value="apps"
/>
<!-- Product -->
<input type="hidden" name="product" value="ODOO" />
<!-- Region -->
<div>
<label
for="trial-location"
class="block text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2"
>Hosting region</label
>
<div class="relative">
<select
id="trial-location"
name="location"
class="w-full appearance-none border-2 border-gray-200 rounded-xl px-4 py-3 text-sm text-dark bg-white focus:outline-none focus:border-brand transition-colors pr-10"
>
<option value="">Select a region…</option>
<option value="UK, Manchester">
🇬🇧 UK — Manchester
</option>
<option value="US, Boston">
🇺🇸 US — Boston
</option>
<option value="IN, Mumbai">
🇮🇳 IN — Mumbai
</option>
<option value="BR, Sao Paulo">
🇧🇷 BR — São Paulo
</option>
<option value="NL, Meppel">
🇳🇱 NL — Meppel
</option>
</select>
<i
class="fas fa-chevron-down text-gray-400 text-xs absolute right-4 top-1/2 -translate-y-1/2 pointer-events-none"
></i>
</div>
</div>
<!-- Email -->
<div>
<label
for="trial-email"
class="block text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2"
>Work email</label
>
<input
type="email"
id="trial-email"
name="email"
placeholder="you@company.com"
required
class="w-full border-2 border-gray-200 rounded-xl px-4 py-3 text-sm text-dark placeholder-gray-300 focus:outline-none focus:border-brand transition-colors"
/>
</div>
<!-- Submit -->
<button
type="submit"
id="trial-submit"
class="w-full btn-brand text-white font-bold text-sm rounded-xl px-6 py-4 flex items-center justify-center gap-2 transition-all"
>
<i class="fas fa-rocket text-sm"></i>
<span>Start 4-Week Free Trial</span>
</button>
<p class="text-center text-[11px] text-gray-400">
By submitting you agree to the
<a
href="https://odoo4projects.com/legal"
class="underline hover:text-gray-600"
>Terms &amp; Conditions</a
>
of ODOO4projects.
</p>
</form>
<!-- Success state -->
<div id="trial-success" class="hidden text-center py-6">
<div
class="w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-5"
>
<i class="fas fa-check text-green-500 text-2xl"></i>
</div>
<h4 class="text-lg font-bold text-dark mb-2">
You're on the list!
</h4>
<p
id="trial-success-msg"
class="text-gray-500 text-sm leading-relaxed"
></p>
</div>
<!-- Error state -->
<div
id="trial-error"
class="hidden mt-4 bg-red-50 border border-red-200 rounded-xl px-5 py-4"
>
<p class="text-red-700 text-sm font-medium">
<i class="fas fa-exclamation-circle mr-2"></i
>Something went wrong. Please try again or
<a
href="https://odoo4projects.com/contactus"
class="underline"
>contact us</a
>.
</p>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-dark text-white py-12">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid md:grid-cols-4 gap-8">
<div>
<h3 class="text-xl font-bold mb-4">
ODOO4<span class="text-accent">projects</span>
</h3>
<p class="text-gray-400 text-sm mb-4 leading-relaxed">
Smart, scalable Odoo solutions combining ERP
stability with n8n automation and AI.
</p>
<div class="flex space-x-4">
<a
href="https://odoo4projects.com/website/social/linkedin"
class="text-gray-400 hover:text-white transition-colors"
><i class="fab fa-linkedin text-xl"></i
></a>
<a
href="https://odoo4projects.com/website/social/youtube"
class="text-gray-400 hover:text-white transition-colors"
><i class="fab fa-youtube text-xl"></i
></a>
</div>
</div>
<div>
<h4
class="font-semibold mb-4 text-sm uppercase tracking-wider text-gray-400"
>
Links
</h4>
<ul class="space-y-2 text-sm">
<li>
<a
href="https://odoo4projects.com"
class="text-gray-400 hover:text-white transition-colors"
>Home</a
>
</li>
<li>
<a
href="https://odoo4projects.com/support"
class="text-gray-400 hover:text-white transition-colors"
>Support</a
>
</li>
<li>
<a
href="https://odoo4projects.com/legal"
class="text-gray-400 hover:text-white transition-colors"
>Legal</a
>
</li>
<li>
<a
href="https://odoo4projects.com/contactus"
class="text-gray-400 hover:text-white transition-colors"
>Contact</a
>
</li>
</ul>
</div>
<div>
<h4
class="font-semibold mb-4 text-sm uppercase tracking-wider text-gray-400"
>
Services
</h4>
<ul class="space-y-2 text-sm">
<li>
<a
href="https://odoo4projects.com/workshops"
class="text-gray-400 hover:text-white transition-colors"
>Workshops</a
>
</li>
<li>
<a
href="https://odoo4projects.com/affiliates"
class="text-gray-400 hover:text-white transition-colors"
>Affiliates</a
>
</li>
<li>
<a
href="https://OD8N.com"
class="text-gray-400 hover:text-white transition-colors"
>OD8N Partner</a
>
</li>
</ul>
</div>
<div>
<h4
class="font-semibold mb-4 text-sm uppercase tracking-wider text-gray-400"
>
Contact
</h4>
<ul class="space-y-2 text-sm">
<li>
<a
href="https://odoo4projects.com/contactus"
class="text-gray-400 hover:text-white transition-colors"
>Contact Form</a
>
</li>
<li>
<span class="text-gray-400"
>ODOO4projects LLC</span
>
</li>
</ul>
</div>
</div>
<div
class="border-t border-gray-700 mt-8 pt-8 text-center text-gray-500 text-sm"
>
<p>&copy; 2026 ODOO4projects LLC. All rights reserved.</p>
</div>
</div>
</footer>
<script>
// Mobile menu
const btn = document.getElementById("mobile-menu-button");
const menu = document.getElementById("mobile-menu");
btn.addEventListener("click", () =>
menu.classList.toggle("hidden"),
);
menu.querySelectorAll("a").forEach((a) =>
a.addEventListener("click", () => menu.classList.add("hidden")),
);
// FAQ accordion
function toggleFaq(btn) {
const item = btn.closest(".faq-item");
const isOpen = item.classList.contains("open");
// Close all
document
.querySelectorAll(".faq-item.open")
.forEach((el) => el.classList.remove("open"));
// Toggle current
if (!isOpen) item.classList.add("open");
}
// Trial form: affiliate from URL
(function () {
const params = new URLSearchParams(window.location.search);
const aff = params.get("affiliate");
if (aff) document.getElementById("trial-affiliate").value = aff;
})();
// Trial form: product toggle UI
const trialOptions = document.querySelectorAll(".trial-option");
const productRadios = document.querySelectorAll(
'input[name="product"]',
);
function updateProductUI() {
productRadios.forEach(function (radio) {
const label = radio.closest("label");
const icon = label.querySelector("span");
if (radio.checked) {
label.classList.add("border-brand", "bg-brand/5");
label.classList.remove(
"border-gray-200",
"hover:border-gray-300",
);
icon.classList.add("bg-brand/10");
icon.classList.remove("bg-gray-100");
icon.querySelector("i").classList.add("text-brand");
icon.querySelector("i").classList.remove(
"text-gray-400",
);
} else {
label.classList.remove("border-brand", "bg-brand/5");
label.classList.add(
"border-gray-200",
"hover:border-gray-300",
);
icon.classList.remove("bg-brand/10");
icon.classList.add("bg-gray-100");
icon.querySelector("i").classList.remove("text-brand");
icon.querySelector("i").classList.add("text-gray-400");
}
});
}
trialOptions.forEach(function (label) {
label.addEventListener("click", function () {
const radio = label.querySelector('input[type="radio"]');
radio.checked = true;
updateProductUI();
});
});
// Trial form: submit
document
.getElementById("trial-form")
.addEventListener("submit", async function (e) {
e.preventDefault();
const form = e.target;
const submitBtn = document.getElementById("trial-submit");
const errorEl = document.getElementById("trial-error");
const successEl = document.getElementById("trial-success");
const successMsg =
document.getElementById("trial-success-msg");
const email = document
.getElementById("trial-email")
.value.trim();
const location =
document.getElementById("trial-location").value;
if (!email || !location) {
document
.getElementById("trial-location")
.classList.toggle("border-red-400", !location);
document
.getElementById("trial-email")
.classList.toggle("border-red-400", !email);
return;
}
submitBtn.disabled = true;
submitBtn.innerHTML =
'<i class="fas fa-spinner fa-spin text-sm"></i><span>Submitting…</span>';
errorEl.classList.add("hidden");
try {
const formData = new FormData(form);
const res = await fetch(
"https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c25169c6-4234-4b47-8e74-612b9539da0a",
{ method: "POST", body: formData },
);
const text = await res.text();
form.style.display = "none";
successMsg.textContent = text;
successEl.classList.remove("hidden");
} catch (err) {
submitBtn.disabled = false;
submitBtn.innerHTML =
'<i class="fas fa-rocket text-sm"></i><span>Start 4-Week Free Trial</span>';
errorEl.classList.remove("hidden");
}
});
</script>
<script
defer
data-domain="apps.odoo4projects.com"
src="https://plausible.odoo4projects.com/js/script.tagged-events.js"
></script>
<script>
window.plausible =
window.plausible ||
function () {
(window.plausible.q = window.plausible.q || []).push(
arguments,
);
};
</script>
</body>
</html>