Public Access
Compare commits
27
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e25e4c64fa | ||
|
|
0f7da0b68b | ||
|
|
db919fc8c2 | ||
|
|
a54dc22bd1 | ||
|
|
ca89d8e7b7 | ||
|
|
29127d4025 | ||
|
|
b4e0faa62e | ||
|
|
575e3efece | ||
|
|
62f92769a1 | ||
|
|
3637094896 | ||
|
|
609f9d64bf | ||
|
|
1ab6c47df6 | ||
|
|
354799b9ca | ||
|
|
04d39157b8 | ||
|
|
5cc0c06a11 | ||
|
|
b003c221ce | ||
|
|
79f2a71d49 | ||
|
|
729289ef71 | ||
|
|
06ed942f8b | ||
|
|
3d1473a2d5 | ||
|
|
e926f850f7 | ||
|
|
eb142d1aa6 | ||
|
|
4d9becd159 | ||
|
|
5f4c75e94f | ||
|
|
d83d960543 | ||
|
|
9751bda35c | ||
|
|
3e899391d7 |
No files matched your search
+1
-1
@@ -24,7 +24,7 @@ Enterprise-grade Odoo Community hosting without the enterprise price tag. Commun
|
||||
|
||||
- Static site (index.html, support.html, legal.html, blog/) deployed via git push to git.odoo4projects.com; auto-deploys on every change.
|
||||
- Order flow: inline order widget on the homepage opens Stripe checkout; coupon FREE TRIAL = 1 month free; yearly billing saves roughly 8-10%; "Satisfied or reimbursed" guarantee; server location chosen at checkout (US, Brazil, India, Australia, Netherlands, UK).
|
||||
- Support: AI support bot (agent.js from static.odoo4projects.com) plus human team; email support@odoo4projects.com; /contactus route.
|
||||
- Support: AI support bot (agent.js from static.odoo4projects.com) plus human team; email support@odoo4projects.com; contact form on support.html#contact.
|
||||
- Blog with guides and news (10 posts); homepage renders it with search and pagination.
|
||||
|
||||
## Capabilities and Constraints
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
{
|
||||
"posts": [
|
||||
{
|
||||
"id": "6-tips-to-leverage-the-latest-odoo-management-app-update",
|
||||
"date": "2026-10-08",
|
||||
"area": "news",
|
||||
"headline": "6 Tips to Leverage the Latest Odoo Management App Update",
|
||||
"teaser": "We've just rolled out a major update to the management app preinstalled on your ODOO4project service. Along with a fresh",
|
||||
"link": "blog/posts/6-tips-to-leverage-the-latest-odoo-management-app-update.html"
|
||||
},
|
||||
{
|
||||
"id": "odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups",
|
||||
"date": "2026-10-06",
|
||||
"area": "news",
|
||||
"headline": "Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups",
|
||||
"teaser": "Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with i",
|
||||
"link": "blog/posts/odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups.html"
|
||||
},
|
||||
{
|
||||
"id": "odoo-community-is-going-online-on-odoo4projects",
|
||||
"date": "2026-09-28",
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>6 Tips to Leverage the Latest Odoo Management App Update | ODOO4projects</title>
|
||||
<meta name="description" content="We've just rolled out a major update to the management app preinstalled on your ODOO4project service. Along with a fresh new look, we've added several powe" />
|
||||
<link rel="canonical" href="https://odoo4projects.com/blog/posts/6-tips-to-leverage-the-latest-odoo-management-app-update.html" />
|
||||
<meta property="og:title" content="6 Tips to Leverage the Latest Odoo Management App Update" />
|
||||
<meta property="og:description" content="We've just rolled out a major update to the management app preinstalled on your ODOO4project service. Along with a fresh new look, we've added several powe" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:image" content="https://image.office.odoo4projects.com/img/20_4server.png" />
|
||||
<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 href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
|
||||
<link rel="stylesheet" href="../../style.css" />
|
||||
<style>
|
||||
body { background: #0d1b2e; }
|
||||
.blog-post { max-width: 720px; margin: 0 auto; padding: 3rem 1.5rem 6rem; color: #171c26; background: #faf7f1; min-height: 100vh; }
|
||||
.blog-post h1 { font-family: 'Marcellus', Georgia, serif; font-size: 2.4rem; font-weight: 400; margin: 0 0 0.5rem; color: #0d1b2e; }
|
||||
.blog-post .post-meta { font-family: Inter, sans-serif; font-size: 0.82rem; color: rgba(23,28,38,0.6); margin-bottom: 2rem; }
|
||||
.blog-post .post-meta .badge { display: inline-block; font-size: 0.68rem; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #c9a227; margin-right: 0.75rem; }
|
||||
.blog-post .post-image { width: 100%; border-radius: 0.75rem; margin-bottom: 2rem; box-shadow: 0 2px 8px rgba(13,27,46,0.08); }
|
||||
.blog-post p { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; }
|
||||
.blog-post h2 { font-family: 'Marcellus', Georgia, serif; font-size: 1.6rem; font-weight: 400; margin: 2rem 0 0.75rem; color: #0d1b2e; }
|
||||
.blog-post h3 { font-family: 'Marcellus', Georgia, serif; font-size: 1.25rem; font-weight: 400; margin: 1.5rem 0 0.5rem; color: #0d1b2e; }
|
||||
.blog-post ul, .blog-post ol { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; padding-left: 1.5rem; }
|
||||
.blog-post li { margin-bottom: 0.3rem; }
|
||||
.blog-post a { color: #8a6f1f; text-decoration: underline; }
|
||||
.blog-post strong { font-weight: 600; }
|
||||
.blog-post blockquote { border-left: 3px solid #c9a227; padding-left: 1rem; margin-left: 0; color: rgba(23,28,38,0.7); font-style: italic; }
|
||||
.back-link { display: inline-block; margin-top: 2rem; font-family: 'Marcellus', Georgia, serif; font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.04em; color: #c9a227; text-decoration: none; }
|
||||
.back-link:hover { text-decoration: underline; }
|
||||
@media (max-width: 600px) { .blog-post h1 { font-size: 1.7rem; } .blog-post { padding: 2rem 1rem 4rem; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="blog-post">
|
||||
<span class="badge">news</span>
|
||||
<h1>6 Tips to Leverage the Latest Odoo Management App Update</h1>
|
||||
<div class="post-meta">Oct 08, 2026</div>
|
||||
<img src="https://image.office.odoo4projects.com/img/20_4server.png" alt="6 Tips to Leverage the Latest Odoo Management App Update" class="post-image" loading="lazy" />
|
||||
<div class="post-body">
|
||||
<p>We've just rolled out a major update to the management app preinstalled on your ODOO4project service. Along with a fresh new look, we've added several powerful features to make managing your Odoo hosting easier. Here are six practical tips to help you get the most out of them.</p>
|
||||
|
||||
<h3>1. Automate hosting tasks with the new MCP server</h3>
|
||||
<p>The new MCP server lets your agent control your Odoo hosting directly. You can restart the server, upload modules, add or check domains, manage backups, and read logfiles—all without manual intervention. <strong>Tip:</strong> Configure your agent to handle routine maintenance so you can focus on development.</p>
|
||||
|
||||
<h3>2. Download and archive logfiles for easier troubleshooting</h3>
|
||||
<p>You can now download and archive logfiles directly from the app. <strong>Tip:</strong> When debugging an issue, download the relevant logfile to analyze it locally. Archive older logs regularly to keep your system organized and reduce clutter.</p>
|
||||
|
||||
<h3>3. Take advantage of the free backup schema</h3>
|
||||
<p>We've added a free backup schema for everyone to improve data security. <strong>Tip:</strong> Make sure backups are scheduled and test restoring from a backup occasionally to ensure your data is safe.</p>
|
||||
|
||||
<h3>4. Explore the improved AI server management backend</h3>
|
||||
<p>The AI server management backend has been upgraded. <strong>Tip:</strong> Spend a few minutes navigating the new interface—you'll find streamlined workflows that make server management more intuitive.</p>
|
||||
|
||||
<h3>5. Install modules faster with improved GIT support</h3>
|
||||
<p>Module installation via GIT has been improved. <strong>Tip:</strong> Use GIT to install or update modules more efficiently, especially when you need to manage versions or deploy across multiple environments.</p>
|
||||
|
||||
<h3>6. Get instant help from the AI support bot</h3>
|
||||
<p>Our AI support bot has also been improved. <strong>Tip:</strong> When you run into a question, ask the bot first—it's a quick way to get answers without leaving your workflow.</p>
|
||||
|
||||
<p>These updates are designed to save you time and give you more control over your Odoo hosting. Ready to try them out? <a href="https://ODOO4projects.com">Start your free trial on ODOO4projects.com</a>.</p>
|
||||
</div>
|
||||
<a href="../../index.html#blog" class="back-link">← Back to the Blog</a>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,52 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups | ODOO4projects</title>
|
||||
<meta name="description" content="Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.But the version u" />
|
||||
<link rel="canonical" href="https://odoo4projects.com/blog/posts/odoo-20-is-live-on-our-servers-with-an-mcp-server-and-free-backups.html" />
|
||||
<meta property="og:title" content="Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups" />
|
||||
<meta property="og:description" content="Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.But the version u" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:image" content="https://image.office.odoo4projects.com/img/ODOO_20_chatter.png" />
|
||||
<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 href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
|
||||
<link rel="stylesheet" href="../../style.css" />
|
||||
<style>
|
||||
body { background: #0d1b2e; }
|
||||
.blog-post { max-width: 720px; margin: 0 auto; padding: 3rem 1.5rem 6rem; color: #171c26; background: #faf7f1; min-height: 100vh; }
|
||||
.blog-post h1 { font-family: 'Marcellus', Georgia, serif; font-size: 2.4rem; font-weight: 400; margin: 0 0 0.5rem; color: #0d1b2e; }
|
||||
.blog-post .post-meta { font-family: Inter, sans-serif; font-size: 0.82rem; color: rgba(23,28,38,0.6); margin-bottom: 2rem; }
|
||||
.blog-post .post-meta .badge { display: inline-block; font-size: 0.68rem; font-weight: 600; letter-spacing: 0.15em; text-transform: uppercase; color: #c9a227; margin-right: 0.75rem; }
|
||||
.blog-post .post-image { width: 100%; border-radius: 0.75rem; margin-bottom: 2rem; box-shadow: 0 2px 8px rgba(13,27,46,0.08); }
|
||||
.blog-post p { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; }
|
||||
.blog-post h2 { font-family: 'Marcellus', Georgia, serif; font-size: 1.6rem; font-weight: 400; margin: 2rem 0 0.75rem; color: #0d1b2e; }
|
||||
.blog-post h3 { font-family: 'Marcellus', Georgia, serif; font-size: 1.25rem; font-weight: 400; margin: 1.5rem 0 0.5rem; color: #0d1b2e; }
|
||||
.blog-post ul, .blog-post ol { font-family: Inter, sans-serif; font-size: 1rem; line-height: 1.7; margin-bottom: 1.2rem; padding-left: 1.5rem; }
|
||||
.blog-post li { margin-bottom: 0.3rem; }
|
||||
.blog-post a { color: #8a6f1f; text-decoration: underline; }
|
||||
.blog-post strong { font-weight: 600; }
|
||||
.blog-post blockquote { border-left: 3px solid #c9a227; padding-left: 1rem; margin-left: 0; color: rgba(23,28,38,0.7); font-style: italic; }
|
||||
.back-link { display: inline-block; margin-top: 2rem; font-family: 'Marcellus', Georgia, serif; font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.04em; color: #c9a227; text-decoration: none; }
|
||||
.back-link:hover { text-decoration: underline; }
|
||||
@media (max-width: 600px) { .blog-post h1 { font-size: 1.7rem; } .blog-post { padding: 2rem 1rem 4rem; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="blog-post">
|
||||
<span class="badge">News</span>
|
||||
<h1>Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups</h1>
|
||||
<div class="post-meta">Oct 06, 2026</div>
|
||||
<img src="https://image.office.odoo4projects.com/img/ODOO_20_chatter.png" alt="Odoo 20 Is Live on Our Servers — With an MCP Server and Free Backups" class="post-image" loading="lazy" />
|
||||
<div class="post-body">
|
||||
<p>Two weeks. That is how long it took us to bring up Odoo 20 on our servers, with all of the new features that come with it. It is live now.</p><p>But the version upgrade is not the whole story. Alongside it, we shipped a set of updates to our management console — the place where you manage your Odoo hosting from inside Odoo itself.</p><h2>An MCP Server for Your Agent</h2><p>The biggest addition is an MCP server that lets your agent control your Odoo hosting directly. That means an agent can:</p><ul><li>Restart the server</li><li>Upload modules</li><li>Add and check domains</li><li>Manage your backups</li><li>Read the logfiles</li></ul><p>Instead of clicking through menus to handle routine hosting tasks, you can hand them to an agent and stay focused on your actual work.</p><h2>Logfiles You Can Keep</h2><p>Logfiles can now be downloaded and archived. When something needs investigating, you can pull the logs and hold on to them, rather than scrolling through a live view and hoping the relevant lines are still there by the time you look.</p><h2>Free Backups for Everyone</h2><p>We also added a free backup scheme for every customer. Backups are the least glamorous part of hosting and the one you miss most when they are gone. Having a baseline in place for everyone meaningfully improves data security across the board.</p><h2>Better AI Server Management</h2><p>Finally, we improved our AI server management backend — the layer that connects the agent-facing tools to the underlying hosting infrastructure. It is now more capable and better suited to the way these tools are actually used.</p><h2>What It Adds Up To</h2><p>Odoo 20 running on our servers, a console that manages your Odoo from within Odoo, an MCP server that opens hosting tasks up to your agent, downloadable and archivable logfiles, a free backup scheme, and a stronger AI management backend. All of it is available now.</p><p>Take a look at our homepage and sign up for a trial to see how it works in practice.</p>
|
||||
</div>
|
||||
<a href="../../index.html#blog" class="back-link">← Back to the Blog</a>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,206 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Confirm your email to get your Odoo instance</title>
|
||||
<style>
|
||||
* { box-sizing: border-box; }
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #f4f0e8;
|
||||
font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: #0d1b2e;
|
||||
}
|
||||
table { width: 100%; border-collapse: collapse; }
|
||||
.container {
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
|
||||
}
|
||||
.header {
|
||||
background: #0d1b2e;
|
||||
color: #fff;
|
||||
padding: 32px 24px;
|
||||
text-align: center;
|
||||
}
|
||||
.brand {
|
||||
font-family: Marcellus, serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
letter-spacing: -0.5px;
|
||||
margin: 0;
|
||||
}
|
||||
.content { padding: 32px 24px; }
|
||||
h1 {
|
||||
font-family: Marcellus, serif;
|
||||
font-size: 26px;
|
||||
margin: 0 0 16px 0;
|
||||
color: #0d1b2e;
|
||||
}
|
||||
p { margin: 0 0 16px 0; color: #162a45; }
|
||||
.highlight {
|
||||
background: rgba(201,162,39,0.08);
|
||||
padding: 12px 16px;
|
||||
border-radius: 6px;
|
||||
border-left: 3px solid #c9a227;
|
||||
margin: 16px 0;
|
||||
}
|
||||
.cta {
|
||||
display: inline-block;
|
||||
background: #c9a227;
|
||||
color: #fff;
|
||||
padding: 14px 28px;
|
||||
text-decoration: none;
|
||||
border-radius: 6px;
|
||||
font-weight: 600;
|
||||
margin: 24px 0;
|
||||
font-size: 16px;
|
||||
}
|
||||
.cta:hover { background: #b38f22; }
|
||||
.steps { margin: 24px 0; }
|
||||
.step {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.step-number {
|
||||
background: #0d1b2e;
|
||||
color: #fff;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: 700;
|
||||
margin-right: 12px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.step-content { flex: 1; }
|
||||
.step h3 { margin: 0 0 4px 0; font-size: 16px; color: #0d1b2e; }
|
||||
.step p { margin: 0; font-size: 14px; color: #162a45; }
|
||||
.footer {
|
||||
background: #f4f0e8;
|
||||
padding: 24px;
|
||||
border-top: 1px solid #e8e2d4;
|
||||
font-size: 13px;
|
||||
color: #162a45;
|
||||
}
|
||||
.footer p { margin: 0 0 8px 0; }
|
||||
.footer a { color: #c9a227; text-decoration: underline; }
|
||||
.support {
|
||||
margin-top: 24px;
|
||||
padding: 16px;
|
||||
background: rgba(13,27,46,0.05);
|
||||
border-radius: 6px;
|
||||
text-align: center;
|
||||
}
|
||||
.support a { color: #0d1b2e; font-weight: 600; text-decoration: none; }
|
||||
.support a:hover { text-decoration: underline; }
|
||||
.unsubscribe { margin-top: 8px; color: #6b7b8c; }
|
||||
.unsubscribe a { color: #6b7b8c; text-decoration: underline; }
|
||||
@media (max-width: 600px) {
|
||||
.container { border-radius: 0; }
|
||||
.header { padding: 24px 16px; }
|
||||
.content { padding: 24px 16px; }
|
||||
h1 { font-size: 22px; }
|
||||
.cta { padding: 12px 20px; font-size: 15px; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="container" cellpadding="0" cellspacing="0" border="0">
|
||||
<!-- Header -->
|
||||
<tr>
|
||||
<td class="header">
|
||||
<h1 class="brand">ODOO4projects</h1>
|
||||
<p style="font-size: 14px; margin-top: 8px; opacity: 0.85;">Odoo Community Managed Hosting</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Main Content -->
|
||||
<tr>
|
||||
<td class="content">
|
||||
<h1>Confirm your email to get your Odoo instance</h1>
|
||||
<p>Thanks for signing up for the 30-day free trial of Odoo Community V20 hosting.</p>
|
||||
<p>Your Odoo instance is waiting to be launched. Confirm your email address and we'll spin it up immediately.</p>
|
||||
|
||||
<!-- Confirmation CTA -->
|
||||
<center>
|
||||
<a class="cta" href="https://odoo4projects.com/trial/confirm?token=USER_TOKEN">Confirm Email</a>
|
||||
</center>
|
||||
|
||||
<div class="highlight">
|
||||
<strong>What happens next:</strong> We'll email your login credentials once your instance is ready.
|
||||
</div>
|
||||
|
||||
<!-- Steps -->
|
||||
<div class="steps">
|
||||
<div class="step">
|
||||
<div class="step-number">1</div>
|
||||
<div class="step-content">
|
||||
<h3>Confirm email</h3>
|
||||
<p>Click the button above to verify your address and start your Odoo V20 instance.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-number">2</div>
|
||||
<div class="step-content">
|
||||
<h3>Instance spins up</h3>
|
||||
<p>We provision your Odoo Community V20 server automatically. Usually takes 2-5 minutes.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="step">
|
||||
<div class="step-number">3</div>
|
||||
<div class="step-content">
|
||||
<h3>Login credentials</h3>
|
||||
<p>We email your URL, username, and temporary password. You can change them right away.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p><strong>What you get in this trial:</strong></p>
|
||||
<ul>
|
||||
<li>Odoo Community V20 — fully featured, open-source ERP</li>
|
||||
<li>Automatic backups and SSL certificate</li>
|
||||
<li>Domain mapping (use your own domain or our free subdomain)</li>
|
||||
<li>No credit card required</li>
|
||||
</ul>
|
||||
|
||||
<div class="support">
|
||||
<p>Questions? Reply to this email or contact us directly:</p>
|
||||
<p><a href="mailto:support@odoo4projects.com">support@odoo4projects.com</a></p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td class="footer">
|
||||
<p><strong>ODOO4projects</strong> — Smart, scalable business solutions</p>
|
||||
<p>
|
||||
<a href="https://odoo4projects.com/legal/privacy">Privacy</a> •
|
||||
<a href="https://odoo4projects.com/legal/terms">Terms</a> •
|
||||
<a href="https://ODOO4projects.com/support.html#contact">Contact</a>
|
||||
</p>
|
||||
<p class="unsubscribe">
|
||||
<a href="https://odoo4projects.com/unsubscribe?token=USER_TOKEN">Unsubscribe</a> from these emails
|
||||
</p>
|
||||
<p style="margin-top: 8px; opacity: 0.7;">© 2024 ODOO4projects LLC. All rights reserved.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
+186
-47
@@ -20,7 +20,7 @@
|
||||
"url": "https://ODOO4projects.com/",
|
||||
"description": "Odoo hosting with fully managed infrastructure. Deploy in 5 minutes with automatic backups, SSL, and Git-based modules.",
|
||||
"foundingDate": "2020",
|
||||
"contactPoint": { "@type": "ContactPoint", "contactType": "customer support", "url": "https://ODOO4projects.com/contactus" },
|
||||
"contactPoint": { "@type": "ContactPoint", "contactType": "customer support", "url": "https://ODOO4projects.com/support.html#contact" },
|
||||
"sameAs": ["https://www.linkedin.com/company/odoo4projects/"],
|
||||
"offers": [
|
||||
{ "@type": "Offer", "name": "Side Hustle", "price": "214.00", "priceCurrency": "USD", "url": "https://ODOO4projects.com/#pricing" },
|
||||
@@ -30,6 +30,63 @@
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<script type="application/json" id="agent-skills">
|
||||
{
|
||||
"skills": [
|
||||
{
|
||||
"name": "spin_up_free_trial",
|
||||
"description": "Spin up a free trial of ODOO4projects.",
|
||||
"when_to_use": [
|
||||
"User wants to create an ODOO4projects free trial",
|
||||
"User asks to spin up or provision a trial",
|
||||
"User asks to try ODOO4projects"
|
||||
],
|
||||
"offer": {
|
||||
"type": "free_trial",
|
||||
"available": true
|
||||
},
|
||||
"mcp": {
|
||||
"server": "https://n8n.odoo4projects.com/mcp/trial"
|
||||
},
|
||||
"server_locations": [
|
||||
{
|
||||
"name": "Manchester",
|
||||
"id": "manchester"
|
||||
},
|
||||
{
|
||||
"name": "Sydney",
|
||||
"id": "sydney"
|
||||
},
|
||||
{
|
||||
"name": "Mumbai",
|
||||
"id": "mumbai"
|
||||
},
|
||||
{
|
||||
"name": "São Paulo",
|
||||
"id": "sao-paulo"
|
||||
},
|
||||
{
|
||||
"name": "Meppel",
|
||||
"id": "meppel"
|
||||
},
|
||||
{
|
||||
"name": "Boston",
|
||||
"id": "boston"
|
||||
}
|
||||
],
|
||||
"workflow": [
|
||||
"Use the ODOO4projects trial MCP server to create the free trial.",
|
||||
"If the user specifies a server location, use that location.",
|
||||
"If no server location is specified, ask the user which available location they prefer.",
|
||||
"After signup, the user will receive a confirmation email.",
|
||||
"The user must confirm the trial using the confirmation email.",
|
||||
"After the trial is confirmed, the user will receive their ODOO4projects credentials."
|
||||
],
|
||||
"instruction": "When the user requests a free trial, use the ODOO4projects trial MCP server to provision it. Do not claim that the trial is fully activated until the required email confirmation has been completed. Explain that the user will receive a confirmation email after signup and, once confirmed, will receive their credentials."
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin />
|
||||
@@ -60,6 +117,13 @@
|
||||
.hero-sub{font-size:1.05rem;color:rgba(255,255,255,.7);max-width:560px;line-height:1.7;margin-bottom:1.5rem}
|
||||
.hero-stats{display:flex;gap:1.5rem;margin-bottom:2rem;flex-wrap:wrap}.hero-stat{display:flex;align-items:center;gap:.4rem;color:rgba(255,255,255,.65);font-size:.85rem}.hero-stat i{color:var(--brass);font-size:.75rem}
|
||||
.hero-actions{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:2rem}
|
||||
.hero-notice{position:absolute;top:1.25rem;right:1.25rem;z-index:3;display:flex;align-items:center;gap:.55rem;max-width:min(360px,calc(100% - 2rem));padding:.6rem .85rem .6rem 1rem;background:#f5c542;color:var(--midnight);border:1px solid rgba(13,27,46,.14);border-radius:var(--radius);box-shadow:0 8px 24px rgba(13,27,46,.3);font-family:Inter,sans-serif;font-size:.82rem;line-height:1.4;animation:heroNoticeIn .4s cubic-bezier(.16,1,.3,1)}
|
||||
.hero-notice[hidden]{display:none}
|
||||
.hero-notice i{color:var(--midnight);font-size:.9rem;flex-shrink:0}
|
||||
.hero-notice-text{flex:1;min-width:0;overflow-wrap:anywhere}
|
||||
.hero-notice-close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:1.35rem;height:1.35rem;padding:0;border:0;border-radius:50%;background:rgba(13,27,46,.12);color:var(--midnight);font-size:1rem;line-height:1;cursor:pointer;transition:background .2s}
|
||||
.hero-notice-close:hover{background:rgba(13,27,46,.24)}
|
||||
@keyframes heroNoticeIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
|
||||
.server-banner{background:var(--midnight);padding:2rem 0 1.5rem;border-top:1px solid var(--line-brass);border-bottom:1px solid var(--line-brass);position:relative;overflow:hidden}
|
||||
.server-banner::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 60% 80% at 50% 100%,rgba(201,162,39,.06) 0%,transparent 70%);pointer-events:none}
|
||||
.server-banner-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;flex-wrap:wrap;gap:.5rem}
|
||||
@@ -81,7 +145,7 @@
|
||||
.pricing-server-select{padding:.5rem 1rem;border-radius:var(--radius);border:1px solid var(--line-brass);background:rgba(255,255,255,.08);color:#fff;font-family:Inter,sans-serif;font-size:.85rem;outline:none;cursor:pointer;min-width:180px}
|
||||
.pricing-server-select option{background:var(--midnight);color:#fff}
|
||||
@media(max-width:992px){.server-grid{grid-template-columns:repeat(3,1fr)}}
|
||||
@media(max-width:768px){.hero{min-height:auto;padding:3rem 0 0}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%;text-align:center}.hero-stats{gap:.75rem}.hero-city-label{bottom:1rem;right:1rem;font-size:.78rem;padding:.5rem .9rem}}
|
||||
@media(max-width:768px){.hero{min-height:auto;padding:3rem 0 0}.hero.has-hero-notice{padding-top:4.75rem}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%;text-align:center}.hero-stats{gap:.75rem}.hero-city-label{bottom:1rem;right:1rem;font-size:.78rem;padding:.5rem .9rem}.hero-notice{top:.75rem;left:.75rem;right:.75rem;max-width:none;font-size:.78rem}}
|
||||
@media(max-width:576px){.server-grid{grid-template-columns:repeat(2,1fr)}.server-banner-header{flex-direction:column;align-items:flex-start}}
|
||||
.status-dot{width:7px;height:7px;border-radius:50%;background:var(--brass);display:inline-block;animation:statusPulse 1.2s ease-in-out infinite}
|
||||
@keyframes statusPulse{0%,100%{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}
|
||||
@@ -124,7 +188,27 @@
|
||||
.oca-icon-link:hover{color:var(--brass-bright);transform:scale(1.2)}
|
||||
.oca-empty{text-align:center;padding:2rem;color:rgba(255,255,255,.4);font-style:italic;display:none}
|
||||
.oca-loading{text-align:center;padding:2rem;color:rgba(255,255,255,.4);font-size:.88rem}
|
||||
@media(max-width:600px){.oca-table td,.oca-table th{padding:.5rem .65rem;font-size:.8rem}}
|
||||
/* Custom Quote Modal */
|
||||
.ow-sub{font-size:.95rem;color:var(--midnight);margin-bottom:1.5rem}
|
||||
.ow-panel input[type="text"],.ow-panel textarea{width:100%;padding:.8rem 1rem;border-radius:var(--radius);border:1px solid var(--line-brass);background:rgba(255,255,255,.05);color:#171c26;font-family:Inter,sans-serif;font-size:.88rem;outline:none;transition:border-color .2s,background .2s;box-sizing:border-box}
|
||||
.ow-panel input[type="text"]:focus,.ow-panel textarea:focus{border-color:var(--brass);background:rgba(255,255,255,.08)}
|
||||
.ow-panel textarea{min-height:100px;resize:vertical}
|
||||
.ow-panel textarea::placeholder{color:rgba(23,28,38,.3)}
|
||||
.ow-panel input[type="email"]::placeholder{color:rgba(23,28,38,.3)}
|
||||
.ow-close{background:var(--midnight);border:1px solid var(--line);color:#fff;font-size:2rem;cursor:pointer;line-height:1;position:absolute;right:1rem;top:1rem;transition:color .2s,background .2s;border-radius:var(--radius);width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center}
|
||||
.ow-close:hover{color:var(--brass);background:var(--midnight-2)}
|
||||
/* Custom Quote Modal overrides for biz-field inside ow-panel */
|
||||
#customQuoteModal .biz-field label{color:#171c26}
|
||||
#customQuoteModal .biz-field textarea{color:#171c26}
|
||||
#customQuoteModal .biz-field textarea::placeholder{color:rgba(23,28,38,.3)}
|
||||
#customQuoteModal .biz-field input[type="email"]{color:#171c26}
|
||||
#customQuoteModal .biz-field input[type="email"]::placeholder{color:rgba(23,28,38,.3)}
|
||||
#customQuoteModal .biz-field input[type="text"]{color:#171c26}
|
||||
#customQuoteModal .biz-field input[type="text"]::placeholder{color:rgba(23,28,38,.3)}
|
||||
/* Success message sits on the light modal panel, so it needs dark text (the global .biz-success rules target the dark wizard section) */
|
||||
#customQuoteModal .biz-success h3{color:var(--midnight)}
|
||||
#customQuoteModal .biz-success p{color:var(--midnight)}
|
||||
@media(max-width:600px){.oca-table td,.oca-table th{padding:.5rem .65rem;font-size:.8rem}.ow-panel{left:5%;right:5%}.ow-close{top:.5rem;right:.5rem;font-size:1.6rem}}
|
||||
</style>
|
||||
<link rel="stylesheet" href="style.css" media="print" onload="this.media='all'" />
|
||||
<noscript><link rel="stylesheet" href="style.css" /></noscript>
|
||||
@@ -134,14 +218,19 @@
|
||||
THESIS: The homepage as a global business lounge concierge desk — midnight blue, brass, marble, city placards for the six regions. The category default (hero + feature grid + pricing grid) is reframed as hospitality: the visitor checks in, reads the rate card, and books a suite.
|
||||
OWN-WORLD: Midnight blue (#0d1b2e) ground, brass (#c9a227) for every accent and CTA, cream (#f4f0e8) for light surfaces. Marcellus serif for display, Inter for body. Six city photos (Amsterdam, Boston, London, Mumbai, São Paulo, Sydney) as circular placards. Hairline brass rules. Concierge-card features.
|
||||
STORY: The visitor understands: "I can deploy Odoo in 5 minutes, globally, without DevOps. This is enterprise-grade, but the concierge handles everything." They believe it from the city photos (real regions), the partner logos, the brass CTA, and the "No setup fee. Stripe Payment. Cancel at any time" footer.
|
||||
FIRST VIEWPORT: Midnight hero with faint Amsterdam skyline. Brass kicker "FULLY MANAGED ODOO HOSTING". Large serif h1 "Deploy Odoo in 5 Minutes — Fully Managed Hosting". Stats row with brass checks. Brass CTA button "See Plans & Pricing" + ghost "How It Works". Bottom: six city placards (photo + name + region) in a horizontal strip.
|
||||
FIRST VIEWPORT: Midnight hero with faint Amsterdam skyline. Brass kicker "FULLY MANAGED ODOO COMMUNITY HOSTING". Large serif h1 "Deploy Odoo in 5 Minutes — Fully Managed Hosting". Stats row with brass checks. Brass CTA button "See Plans & Pricing" + ghost "How It Works". Bottom: six city placards (photo + name + region) in a horizontal strip.
|
||||
FORM: The Grand Hotel Business Lounge (model-pick, user-chosen). Seed key: 7db4dced.
|
||||
FINISH: unreviewed and undocumented is unfinished; this build ends with the finish review, the verdict, and DESIGN.md.
|
||||
-->
|
||||
<!-- Hero -->
|
||||
<section class="hero">
|
||||
<div class="hero-notice" id="heroConfirmNotice" role="status" aria-live="polite" hidden>
|
||||
<i class="fas fa-check-circle" aria-hidden="true"></i>
|
||||
<span class="hero-notice-text"></span>
|
||||
<button type="button" class="hero-notice-close" aria-label="Dismiss notification">×</button>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="hero-kicker">Fully Managed Odoo Hosting</div>
|
||||
<div class="hero-kicker">Fully Managed Odoo Community Hosting</div>
|
||||
<h1>Deploy Odoo in <span>5 Minutes</span> — Fully Managed Hosting</h1>
|
||||
<p class="hero-sub">Launch a production-ready Odoo Community instance with automatic backups, free SSL, and Git-based module management. No DevOps required.</p>
|
||||
<div class="hero-stats">
|
||||
@@ -157,6 +246,18 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Spinning Up Widget (shown when ?message=spinning_up) -->
|
||||
<section class="spinning-up" id="spinningUp" style="display:none;">
|
||||
<div class="container">
|
||||
<div class="spinning-card">
|
||||
<i class="fas fa-cog fa-spin"></i>
|
||||
<h3>Spinning up your Odoo instance</h3>
|
||||
<p>We're provisioning your Odoo Community V20 server. This usually takes 2-5 minutes.</p>
|
||||
<p class="spinning-note">You'll receive an email with your login credentials once it's ready.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Server Status Banner -->
|
||||
<section class="server-banner" id="serverBanner">
|
||||
<div class="container">
|
||||
@@ -243,25 +344,25 @@
|
||||
<div class="container">
|
||||
<h2 class="section-title">Frequently asked questions</h2>
|
||||
<div class="faq-grid">
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>How fast can I get started?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Pick a plan, choose your region — your instance is live in under 5 minutes. No setup fee. Stripe Payment. Cancel at any time</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>Can I install custom modules?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Yes. Starting with On the Rise we fully support Git-based modules. Quick Git is included for one-click installs.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>What if I outgrow my plan?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Upgrade instantly from your Odoo Settings panel. No data migration, no downtime.</p></div>
|
||||
<div class="faq-a"><p>Grow from Side Hustle to Empire without data migration or downtime. Upgrade in your Odoo Settings panel — your instance stays live, your data moves with you.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>Can I customize it?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Yes. On the Rise and above support Git-based modules. Install custom apps, build your own, or use Quick GIT for one-click installs.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>How fast can I get started?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Five minutes. Pick a plan, choose your region — your Odoo instance is live. No setup fee. Stripe payment. Cancel anytime.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>Can I run Odoo Enterprise?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Powerhouse and above are Enterprise-ready. You bring your license; we provide the infrastructure.</p></div>
|
||||
<div class="faq-a"><p>Powerhouse and Empire are Enterprise-ready. Bring your license; we provide the infrastructure.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>ODOO Community? What can it do?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
<div class="faq-a"><p>Inventory, accounting, CRM, sales, manufacturing, HR, and more — all in one system. Community is free and fully open-source.</p></div>
|
||||
<div class="faq-a"><p>Inventory, accounting, CRM, sales, manufacturing, HR — all in one system. Free and fully open-source.</p></div>
|
||||
</div>
|
||||
<div class="faq-card" onclick="this.classList.toggle('open')">
|
||||
<div class="faq-q"><span>Do you have an affiliate program?</span> <i class="fas fa-chevron-down"></i></div>
|
||||
@@ -275,15 +376,15 @@
|
||||
<!-- Pricing -->
|
||||
<section class="section-dark" id="pricing">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Rates & Suites</p>
|
||||
<p class="section-kicker">Order & Pricing</p>
|
||||
<h2 class="section-title">Your Plan, Your Timing: Upgrade Anytime</h2>
|
||||
<div class="pricing-server-row">
|
||||
<label for="pricingServerLocation">Server Location</label>
|
||||
<select id="pricingServerLocation" class="pricing-server-select"></select>
|
||||
<label for="pricingOdooVersion">Odoo Version</label>
|
||||
<select id="pricingOdooVersion" class="pricing-server-select">
|
||||
<option value="19.0">19.0 — Tons of OCA supported modules</option>
|
||||
<option value="20.0">20.0 — Latest Greatest</option>
|
||||
<option value="19.0">19.0 — Tons of OCA supported modules</option>
|
||||
<option value="20.0" selected>20.0 — Latest Greatest</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="pricing-grid">
|
||||
@@ -296,12 +397,12 @@
|
||||
<small class="price-period">/ year</small>
|
||||
<div class="price-save">Save 8%</div>
|
||||
</div>
|
||||
<p class="desc">“ODOO Standard .. that is all my business needs”</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="54">Buy Now</a>
|
||||
<p class="desc">"ODOO Standard .. that is all my business needs"</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="6">Buy Now</a>
|
||||
<ul>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> ODOO CE Hosting</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic Backups</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Domain Mapping, SSL Cert</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Launch Odoo CE in 5 minutes</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic backups — no remembering</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Domain mapping & SSL cert</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pcard-foot">No setup fee. Stripe Payment<br />Cancel at any time</div>
|
||||
@@ -315,13 +416,13 @@
|
||||
<small class="price-period">/ year</small>
|
||||
<div class="price-save">Save 9%</div>
|
||||
</div>
|
||||
<p class="desc">“I need some modules and professional reports”</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="55">Buy Now</a>
|
||||
<p class="desc">"I need some modules and professional reports"</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="4">Buy Now</a>
|
||||
<ul>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> ODOO CE Hosting</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic Backups</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Domain Mapping, SSL Cert</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Module installation via GIT / quickGIT</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Launch Odoo CE in 5 minutes</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic backups — no remembering</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Domain mapping & SSL cert</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Install custom modules via Git/QuickGIT</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pcard-foot">No setup fee. Stripe Payment<br />Cancel at any time</div>
|
||||
@@ -335,15 +436,14 @@
|
||||
<small class="price-period">/ year</small>
|
||||
<div class="price-save">Save 10%</div>
|
||||
</div>
|
||||
<p class="desc">“ODOO Enterprise is a must have!”</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="56">Buy Now</a>
|
||||
<p class="desc">"ODOO Enterprise is a must have!"</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-buy" data-id="5">Buy Now</a>
|
||||
<ul>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> ODOO CE Hosting</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic Backups</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> 3 Domain Mapping, SSL Cert</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Module installation via GIT / quickGIT</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> 2 Workers</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> 2GB HDD</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Launch Odoo CE in 5 minutes</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Automatic backups — no remembering</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> 3 domains & SSL certs</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Install custom modules via Git/QuickGIT</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> 2 workers for reliability</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pcard-foot">No setup fee. Stripe Payment<br />Cancel at any time</div>
|
||||
@@ -357,18 +457,19 @@
|
||||
<small class="price-period">/ year</small>
|
||||
<div class="price-save"></div>
|
||||
</div>
|
||||
<p class="desc">“My house! My Horse! My Server!”</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-empire" data-plan="Empire" data-price="950.00" data-is-empire="true">Get Custom Quote</a>
|
||||
<p class="desc">"My house! My Horse! My Server!"</p>
|
||||
<a href="javascript:void(0)" class="btn btn-brass btn-empire">Get Custom Quote</a>
|
||||
<ul>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Our service on your server</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> All modules & features</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> All modules & features</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Unlimited customization</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Priority support & dedicated onboarding</li>
|
||||
<li><i class="fas fa-check" style="color: var(--success)"></i> Priority support & dedicated onboarding</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="pricing-cta-note">Save money, less administration</p>
|
||||
<p class="pricing-cta-note"><a href="odoo-hosting-2027.html"><strong>Compare every way to host Odoo in 2027 →</strong></a></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -401,12 +502,43 @@
|
||||
</div>
|
||||
<p class="ow-coupon-status" id="orderCouponStatus">✓ Coupon applied</p>
|
||||
</div>
|
||||
<a id="orderBuyBtn" href="/contactus" class="btn btn-brass ow-buy">Continue to Stripe →</a>
|
||||
<a id="orderBuyBtn" href="/support.html#contact" class="btn btn-brass ow-buy">Continue to Stripe →</a>
|
||||
<p class="ow-note">🔒 Secure Stripe checkout · Credit card required</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Custom Quote Modal -->
|
||||
<div id="customQuoteModal" class="ow-overlay" onclick="if(event.target===this)closeCustomQuoteModal()">
|
||||
<div id="customQuotePanel" class="ow-panel" style="display:none">
|
||||
<button class="ow-close" onclick="closeCustomQuoteModal()">×</button>
|
||||
<div class="ow-content">
|
||||
<h2 class="ow-title">Get Custom Quote</h2>
|
||||
<p class="ow-sub">Tell us about your needs and we'll prepare a tailored offer.</p>
|
||||
<form id="customQuoteForm" class="biz-form" style="text-align:left">
|
||||
<div class="biz-field">
|
||||
<label for="cqName">Name</label>
|
||||
<input type="text" id="cqName" placeholder="Your full name" required />
|
||||
</div>
|
||||
<div class="biz-field">
|
||||
<label for="cqEmail">Email</label>
|
||||
<input type="email" id="cqEmail" placeholder="your@email.com" required />
|
||||
</div>
|
||||
<div class="biz-field">
|
||||
<label for="cqRequirements">Your Requirements</label>
|
||||
<textarea id="cqRequirements" placeholder="Describe your requirements (how many users? onsite, cloud? how many workers?)" required></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-brass btn-lg">Submit Request</button>
|
||||
</form>
|
||||
<div class="biz-success" id="customQuoteSuccess" style="display:none">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<h3>Request received</h3>
|
||||
<p>We'll review your requirements and get back to you shortly.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Blog -->
|
||||
<section class="blog-section blog-section-light" id="blog">
|
||||
<div class="container">
|
||||
@@ -495,7 +627,7 @@
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="support.html">Support</a></li>
|
||||
<li><a href="legal.html">Legal</a></li>
|
||||
<li><a href="/contactus">Contact us</a></li>
|
||||
<li><a href="/support.html#contact">Contact us</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
@@ -508,9 +640,8 @@
|
||||
</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 and N8N automation.</p>
|
||||
<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>
|
||||
<p><a href="mailto:support@odoo4projects.com" class="footer-email">support@odoo4projects.com</a></p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>Follow us on</h4>
|
||||
@@ -518,6 +649,14 @@
|
||||
<a href="https://www.linkedin.com/company/odoo4projects/" target="_blank" aria-label="LinkedIn"><i class="fab fa-linkedin-in"></i></a>
|
||||
<a href="https://www.youtube.com/@ODOO4projects" target="_blank" aria-label="YouTube"><i class="fab fa-youtube"></i></a>
|
||||
</div>
|
||||
<form class="footer-contact-form" id="footerContactForm">
|
||||
<input type="email" id="footerContactEmail" placeholder="Your email address" required />
|
||||
<div class="footer-textarea-wrap">
|
||||
<textarea id="footerContactText" placeholder="Your message..." required></textarea>
|
||||
<button type="submit" class="footer-send-btn" aria-label="Send message"><i class="fas fa-paper-plane"></i></button>
|
||||
</div>
|
||||
<div class="footer-form-status" id="footerFormStatus" role="status"></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fcopy">Copyright © ODOO4projects LLC</div>
|
||||
@@ -528,4 +667,4 @@
|
||||
<script src="script.js"></script>
|
||||
<script defer src="/static/agent-odoo4projects/agent.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@@ -0,0 +1,40 @@
|
||||
# ODOO4projects
|
||||
|
||||
> ODOO4projects is a managed Odoo Community hosting service. We run the server, the backups, the
|
||||
> SSL certificate and the version upgrades for a monthly-or-yearly price, so the customer does not
|
||||
> have to administer a server. One login: everything happens inside the customer's own Odoo
|
||||
> instance. We do not sell Odoo itself; we sell a business system that runs.
|
||||
|
||||
## Products and pricing (verified 2026-10-21, list prices, USD, VAT excluded)
|
||||
|
||||
- Side Hustle — $214 per year. Managed Odoo Community hosting: server, backups, SSL. No per-user
|
||||
licence. No module installation on this plan.
|
||||
- On the Rise — $395 per year. The same, plus Git and one-click module installs.
|
||||
- Powerhouse and Empire — quoted on the plans page (no fixed price published).
|
||||
- Odoo Community has no per-user licence. Odoo Enterprise, if the customer brings their own
|
||||
licence, is licensed per user by Odoo S.A.
|
||||
|
||||
## What we support
|
||||
|
||||
- Odoo Community, hosted and managed.
|
||||
- odoo.sh (Odoo S.A.'s own platform) — supported and coexists with our service.
|
||||
- Growth into Odoo Enterprise — bring your own licence, keep the same instance, no migration.
|
||||
- Own hardware — the Empire plan runs our service on the customer's own server.
|
||||
|
||||
## What we do not support
|
||||
|
||||
- Odoo Online (Odoo's SaaS). It runs Odoo's standard apps only and is incompatible with custom
|
||||
modules, so it is not a fit for our managed Community model.
|
||||
|
||||
## Key pages
|
||||
|
||||
- [Odoo hosting 2027 — comparison landing page](https://odoo4projects.com/odoo-hosting-2027.html): every route to Odoo (managed, VPS, odoo.sh, Odoo Online, own hardware) side by side, with annual and five-year cost comparisons.
|
||||
- [Home](https://odoo4projects.com/): plans and pricing, FAQ, server locations.
|
||||
- [Support](https://odoo4projects.com/support.html): support and frequently asked questions.
|
||||
- [Legal](https://odoo4projects.com/legal): company details.
|
||||
- [Blog](https://odoo4projects.com/blog/): guides, how-tos and platform news.
|
||||
|
||||
## Notes
|
||||
|
||||
- Prices are list prices captured on 21 October 2026 and are re-checked before each publishing year.
|
||||
- Findability: [sitemap.xml](https://odoo4projects.com/sitemap.xml).
|
||||
@@ -0,0 +1,986 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Odoo Hosting 2027: Managed Odoo Community, Live in About Five Minutes</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Odoo hosting in 2027, compared: managed Odoo Community from ODOO4projects against a self-managed VPS, odoo.sh, Odoo Online and your own hardware. One login, one yearly price, no per-user licence."
|
||||
/>
|
||||
<link rel="canonical" href="https://odoo4projects.com/odoo-hosting-2027.html" />
|
||||
<meta property="og:title" content="Odoo Hosting 2027: Managed Odoo Community, Live in About Five Minutes" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Every route to Odoo side by side, and what it really costs over three to five years. One login, one yearly price, no per-user licence."
|
||||
/>
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://odoo4projects.com/odoo-hosting-2027.html" />
|
||||
<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 Hosting 2027 landing page (page-scoped; additive) ---- */
|
||||
.cmp-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) */
|
||||
.cmp-topbar {
|
||||
background: var(--midnight-2);
|
||||
border-bottom: 1px solid var(--line-brass);
|
||||
padding: 0.85rem 0;
|
||||
}
|
||||
.cmp-topbar .container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.cmp-brand {
|
||||
font-family: Marcellus, Georgia, serif;
|
||||
font-size: 1.15rem;
|
||||
letter-spacing: 0.04em;
|
||||
color: #fff;
|
||||
}
|
||||
.cmp-brand span {
|
||||
color: var(--brass);
|
||||
}
|
||||
.cmp-topbar-links {
|
||||
display: flex;
|
||||
gap: 1.25rem;
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
.cmp-topbar-links a {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
.cmp-topbar-links a:hover {
|
||||
color: var(--brass);
|
||||
}
|
||||
|
||||
/* Hero */
|
||||
.cmp-hero {
|
||||
min-height: 0;
|
||||
padding: 3.5rem 0 3rem;
|
||||
}
|
||||
.cmp-hero h1 span {
|
||||
color: var(--brass);
|
||||
}
|
||||
.cmp-hero .hero-sub {
|
||||
max-width: 620px;
|
||||
}
|
||||
|
||||
.cmp-lead {
|
||||
font-size: 1.1rem;
|
||||
color: var(--ink-soft);
|
||||
max-width: 720px;
|
||||
line-height: 1.75;
|
||||
margin: 0 auto 1.5rem;
|
||||
}
|
||||
.section-light .section-title,
|
||||
.section-light .section-kicker {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Comparison tables (reuse .oca-table on dark sections) */
|
||||
.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 .is-us {
|
||||
background: rgba(201, 162, 39, 0.09);
|
||||
}
|
||||
.cmp-table thead th.is-us {
|
||||
color: var(--brass-bright);
|
||||
background: rgba(201, 162, 39, 0.14);
|
||||
}
|
||||
.cmp-table .is-us strong {
|
||||
color: #fff;
|
||||
}
|
||||
.cmp-flag {
|
||||
display: inline-block;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 0.69rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: var(--midnight);
|
||||
background: var(--brass);
|
||||
border-radius: var(--radius-pill);
|
||||
padding: 0.1rem 0.5rem;
|
||||
margin-left: 0.35rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.cmp-not-us {
|
||||
display: inline-block;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 0.69rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: #ffd9d9;
|
||||
background: rgba(190, 40, 40, 0.35);
|
||||
border: 1px solid rgba(255, 120, 120, 0.45);
|
||||
border-radius: var(--radius-pill);
|
||||
padding: 0.1rem 0.5rem;
|
||||
margin-left: 0.35rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Notes under the tables */
|
||||
.cmp-notes {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 1rem;
|
||||
margin-top: 1.75rem;
|
||||
}
|
||||
.cmp-note {
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid var(--line-brass);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: 1.15rem 1.25rem;
|
||||
}
|
||||
.cmp-note h3 {
|
||||
font-size: 1rem;
|
||||
color: #fff;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
.cmp-note p {
|
||||
font-size: 0.84rem;
|
||||
color: rgba(255, 255, 255, 0.72);
|
||||
line-height: 1.65;
|
||||
margin-bottom: 0.7rem;
|
||||
}
|
||||
.cmp-note p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.cmp-note a {
|
||||
color: var(--brass-bright);
|
||||
}
|
||||
@media (max-width: 992px) {
|
||||
.cmp-notes {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Cost infographic */
|
||||
.cmp-figure {
|
||||
margin: 2rem auto 0;
|
||||
max-width: 780px;
|
||||
}
|
||||
.cmp-figure svg {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
.cmp-figure figcaption {
|
||||
margin-top: 0.75rem;
|
||||
font-size: 0.78rem;
|
||||
color: var(--ink-faint);
|
||||
text-align: center;
|
||||
}
|
||||
.cmp-bar-label {
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 13px;
|
||||
fill: var(--ink);
|
||||
}
|
||||
.cmp-bar-label.is-us {
|
||||
font-weight: 700;
|
||||
}
|
||||
.cmp-bar-value {
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
fill: var(--midnight);
|
||||
}
|
||||
.cmp-bar {
|
||||
transform-box: fill-box;
|
||||
transform-origin: left center;
|
||||
}
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.cmp-bar {
|
||||
animation: cmpGrow 0.9s cubic-bezier(0.16, 1, 0.3, 1) both;
|
||||
}
|
||||
.cmp-bar:nth-of-type(2) {
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
.cmp-bar:nth-of-type(3) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
}
|
||||
@keyframes cmpGrow {
|
||||
from {
|
||||
transform: scaleX(0);
|
||||
}
|
||||
to {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cost table extras */
|
||||
.cmp-cost-note {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 1.5rem auto 0;
|
||||
max-width: 900px;
|
||||
}
|
||||
.cmp-cost-note li {
|
||||
position: relative;
|
||||
padding-left: 1.4rem;
|
||||
margin-bottom: 0.6rem;
|
||||
font-size: 0.85rem;
|
||||
color: rgba(255, 255, 255, 0.75);
|
||||
line-height: 1.6;
|
||||
}
|
||||
.cmp-cost-note li::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0.25rem;
|
||||
top: 0.5rem;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border-radius: 50%;
|
||||
background: var(--brass);
|
||||
}
|
||||
.cmp-cost-note 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 .cmp-a {
|
||||
font-size: 0.87rem;
|
||||
color: var(--ink-soft);
|
||||
line-height: 1.7;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
.cmp-faq .cmp-a p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.cmp-faq-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Final CTA band */
|
||||
.cmp-cta {
|
||||
text-align: center;
|
||||
}
|
||||
.cmp-cta .cmp-lead {
|
||||
color: rgba(255, 255, 255, 0.72);
|
||||
}
|
||||
.cmp-cta-actions {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
.cmp-cta p.cmp-cta-answers {
|
||||
font-size: 0.8rem;
|
||||
color: rgba(255, 255, 255, 0.5);
|
||||
margin-top: 1.25rem;
|
||||
}
|
||||
|
||||
/* Focus states on every CTA */
|
||||
.btn:focus-visible,
|
||||
.cmp-topbar-links a:focus-visible,
|
||||
.cmp-note a:focus-visible {
|
||||
outline: 3px solid var(--brass-bright);
|
||||
outline-offset: 2px;
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
.btn-brass:focus-visible {
|
||||
outline-color: #fff;
|
||||
}
|
||||
</style>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@graph": [
|
||||
{
|
||||
"@type": "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-hosting-2027.html",
|
||||
"url": "https://odoo4projects.com/odoo-hosting-2027.html",
|
||||
"name": "Odoo Hosting 2027: Managed Odoo Community, Live in About Five Minutes",
|
||||
"description": "A comparison of every route to Odoo in 2027: managed Odoo Community, a self-managed VPS, odoo.sh, Odoo Online and your own hardware.",
|
||||
"isPartOf": { "@id": "https://odoo4projects.com/#organization" },
|
||||
"about": [
|
||||
{ "@type": "Thing", "name": "Odoo hosting" },
|
||||
{ "@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 Hosting 2027", "item": "https://odoo4projects.com/odoo-hosting-2027.html" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"@type": "Product",
|
||||
"name": "Managed Odoo Community hosting",
|
||||
"description": "Managed Odoo Community hosting: the server, backups, SSL certificate and version upgrades are run for you on one yearly price, with no per-user licence on Odoo Community.",
|
||||
"brand": { "@id": "https://odoo4projects.com/#organization" },
|
||||
"offers": [
|
||||
{
|
||||
"@type": "Offer",
|
||||
"name": "Side Hustle",
|
||||
"price": "214.00",
|
||||
"priceCurrency": "USD",
|
||||
"url": "https://odoo4projects.com/#pricing"
|
||||
},
|
||||
{
|
||||
"@type": "Offer",
|
||||
"name": "On the Rise",
|
||||
"price": "395.00",
|
||||
"priceCurrency": "USD",
|
||||
"url": "https://odoo4projects.com/#pricing"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "What does \"five minutes\" actually mean?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Five minutes is the time to a running instance, not to a finished system. Putting your own customers, products and stock in is the first week's work, and it is the same week on any of the routes above."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Do you support Odoo Online?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "No. Odoo Online runs Odoo's standard apps only and is incompatible with custom modules or modules from the Odoo Apps Store, so you cannot add an app that is not on Odoo's list. Upgrades are automatic and mandatory on Odoo's schedule. If Odoo's standard apps cover everything you will ever need, Odoo Online is the cheaper and simpler answer and we are not the right choice."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Can I add my own apps or OCA modules?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Odoo's own apps are all there on every plan. Custom and OCA modules install from On the Rise up, by Git or one click. Side Hustle has no module installation."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Do I need an AI assistant to use ODOO4projects?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "No. We ship our MCP server directly in the apps, so an AI assistant such as Claude Code or Hermes can restart the server, upload a module, add a domain or read the log for you, and you never open a hosting panel. It is optional: the business works exactly the same without it."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Can we move to Odoo Enterprise later?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Yes. Bring your own Odoo Enterprise licence and keep the same instance. No migration."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Is there a per-user licence?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "No. Odoo Community has no per-user licence; our plans are one flat yearly price. Odoo Enterprise, if you bring it, is licensed per user by Odoo S.A."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
|
||||
<div class="cmp-topbar">
|
||||
<div class="container">
|
||||
<a class="cmp-brand" href="index.html">ODOO4<span>projects</span></a>
|
||||
<nav class="cmp-topbar-links" aria-label="Page links">
|
||||
<a href="index.html#pricing">Plans & pricing</a>
|
||||
<a href="support.html">Support</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hero -->
|
||||
<section class="hero cmp-hero">
|
||||
<div class="container">
|
||||
<p class="hero-kicker">Managed Odoo Community Hosting</p>
|
||||
<h1>Odoo Hosting 2027: Managed Odoo Community, <span>Live in About Five Minutes</span></h1>
|
||||
<p class="hero-sub">
|
||||
A managed Odoo Community instance: your stock, orders, invoices and customers in one system. We
|
||||
run the server, the backups, the certificate and the upgrades. You put your own data in and get on
|
||||
with the business.
|
||||
</p>
|
||||
<div class="hero-stats">
|
||||
<span class="hero-stat"><i aria-hidden="true">✓</i> About 5 minutes to a live instance</span>
|
||||
<span class="hero-stat"><i aria-hidden="true">✓</i> One login, one place to work</span>
|
||||
<span class="hero-stat"><i aria-hidden="true">✓</i> No per-user licence</span>
|
||||
<span class="hero-stat"><i aria-hidden="true">✓</i> One yearly price</span>
|
||||
</div>
|
||||
<div class="hero-actions">
|
||||
<a href="index.html#trialCard" class="btn btn-brass btn-lg">Start the free trial</a>
|
||||
<a href="index.html#pricing" class="btn btn-outline btn-lg">See plans and pricing</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Mission -->
|
||||
<section class="section-light">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Why we exist</p>
|
||||
<h2 class="section-title">We don't sell Odoo. We sell a business that runs.</h2>
|
||||
<p class="cmp-lead">
|
||||
You should not have to become the IT department to find out what is in your stock. A business
|
||||
system is something you subscribe to, not a project you build. The server, the patches, the
|
||||
backups, the certificate, the version upgrade: those are our job, permanently, and not an evening
|
||||
you hand back to the company.
|
||||
</p>
|
||||
<p class="cmp-lead">
|
||||
So we put your stock, your orders, your invoices and who owes you money in one place, and we keep
|
||||
the machine underneath it alive. That is the whole offer.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Feature comparison -->
|
||||
<section class="section-dark" id="comparison">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Every route to Odoo</p>
|
||||
<h2 class="section-title">Side by side, and what each one asks of you</h2>
|
||||
<div class="cmp-table-wrap">
|
||||
<table class="cmp-table">
|
||||
<caption class="cmp-sr-only">
|
||||
Feature comparison of ODOO4projects managed hosting against a self-managed VPS, odoo.sh, Odoo
|
||||
Online and your own hardware.
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Comparison</th>
|
||||
<th scope="col" class="is-us">ODOO4projects</th>
|
||||
<th scope="col">Self-managed VPS</th>
|
||||
<th scope="col">odoo.sh</th>
|
||||
<th scope="col">Odoo Online</th>
|
||||
<th scope="col">Own hardware</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">What you get</th>
|
||||
<td class="is-us"><strong>Odoo Community, hosted and managed.</strong> Stock, orders, invoices, customers and accounting in one system.</td>
|
||||
<td>Odoo Community on a server you rent, install and run yourself.</td>
|
||||
<td>Odoo Enterprise on Odoo S.A.'s platform, built for a Git and developer workflow.</td>
|
||||
<td>Odoo's standard apps only, hosted by Odoo. <span class="cmp-not-us">Not supported by us</span></td>
|
||||
<td>Odoo on a machine you own, in your building.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Who runs the server and patches it</th>
|
||||
<td class="is-us">We do.</td>
|
||||
<td>You. You install it, patch it and fix it.</td>
|
||||
<td>Odoo S.A. runs the servers; you still need a developer for the code side.</td>
|
||||
<td>Odoo S.A.</td>
|
||||
<td>You. Or our Empire plan runs our service on your server.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Time to a live instance</th>
|
||||
<td class="is-us">About five minutes: pick a plan and a region and the instance is live.</td>
|
||||
<td>You install it first, before it is a system.</td>
|
||||
<td>You connect GitHub, then deploy by pushing a branch.</td>
|
||||
<td>Sign up and use it. Nothing to install.</td>
|
||||
<td>You install it on your own machine.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Backups, SSL certificate, domain</th>
|
||||
<td class="is-us">Run for you on every plan. No schedule for you to set.</td>
|
||||
<td>Yours: database dump, certificate, DNS record.</td>
|
||||
<td>Odoo runs the backups and handles DNS on the platform.</td>
|
||||
<td>Odoo runs the backups and handles the domain.</td>
|
||||
<td>Yours: dump, certificate, DNS and the machine itself.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Where you manage it</th>
|
||||
<td class="is-us">Inside your Odoo instance. One login, one place to work.</td>
|
||||
<td>A hosting panel, a terminal and Odoo.</td>
|
||||
<td>The odoo.sh dashboard, GitHub and Odoo.</td>
|
||||
<td>Odoo and Odoo's control centre.</td>
|
||||
<td>Wherever you install it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">AI assistant control (Claude Code, Hermes)</th>
|
||||
<td class="is-us">Included. Our MCP server ships in the apps.</td>
|
||||
<td>You build it yourself.</td>
|
||||
<td>Not provided by us.</td>
|
||||
<td>Not supported by us.</td>
|
||||
<td>Through our service on your server.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Adding your own apps</th>
|
||||
<td class="is-us">Odoo's own apps are all there on every plan. Custom and OCA modules install from On the Rise up, by Git or one click. Side Hustle has no module installation.</td>
|
||||
<td>Yes, if you can run the install.</td>
|
||||
<td>Yes, through Git, with a developer.</td>
|
||||
<td>No. You cannot add any app that is not on Odoo's list, not even the free ones.</td>
|
||||
<td>Yes, if you can run the install.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Price model</th>
|
||||
<td class="is-us">One flat yearly price. No per-user licence on Community.</td>
|
||||
<td>Server rental only, plus your hours.</td>
|
||||
<td>Per-user Odoo licence plus hosting, billed separately.</td>
|
||||
<td>Per user, per month, all in.</td>
|
||||
<td>You buy the machine and pay for everything it needs.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Version upgrades</th>
|
||||
<td class="is-us">A support ticket. We migrate versions 17, 18 and 19.</td>
|
||||
<td>You do it, after taking a full backup.</td>
|
||||
<td>Push to the branch; if a module update fails, Odoo reverts the server and rolls the database back.</td>
|
||||
<td>Automatic and mandatory on Odoo's schedule.</td>
|
||||
<td>You do it.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Growth to Enterprise</th>
|
||||
<td class="is-us">Bring your own Odoo Enterprise licence and keep the same instance. No migration.</td>
|
||||
<td>Supported: Community to Enterprise on the same server.</td>
|
||||
<td>An Odoo Enterprise licence is required to be on odoo.sh at all.</td>
|
||||
<td>It is Enterprise software already.</td>
|
||||
<td>Supported on the same server.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="cmp-notes">
|
||||
<div class="cmp-note">
|
||||
<h3>Five minutes, honestly</h3>
|
||||
<p>
|
||||
Five minutes is the time to a running instance, not to a finished system. Putting your own
|
||||
customers, products and stock in is the first week's work, and it is the same week on any of
|
||||
the routes above.
|
||||
</p>
|
||||
</div>
|
||||
<div class="cmp-note">
|
||||
<h3>About Odoo Online, and why we don't support it</h3>
|
||||
<p>
|
||||
Odoo Online runs Odoo's standard apps only. Odoo's own documentation states it is
|
||||
<em>"incompatible with custom modules or modules from the Odoo Apps Store"</em>, so you cannot
|
||||
add an app that is not on Odoo's list. Upgrades are automatic and mandatory on Odoo's
|
||||
schedule, whether the timing suits your quarter or not. You can download your data from Odoo
|
||||
Online; what you cannot take with you is the system you built on top of it.
|
||||
</p>
|
||||
<p>
|
||||
The honest part: if Odoo's standard apps cover everything you will ever need, Odoo Online is
|
||||
the cheaper and simpler answer and we are not the right choice. We are for the business that
|
||||
will need an app Odoo does not have, or that wants to keep running the version it uses today.
|
||||
</p>
|
||||
</div>
|
||||
<div class="cmp-note">
|
||||
<h3>Claude Code and Hermes</h3>
|
||||
<p>
|
||||
We ship our MCP server directly in the apps. If you use an AI assistant, it can restart the
|
||||
server, upload a module, add a domain or read the log for you, and you never open a hosting
|
||||
panel. It is optional. The business works exactly the same without it.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Cost over time -->
|
||||
<section class="section-light" id="lifetime-cost">
|
||||
<div class="container">
|
||||
<p class="section-kicker">The bill behind the bill</p>
|
||||
<h2 class="section-title">What the price really is over three to five years</h2>
|
||||
<p class="cmp-lead">
|
||||
Over three to five years, the monthly figure is the small half of the bill. A rented server costs
|
||||
about $102 a year (OVH VPS-2, VAT excluded). What is not in that number is the person who installs
|
||||
Odoo, patches the operating system, watches the certificate, takes the backups and runs the
|
||||
version upgrade.
|
||||
</p>
|
||||
<p class="cmp-lead">
|
||||
Odoo's own documentation says updating is <em>"most appropriately accomplished by the person who
|
||||
deployed Odoo initially"</em>. OVH's own FAQ says a VPS <em>"requires basic knowledge of server
|
||||
administration"</em>. On a VPS, that person is you or someone you pay, and neither line appears on
|
||||
the invoice.
|
||||
</p>
|
||||
<p class="cmp-lead">
|
||||
Our price is one number, once a year, and it covers that work: the server, the certificate, the
|
||||
backups, the upgrade ticket and support when something breaks. Over five years, $214 a year is
|
||||
$1,070. That is the whole cost of the hosting, not the deposit on it.
|
||||
</p>
|
||||
|
||||
<figure class="cmp-figure">
|
||||
<svg viewBox="0 0 760 260" role="img" aria-labelledby="cmpChartTitle cmpChartDesc" preserveAspectRatio="xMidYMid meet">
|
||||
<title id="cmpChartTitle">Five-year total cost at list price: ODOO4projects Side Hustle $1,070, Odoo Online $23,340, odoo.sh $49,188</title>
|
||||
<desc id="cmpChartDesc">Horizontal bar chart comparing five-year list-price totals. ODOO4projects Side Hustle is $1,070 and is by far the shortest bar. Odoo Online is $23,340 and odoo.sh is $49,188. The Odoo Online and odoo.sh totals do not include your own time.</desc>
|
||||
|
||||
<!-- baseline -->
|
||||
<line x1="196" y1="20" x2="196" y2="230" stroke="rgba(23,28,38,0.18)" stroke-width="1" />
|
||||
|
||||
<!-- Side Hustle (ours) -->
|
||||
<text class="cmp-bar-label is-us" x="0" y="60">ODOO4projects</text>
|
||||
<text class="cmp-bar-label is-us" x="0" y="76" fill="rgba(23,28,38,0.55)">Side Hustle</text>
|
||||
<rect class="cmp-bar" x="196" y="40" width="22" height="34" rx="3" fill="#c9a227" />
|
||||
<text class="cmp-bar-value" x="228" y="62">$1,070</text>
|
||||
|
||||
<!-- Odoo Online -->
|
||||
<text class="cmp-bar-label" x="0" y="130">Odoo Online</text>
|
||||
<text class="cmp-bar-label" x="0" y="146" fill="rgba(23,28,38,0.55)">(not supported by us)</text>
|
||||
<rect class="cmp-bar" x="196" y="110" width="240" height="34" rx="3" fill="#8ea0b8" />
|
||||
<text class="cmp-bar-value" x="446" y="132">$23,340</text>
|
||||
|
||||
<!-- odoo.sh -->
|
||||
<text class="cmp-bar-label" x="0" y="200">odoo.sh</text>
|
||||
<text class="cmp-bar-label" x="0" y="216" fill="rgba(23,28,38,0.55)">+ Enterprise licence</text>
|
||||
<rect class="cmp-bar" x="196" y="180" width="506" height="34" rx="3" fill="#4d5f79" />
|
||||
<text class="cmp-bar-value" x="712" y="202">$49,188</text>
|
||||
|
||||
<!-- scale ticks -->
|
||||
<g stroke="rgba(23,28,38,0.15)" stroke-width="1">
|
||||
<line x1="322" y1="20" x2="322" y2="230" />
|
||||
<line x1="448" y1="20" x2="448" y2="230" />
|
||||
<line x1="574" y1="20" x2="574" y2="230" />
|
||||
</g>
|
||||
</svg>
|
||||
<figcaption>
|
||||
Five-year totals at list price. Odoo Online and odoo.sh do not include your own time; ours
|
||||
carries no per-user licence.
|
||||
</figcaption>
|
||||
</figure>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Cost comparison -->
|
||||
<section class="section-dark" id="cost">
|
||||
<div class="container">
|
||||
<p class="section-kicker">The same table for everyone</p>
|
||||
<h2 class="section-title">What a ten-user business pays in a year</h2>
|
||||
<p class="cmp-lead" style="color: rgba(255, 255, 255, 0.72)">
|
||||
Our own price is in the same table as everyone else's.
|
||||
</p>
|
||||
<div class="cmp-table-wrap">
|
||||
<table class="cmp-table">
|
||||
<caption class="cmp-sr-only">
|
||||
Annual cost for a ten-user business by route, with what each figure covers.
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Route</th>
|
||||
<th scope="col">Per year (10 users)</th>
|
||||
<th scope="col">What the number covers</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row" class="is-us">ODOO4projects — Side Hustle</th>
|
||||
<td class="is-us"><strong>$214</strong></td>
|
||||
<td class="is-us">Managed Odoo Community hosting: server, backups, SSL, support. No per-user licence. No module installation on this plan.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row" class="is-us">ODOO4projects — On the Rise</th>
|
||||
<td class="is-us"><strong>$395</strong></td>
|
||||
<td class="is-us">The same, plus Git and one-click module installs.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Self-managed VPS</th>
|
||||
<td><strong>about $102</strong></td>
|
||||
<td>A rented OVH VPS-2 (4 vCores, 8 GB), VAT excluded. Odoo Community itself is free. Does not include any of the administration.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">odoo.sh</th>
|
||||
<td><strong>$9,837.60 at list price</strong> ($8,013.60 in year one)</td>
|
||||
<td>$693.60 hosting plus the Odoo Enterprise Custom licence at $76.20 per user per month at list ($61.00 in year one).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Odoo Online <span class="cmp-not-us">Not supported by us</span></th>
|
||||
<td><strong>$4,668 at list price</strong> ($3,732 in year one)</td>
|
||||
<td>Odoo Standard at $38.90 per user per month at list ($31.10 in year one). Odoo's apps, hosting and support included.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Own hardware</th>
|
||||
<td><strong>no verified total</strong></td>
|
||||
<td>A comparable single-tenant rented machine is €708 a year (Hetzner AX41, VAT excluded). The purchase price of a server, and its power, network and IT labour, are not verified, so we do not print a figure.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<ul class="cmp-cost-note">
|
||||
<li>
|
||||
Prices are list prices captured on 21 October 2026, in US dollars unless stated, VAT excluded.
|
||||
Vendors change prices. We will re-check every number before this page goes up for 2027.
|
||||
</li>
|
||||
<li>
|
||||
Odoo's $31.10 and $61.00 rates are twelve-month introductory discounts. The list rates are
|
||||
$38.90 and $76.20. Both are shown, because a reader in 2027 may be past the discount.
|
||||
</li>
|
||||
<li>The per-user prices are for a ten-user company. Ours carries no per-user licence, because Odoo Community has none.</li>
|
||||
<li>
|
||||
<strong>Odoo Online is cheaper than us for a business that only needs Odoo's standard apps.</strong>
|
||||
If that is you, it is the right answer and we are not.
|
||||
</li>
|
||||
<li>
|
||||
Five-year totals at list: Side Hustle $1,070, Odoo Online $23,340, odoo.sh $49,188. The last two
|
||||
do not include your time, and ours carries no per-user licence.
|
||||
</li>
|
||||
<li>Our Powerhouse and Empire plans are quoted on the plans page.</li>
|
||||
<li>
|
||||
Prices are from the vendors' own published pages (odoo.com/pricing, odoo.sh/pricing,
|
||||
ovhcloud.com, hetzner.com), so you can check every figure here yourself.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ -->
|
||||
<section class="section-light" id="faq">
|
||||
<div class="container">
|
||||
<p class="section-kicker">Straight answers</p>
|
||||
<h2 class="section-title">Questions the table raises</h2>
|
||||
<div class="cmp-faq-grid">
|
||||
<details class="cmp-faq">
|
||||
<summary>What does "five minutes" actually mean?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>Five minutes is the time to a running instance, not to a finished system. Putting your own customers, products and stock in is the first week's work, and it is the same week on any of the routes above.</p>
|
||||
</div>
|
||||
</details>
|
||||
<details class="cmp-faq">
|
||||
<summary>Do you support Odoo Online?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>No. Odoo Online runs Odoo's standard apps only and is incompatible with custom modules or modules from the Odoo Apps Store, so you cannot add an app that is not on Odoo's list. Upgrades are automatic and mandatory on Odoo's schedule. If Odoo's standard apps cover everything you will ever need, Odoo Online is the cheaper and simpler answer and we are not the right choice.</p>
|
||||
</div>
|
||||
</details>
|
||||
<details class="cmp-faq">
|
||||
<summary>Can I add my own apps or OCA modules?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>Odoo's own apps are all there on every plan. Custom and OCA modules install from On the Rise up, by Git or one click. Side Hustle has no module installation.</p>
|
||||
</div>
|
||||
</details>
|
||||
<details class="cmp-faq">
|
||||
<summary>Do I need an AI assistant to use ODOO4projects?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>No. We ship our MCP server directly in the apps, so an AI assistant such as Claude Code or Hermes can restart the server, upload a module, add a domain or read the log for you, and you never open a hosting panel. It is optional: the business works exactly the same without it.</p>
|
||||
</div>
|
||||
</details>
|
||||
<details class="cmp-faq">
|
||||
<summary>Can we move to Odoo Enterprise later?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>Yes. Bring your own Odoo Enterprise licence and keep the same instance. No migration.</p>
|
||||
</div>
|
||||
</details>
|
||||
<details class="cmp-faq">
|
||||
<summary>Is there a per-user licence?</summary>
|
||||
<div class="cmp-a">
|
||||
<p>No. Odoo Community has no per-user licence; our plans are one flat yearly price. Odoo Enterprise, if you bring it, is licensed per user by Odoo S.A.</p>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Final CTA -->
|
||||
<section class="section-dark cmp-cta" id="start">
|
||||
<div class="container">
|
||||
<p class="section-kicker">One login. One yearly price.</p>
|
||||
<h2 class="section-title">Your business in one system, on a server you never think about</h2>
|
||||
<p class="cmp-lead">
|
||||
Your stock, your orders, your invoices and who owes you money in one system, on a server you never
|
||||
have to think about. One login. One yearly price. No per-user licence.
|
||||
</p>
|
||||
<div class="cmp-cta-actions">
|
||||
<a href="index.html#trialCard" class="btn btn-brass btn-lg">Start the free trial</a>
|
||||
<a href="index.html#pricing" class="btn btn-outline btn-lg">See plans and pricing</a>
|
||||
</div>
|
||||
<p class="cmp-cta-answers">
|
||||
Prices on this page were captured on 21 October 2026 and are re-checked before 2027.
|
||||
</p>
|
||||
</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="index.html">Home</a></li>
|
||||
<li><a href="odoo-hosting-2027.html">Odoo hosting 2027</a></li>
|
||||
<li><a href="support.html">Support</a></li>
|
||||
<li><a href="legal.html">Legal</a></li>
|
||||
<li><a href="/support.html#contact">Contact us</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="cmp-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="cmp-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 © ODOO4projects LLC</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
+10
-14
@@ -20,7 +20,7 @@
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:linear-gradient(180deg,var(--bg),#eef2f8);min-height:100vh;display:flex;align-items:center;justify-content:center;padding:28px}
|
||||
|
||||
.app{width:960px;max-width:96vw;background:transparent;display:grid;grid-template-columns:320px 1fr;gap:20px}
|
||||
.app{width:1146px;max-width:96vw;background:transparent;display:grid;grid-template-columns:320px 1fr;gap:20px;align-items:stretch}
|
||||
|
||||
/* Left column - user list / details */
|
||||
.sidebar{background:linear-gradient(180deg,rgba(255,255,255,0.9),var(--card));border-radius:var(--radius);padding:20px;box-shadow:0 6px 20px rgba(24,39,75,0.06);overflow:hidden}
|
||||
@@ -55,17 +55,16 @@
|
||||
.sidebar .hint{margin-top:14px;padding:10px;border-radius:10px;background:#fbf8ff;color:#5b4160;font-size:13px}
|
||||
|
||||
/* Chat area */
|
||||
.chat-card{background:var(--card);border-radius:var(--radius);display:flex;flex-direction:column;height:70vh;box-shadow:0 10px 30px rgba(24,39,75,0.06);overflow:hidden}
|
||||
.chat-card{background:var(--card);border-radius:var(--radius);display:flex;flex-direction:column;height:100%;min-height:0;box-shadow:0 10px 30px rgba(24,39,75,0.06);overflow:hidden}
|
||||
.chat-header{display:flex;align-items:center;gap:12px;padding:18px;border-bottom:1px solid #eef1f6}
|
||||
.chat-header .title{font-weight:600;color:var(--odoo-dark)}
|
||||
.chat-header .sub{font-size:13px;color:var(--muted)}
|
||||
|
||||
.messages{flex:1;padding:22px;overflow:auto;background:linear-gradient(180deg,#fbfcff, #f7f9fc)}
|
||||
.messages{flex:1;min-height:0;padding:22px;overflow:auto;background:linear-gradient(180deg,#fbfcff, #f7f9fc)}
|
||||
.messages-inner{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:12px}
|
||||
|
||||
.msg{display:flex;gap:10px;align-items:flex-end}
|
||||
.msg.me{justify-content:flex-end}
|
||||
.bubble{max-width:68%;padding:12px 14px;border-radius:12px;background:white;border:1px solid #eef1f6;font-size:14px;color:#222}
|
||||
.msg{display:flex;gap:10px;align-items:flex-end;width:100%}
|
||||
.bubble{width:100%;max-width:100%;padding:12px 14px;border-radius:12px;background:white;border:1px solid #eef1f6;font-size:14px;color:#222}
|
||||
.bubble.me{background:linear-gradient(90deg,var(--odoo-purple),#9b6fa0);color:white;border:none}
|
||||
.meta-time{font-size:11px;color:var(--muted);margin-top:6px}
|
||||
|
||||
@@ -164,7 +163,7 @@ Please note: it does not cover general Odoo usage or functional questions.
|
||||
|
||||
<script>
|
||||
// Configuration - use your webhook
|
||||
const WEBHOOK = 'https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/702862fd-dd17-4a34-8efb-e9056d2c50df/chat';
|
||||
const WEBHOOK = 'https://n8n.odoo4projects.com/webhook/960d7f0f-d0ef-42a5-a8f1-79db6a7d70bd/chat';
|
||||
|
||||
const messagesEl = document.getElementById('messagesInner');
|
||||
const input = document.getElementById('messageInput');
|
||||
@@ -204,16 +203,13 @@ Please note: it does not cover general Odoo usage or functional questions.
|
||||
const col = document.createElement('div');
|
||||
col.style.display = 'flex';
|
||||
col.style.flexDirection = 'column';
|
||||
col.style.flex = '1';
|
||||
col.style.minWidth = '0';
|
||||
col.appendChild(bubble);
|
||||
col.appendChild(meta);
|
||||
|
||||
if(who==='me'){
|
||||
wrap.appendChild(col);
|
||||
wrap.appendChild(avatar);
|
||||
} else {
|
||||
wrap.appendChild(avatar);
|
||||
wrap.appendChild(col);
|
||||
}
|
||||
wrap.appendChild(avatar);
|
||||
wrap.appendChild(col);
|
||||
|
||||
messagesEl.appendChild(wrap);
|
||||
messagesEl.parentElement.scrollTop = messagesEl.parentElement.scrollHeight;
|
||||
|
||||
+48
-9
@@ -297,7 +297,7 @@
|
||||
<script>
|
||||
// ── Webhooks ─────────────────────────────────────────────────────────────
|
||||
const getContract_Webhook =
|
||||
"https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/0c8536be-d175-4740-8e78-123159193b23";
|
||||
"https://n8n.odoo4projects.com/webhook/ODOO4projects/upsell";
|
||||
|
||||
// ── Plan hierarchy (index = tier, lower = cheaper) ────────────────────────
|
||||
const PLAN_ORDER = [
|
||||
@@ -337,11 +337,46 @@
|
||||
|
||||
// ── Product ID mapping ─────────────────────────────────────────
|
||||
const PRODUCT_IDS = {
|
||||
sidehustle: 54,
|
||||
ontherise: 55,
|
||||
powerhouse: 56,
|
||||
sidehustle: 6,
|
||||
ontherise: 4,
|
||||
powerhouse: 5,
|
||||
};
|
||||
|
||||
// ── UTM tracking (source / medium / campaign) ─────────────────────────────
|
||||
const UTM_KEYS = ["source", "medium", "campaign"];
|
||||
|
||||
function getCookie(name) {
|
||||
const match = document.cookie.match(new RegExp("(^| )" + name + "=([^;]+)"));
|
||||
return match ? decodeURIComponent(match[2]) : null;
|
||||
}
|
||||
|
||||
function setCookie(name, value, days) {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||||
document.cookie =
|
||||
name + "=" + encodeURIComponent(value) +
|
||||
"; expires=" + date.toUTCString() +
|
||||
"; path=/; SameSite=Lax";
|
||||
}
|
||||
|
||||
UTM_KEYS.forEach(function (key) {
|
||||
const val = params.get("utm_" + key);
|
||||
if (val) setCookie("utm_" + key, val, 90);
|
||||
});
|
||||
|
||||
function appendUTM(form) {
|
||||
UTM_KEYS.forEach(function (key) {
|
||||
const val = getCookie("utm_" + key);
|
||||
if (val) {
|
||||
const input = document.createElement("input");
|
||||
input.type = "hidden";
|
||||
input.name = "utm_" + key;
|
||||
input.value = val;
|
||||
form.appendChild(input);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ── Buy handler ───────────────────────────────────────────────────────────
|
||||
function buyProduct(productId) {
|
||||
if (!uuid) {
|
||||
@@ -355,7 +390,7 @@
|
||||
}
|
||||
var form = document.createElement("form");
|
||||
form.method = "POST";
|
||||
form.action = window.location.origin + "/shop/post_basket";
|
||||
form.action = "https://20.odoo4projects.com/shop/post_basket";
|
||||
form.target = "_blank";
|
||||
form.style.display = "none";
|
||||
var basket = document.createElement("input");
|
||||
@@ -369,6 +404,7 @@
|
||||
clear.name = "clear";
|
||||
clear.value = "1";
|
||||
form.appendChild(clear);
|
||||
appendUTM(form);
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
document.body.removeChild(form);
|
||||
@@ -390,7 +426,7 @@
|
||||
const currentIdx = PLAN_ORDER.indexOf(contractName);
|
||||
if (currentIdx === -1) return; // unknown plan – leave defaults
|
||||
|
||||
const badgeLabel = expires ? "✅ " + expires : "✅";
|
||||
const badgeLabel = expires ? "✅ Expires " + expires : "✅";
|
||||
|
||||
PLAN_ORDER.forEach(function (plan, idx) {
|
||||
var meta = PLAN_META[plan];
|
||||
@@ -432,12 +468,15 @@
|
||||
if (!res.ok) throw new Error("HTTP " + res.status);
|
||||
|
||||
const payload = await res.json();
|
||||
// Webhook returns: [{ "expires": "YYYY-MM-DD", "contractName": "Trial" }]
|
||||
// Webhook returns: { "expires": "YYYY-MM-DD", "contractName": "Trial" }
|
||||
// (tolerate an array wrapper and snake_case keys as well)
|
||||
const record = Array.isArray(payload)
|
||||
? payload[0]
|
||||
: payload;
|
||||
if (record && record.contract_name) {
|
||||
applyPlanState(record.contract_name, record.expires);
|
||||
const contractName =
|
||||
record && (record.contractName || record.contract_name);
|
||||
if (contractName) {
|
||||
applyPlanState(contractName, record.expires);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Could not load contract data:", err);
|
||||
|
||||
@@ -6,6 +6,120 @@ var si = 0,
|
||||
autoStop = false,
|
||||
autoInterval = 7000;
|
||||
|
||||
/* ---- UTM tracking helpers ---- */
|
||||
(function () {
|
||||
function getCookie(name) {
|
||||
var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
||||
return match ? decodeURIComponent(match[2]) : null;
|
||||
}
|
||||
|
||||
function setCookie(name, value, days) {
|
||||
var expires = '';
|
||||
if (days) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
||||
expires = '; expires=' + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/; SameSite=Lax';
|
||||
}
|
||||
|
||||
function parseUTM() {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
var utm = {};
|
||||
var keys = ['source', 'medium', 'campaign'];
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var val = urlParams.get('utm_' + keys[i]);
|
||||
if (val) {
|
||||
utm[keys[i]] = val;
|
||||
setCookie('utm_' + keys[i], val, 90);
|
||||
}
|
||||
}
|
||||
return utm;
|
||||
}
|
||||
|
||||
function getStoredUTM() {
|
||||
var utm = {};
|
||||
var keys = ['source', 'medium', 'campaign'];
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var val = getCookie('utm_' + keys[i]);
|
||||
if (val) utm[keys[i]] = val;
|
||||
}
|
||||
return utm;
|
||||
}
|
||||
|
||||
function injectUTM(data) {
|
||||
var stored = getStoredUTM();
|
||||
if (Object.keys(stored).length > 0) {
|
||||
data.utm_source = stored.source || null;
|
||||
data.utm_medium = stored.medium || null;
|
||||
data.utm_campaign = stored.campaign || null;
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
function appendToForm(form) {
|
||||
var stored = getStoredUTM();
|
||||
var keys = ['source', 'medium', 'campaign'];
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
if (stored[keys[i]]) {
|
||||
var input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = 'utm_' + keys[i];
|
||||
input.value = stored[keys[i]];
|
||||
form.appendChild(input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function toQuery() {
|
||||
var stored = getStoredUTM();
|
||||
var parts = [];
|
||||
var keys = ['source', 'medium', 'campaign'];
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
if (stored[keys[i]]) {
|
||||
parts.push('utm_' + keys[i] + '=' + encodeURIComponent(stored[keys[i]]));
|
||||
}
|
||||
}
|
||||
return parts.join('&');
|
||||
}
|
||||
|
||||
window.UTM = { parse: parseUTM, getStored: getStoredUTM, inject: injectUTM, appendToForm: appendToForm, toQuery: toQuery };
|
||||
window.UTM.parse(); // Parse on page load
|
||||
})();
|
||||
|
||||
/* ---- Spinning Up Widget (shown when ?message=spinning_up) ---- */
|
||||
(function () {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
if (urlParams.get('message') === 'spinning_up') {
|
||||
var el = document.getElementById('spinningUp');
|
||||
if (el) el.style.display = 'block';
|
||||
}
|
||||
})();
|
||||
|
||||
/* ---- Hero confirmation notice (shown when ?confirm=...) ---- */
|
||||
(function () {
|
||||
var message = new URLSearchParams(window.location.search).get('confirm');
|
||||
if (!message || !message.trim()) return;
|
||||
|
||||
var notice = document.getElementById('heroConfirmNotice');
|
||||
if (!notice) return;
|
||||
|
||||
var text = notice.querySelector('.hero-notice-text');
|
||||
var close = notice.querySelector('.hero-notice-close');
|
||||
var hero = notice.closest('.hero');
|
||||
|
||||
text.textContent = message.trim();
|
||||
notice.hidden = false;
|
||||
if (hero) hero.classList.add('has-hero-notice');
|
||||
|
||||
if (close) {
|
||||
close.addEventListener('click', function () {
|
||||
notice.hidden = true;
|
||||
if (hero) hero.classList.remove('has-hero-notice');
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
||||
if (slides.length > 0 && dots.length > 0) {
|
||||
function show(i, direction) {
|
||||
if (direction === undefined) return;
|
||||
@@ -132,13 +246,15 @@ var si = 0,
|
||||
yearlySave.style.display = "block";
|
||||
var buyBtn = document.getElementById("orderBuyBtn");
|
||||
var loc = document.getElementById("orderServerLocation").value;
|
||||
var utmQuery = UTM.toQuery();
|
||||
buyBtn.href =
|
||||
"/3/" +
|
||||
price.toFixed(2) +
|
||||
"/4/" +
|
||||
encodeURIComponent(plan) +
|
||||
"?location=" +
|
||||
encodeURIComponent(loc);
|
||||
encodeURIComponent(loc) +
|
||||
(utmQuery ? "&" + utmQuery : "");
|
||||
widget.style.display = "flex";
|
||||
orderPopupShown = true;
|
||||
}
|
||||
@@ -169,13 +285,15 @@ var si = 0,
|
||||
.trim();
|
||||
var price = parseFloat(priceText);
|
||||
var loc = this.value;
|
||||
var utmQuery = UTM.toQuery();
|
||||
document.getElementById("orderBuyBtn").href =
|
||||
"/3/" +
|
||||
price.toFixed(2) +
|
||||
"/4/" +
|
||||
encodeURIComponent(plan) +
|
||||
"?location=" +
|
||||
encodeURIComponent(loc);
|
||||
encodeURIComponent(loc) +
|
||||
(utmQuery ? "&" + utmQuery : "");
|
||||
});
|
||||
function applyCoupon() {
|
||||
var input = document.getElementById("orderCouponInput");
|
||||
@@ -443,7 +561,9 @@ var si = 0,
|
||||
if (el) {
|
||||
SERVERS.forEach(function(s) {
|
||||
var opt = document.createElement('option');
|
||||
opt.value = s.host;
|
||||
// Extract city from host: api.saopaulo.odoo4projects.com -> saopaulo
|
||||
var cityVal = s.host.replace('api.', '').replace('.odoo4projects.com', '');
|
||||
opt.value = cityVal;
|
||||
opt.textContent = s.city;
|
||||
el.appendChild(opt);
|
||||
});
|
||||
@@ -464,8 +584,9 @@ var si = 0,
|
||||
if (bestServer) {
|
||||
[trialLoc, pricingLoc].forEach(function(el) {
|
||||
if (el) {
|
||||
var cityVal = bestServer.host.replace('api.', '').replace('.odoo4projects.com', '');
|
||||
for (var i = 0; i < el.options.length; i++) {
|
||||
if (el.options[i].value === bestServer.host) {
|
||||
if (el.options[i].value === cityVal) {
|
||||
el.selectedIndex = i;
|
||||
break;
|
||||
}
|
||||
@@ -502,10 +623,10 @@ var si = 0,
|
||||
var btn = trialForm.querySelector('.btn-brass');
|
||||
btn.textContent = 'Sending...';
|
||||
btn.disabled = true;
|
||||
fetch('https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c25169c6-4234-4b47-8e74-612b9539da0a', {
|
||||
fetch('https://n8n.odoo4projects.com/webhook/ODOO4projects/trial', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ email: email, location: location })
|
||||
body: JSON.stringify(UTM.inject({ email: email, location: location }))
|
||||
}).then(function() {
|
||||
trialForm.style.display = 'none';
|
||||
document.getElementById('trialSuccess').classList.add('visible');
|
||||
@@ -609,7 +730,7 @@ var si = 0,
|
||||
fetch('https://n8n.odoo4projects.com/webhook/bring-your-business', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
body: JSON.stringify(UTM.inject({
|
||||
email: email,
|
||||
description: description,
|
||||
goals: goals,
|
||||
@@ -617,7 +738,7 @@ var si = 0,
|
||||
has_homepage: hasHomepage,
|
||||
uses_odoo: usesOdoo,
|
||||
has_developer: hasDeveloper
|
||||
})
|
||||
}))
|
||||
}).catch(function () { /* ignore */ });
|
||||
|
||||
/* Show success message — we'll email the report */
|
||||
@@ -634,7 +755,7 @@ var si = 0,
|
||||
var version = verSelect ? verSelect.value : '';
|
||||
var form = document.createElement('form');
|
||||
form.method = 'POST';
|
||||
form.action = 'https://odoo.odoo4projects.com/shop/post_basket';
|
||||
form.action = 'https://20.odoo4projects.com/shop/post_basket';
|
||||
form.target = '_blank';
|
||||
form.style.display = 'none';
|
||||
var basket = document.createElement('input');
|
||||
@@ -652,6 +773,7 @@ var si = 0,
|
||||
clear.name = 'clear';
|
||||
clear.value = '1';
|
||||
form.appendChild(clear);
|
||||
UTM.appendToForm(form);
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
document.body.removeChild(form);
|
||||
@@ -729,10 +851,123 @@ var si = 0,
|
||||
|
||||
document.querySelectorAll('.btn-empire').forEach(function(btn) {
|
||||
btn.addEventListener('click', function() {
|
||||
var plan = this.getAttribute('data-plan');
|
||||
var price = parseFloat(this.getAttribute('data-price'));
|
||||
var isEmpire = this.getAttribute('data-is-empire') === 'true';
|
||||
if (plan) openOrderWidget(plan, price, isEmpire);
|
||||
openCustomQuoteModal();
|
||||
});
|
||||
});
|
||||
|
||||
/* ---- Custom Quote Modal ---- */
|
||||
function openCustomQuoteModal() {
|
||||
document.getElementById('customQuotePanel').style.display = 'block';
|
||||
document.getElementById('customQuoteModal').style.display = 'flex';
|
||||
}
|
||||
function closeCustomQuoteModal() {
|
||||
document.getElementById('customQuoteModal').style.display = 'none';
|
||||
document.getElementById('customQuoteForm').reset();
|
||||
document.getElementById('customQuoteSuccess').style.display = 'none';
|
||||
}
|
||||
/* Expose to global scope so the inline onclick handlers in the modal markup can reach them */
|
||||
window.openCustomQuoteModal = openCustomQuoteModal;
|
||||
window.closeCustomQuoteModal = closeCustomQuoteModal;
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape') {
|
||||
var modal = document.getElementById('customQuoteModal');
|
||||
if (modal && modal.style.display === 'flex') {
|
||||
closeCustomQuoteModal();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/* Submit custom quote form */
|
||||
var customQuoteForm = document.getElementById('customQuoteForm');
|
||||
if (customQuoteForm) {
|
||||
customQuoteForm.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
var name = document.getElementById('cqName').value.trim();
|
||||
var email = document.getElementById('cqEmail').value.trim();
|
||||
var requirements = document.getElementById('cqRequirements').value.trim();
|
||||
|
||||
if (!name || !email || !requirements) return;
|
||||
|
||||
var submitBtn = customQuoteForm.querySelector('.btn-lg');
|
||||
submitBtn.textContent = 'Sending...';
|
||||
submitBtn.disabled = true;
|
||||
|
||||
fetch('https://n8n.odoo4projects.com/webhook/ODOO4projects/crm', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(UTM.inject({
|
||||
name: name,
|
||||
email: email,
|
||||
requirements: requirements,
|
||||
area: 'quote'
|
||||
}))
|
||||
}).then(function(r) {
|
||||
if (!r.ok) throw new Error('bad status ' + r.status);
|
||||
customQuoteForm.style.display = 'none';
|
||||
document.getElementById('customQuoteSuccess').style.display = 'block';
|
||||
submitBtn.textContent = 'Submit Request';
|
||||
submitBtn.disabled = false;
|
||||
}).catch(function() {
|
||||
submitBtn.textContent = 'Submit Request';
|
||||
submitBtn.disabled = false;
|
||||
var errorMsg = document.createElement('div');
|
||||
errorMsg.style.marginTop = '1rem';
|
||||
errorMsg.style.color = '#dc3545';
|
||||
errorMsg.textContent = 'Something went wrong. Please try again.';
|
||||
customQuoteForm.appendChild(errorMsg);
|
||||
setTimeout(function() { if(errorMsg.parentNode) errorMsg.parentNode.removeChild(errorMsg); }, 3000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/* Attach "Get Custom Quote" click handlers to Empire buttons */
|
||||
document.querySelectorAll('.btn-empire').forEach(function(btn) {
|
||||
btn.addEventListener('click', function() {
|
||||
openCustomQuoteModal();
|
||||
});
|
||||
});
|
||||
})();
|
||||
|
||||
/* ---- Footer contact form ---- */
|
||||
(function () {
|
||||
var form = document.getElementById('footerContactForm');
|
||||
if (!form) return;
|
||||
var emailInput = document.getElementById('footerContactEmail');
|
||||
var textInput = document.getElementById('footerContactText');
|
||||
var submitBtn = form.querySelector('.footer-send-btn');
|
||||
var status = document.getElementById('footerFormStatus');
|
||||
|
||||
function showStatus(message, isError) {
|
||||
status.textContent = message;
|
||||
status.classList.toggle('error', !!isError);
|
||||
status.classList.add('visible');
|
||||
}
|
||||
|
||||
form.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
var email = emailInput.value.trim();
|
||||
var text = textInput.value.trim();
|
||||
if (!email || !text) return;
|
||||
|
||||
submitBtn.disabled = true;
|
||||
status.classList.remove('visible');
|
||||
|
||||
fetch('https://n8n.odoo4projects.com/webhook/ODOO4projects/crm', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(UTM.inject({
|
||||
email: email,
|
||||
requirements: text,
|
||||
area: 'message'
|
||||
}))
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error('bad status ' + r.status);
|
||||
form.reset();
|
||||
submitBtn.disabled = false;
|
||||
showStatus("Thanks! We'll get back to you shortly.", false);
|
||||
}).catch(function () {
|
||||
submitBtn.disabled = false;
|
||||
showStatus('Something went wrong. Please try again.', true);
|
||||
});
|
||||
});
|
||||
})();
|
||||
+15
-9
@@ -1,55 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/</loc>
|
||||
<loc>https://odoo4projects.com/</loc>
|
||||
<lastmod>2026-06-24</lastmod>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/news-platform-update.html</loc>
|
||||
<loc>https://odoo4projects.com/odoo-hosting-2027.html</loc>
|
||||
<lastmod>2026-10-21</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.9</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://odoo4projects.com/blog/posts/news-platform-update.html</loc>
|
||||
<lastmod>2026-06-24</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/guide-migrate-enterprise.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/guide-migrate-enterprise.html</loc>
|
||||
<lastmod>2026-06-20</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/howto-custom-module.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/howto-custom-module.html</loc>
|
||||
<lastmod>2026-06-17</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/news-official-partner.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/news-official-partner.html</loc>
|
||||
<lastmod>2026-06-14</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/speed-run-backup.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/speed-run-backup.html</loc>
|
||||
<lastmod>2026-06-10</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/howto-ai-automation.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/howto-ai-automation.html</loc>
|
||||
<lastmod>2026-06-06</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/speed-run-deploy.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/speed-run-deploy.html</loc>
|
||||
<lastmod>2026-06-02</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://ODOO4projects.com/blog/posts/my-first-post.html</loc>
|
||||
<loc>https://odoo4projects.com/blog/posts/my-first-post.html</loc>
|
||||
<lastmod>2026-05-28</lastmod>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
const baseUrl = '/static/agent-odoo4projects';
|
||||
const config = {
|
||||
cssUrl: `${baseUrl}/agent.css`, // CSS file
|
||||
api: `https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/702862fd-dd17-4a34-8efb-e9056d2c50df/chat`, // Backend webhook endpoint
|
||||
api: `https://n8n.odoo4projects.com/webhook/960d7f0f-d0ef-42a5-a8f1-79db6a7d70bd/chat`, // Backend webhook endpoint
|
||||
buttonImage: `${baseUrl}/images/4.svg`, // Chat toggle button image
|
||||
logoImage: `${baseUrl}/images/logo.svg`, // Logo image for chat widget
|
||||
preamble: '🤔 This is the ODOO4Projects sales agent 🛠️. Besides Sales, he can help revert module installations or restart your server using your UUID and a confirmation email. 📬 For human follow-up, leave your email.' // Initial bot message
|
||||
|
||||
@@ -663,7 +663,7 @@ img { max-width: 100%; height: auto; vertical-align: middle; }
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.ow-close:hover { background: var(--cream); color: var(--ink); }
|
||||
.ow-content { padding: 2rem; }
|
||||
.ow-content { padding: 2rem; color: var(--ink); }
|
||||
.ow-title { font-family: Marcellus, Georgia, serif; font-size: clamp(1rem, 2vw, 1.24rem); margin-bottom: 0.5rem; color: var(--midnight); }
|
||||
.ow-price { font-size: 0.85rem; color: var(--ink-soft); margin-bottom: 1rem; }
|
||||
.ow-price .ow-price-amount { font-size: 1rem; font-weight: 600; color: var(--midnight); }
|
||||
@@ -920,23 +920,76 @@ img { max-width: 100%; height: auto; vertical-align: middle; }
|
||||
}
|
||||
.fcopy a { color: rgba(255,255,255,0.4); }
|
||||
.fcopy a:hover { color: var(--brass); }
|
||||
.footer-email {
|
||||
display: inline-block;
|
||||
margin-top: 0.75rem;
|
||||
padding: 0.5rem 0.8rem;
|
||||
background: rgba(201,162,39,0.08);
|
||||
border: 1px solid rgba(201,162,39,0.25);
|
||||
.footer-contact-form {
|
||||
margin-top: 1.25rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.6rem;
|
||||
}
|
||||
.footer-contact-form input[type="email"],
|
||||
.footer-contact-form textarea {
|
||||
width: 100%;
|
||||
padding: 0.6rem 0.8rem;
|
||||
border-radius: var(--radius);
|
||||
color: var(--brass);
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 0.85rem;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.footer-email:hover {
|
||||
background: rgba(201,162,39,0.12);
|
||||
border-color: var(--brass);
|
||||
border: 1px solid var(--line-brass);
|
||||
background: rgba(255,255,255,0.06);
|
||||
color: #fff;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.6;
|
||||
outline: none;
|
||||
box-sizing: border-box;
|
||||
transition: border-color 0.2s, background 0.2s;
|
||||
}
|
||||
.footer-contact-form input[type="email"]:focus,
|
||||
.footer-contact-form textarea:focus {
|
||||
border-color: var(--brass);
|
||||
background: rgba(255,255,255,0.1);
|
||||
}
|
||||
.footer-contact-form input[type="email"]::placeholder,
|
||||
.footer-contact-form textarea::placeholder {
|
||||
color: rgba(255,255,255,0.3);
|
||||
}
|
||||
.footer-textarea-wrap { position: relative; }
|
||||
.footer-contact-form textarea {
|
||||
min-height: 84px;
|
||||
padding-right: 2.6rem;
|
||||
resize: vertical;
|
||||
}
|
||||
.footer-send-btn {
|
||||
position: absolute;
|
||||
right: 0.45rem;
|
||||
bottom: 0.45rem;
|
||||
width: 1.9rem;
|
||||
height: 1.9rem;
|
||||
border: none;
|
||||
border-radius: 50%;
|
||||
background: var(--brass);
|
||||
color: var(--midnight);
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 0.72rem;
|
||||
transition: background 0.2s, transform 0.2s;
|
||||
}
|
||||
.footer-send-btn:hover {
|
||||
background: var(--brass-bright);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
.footer-send-btn:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: default;
|
||||
transform: none;
|
||||
}
|
||||
.footer-form-status {
|
||||
font-size: 0.82rem;
|
||||
line-height: 1.4;
|
||||
color: #4ade80;
|
||||
display: none;
|
||||
}
|
||||
.footer-form-status.visible { display: block; }
|
||||
.footer-form-status.error { color: #ef4444; }
|
||||
@media (max-width: 768px) {
|
||||
.fgrid { grid-template-columns: 1fr; }
|
||||
.footer { padding-top: 2.5rem; padding-bottom: 5rem; }
|
||||
@@ -969,4 +1022,38 @@ img { max-width: 100%; height: auto; vertical-align: middle; }
|
||||
.blog-section-dark .blog-badge-guide { background: #a78bfa; }
|
||||
.blog-section-dark .blog-badge-howto { background: #00f5ff; }
|
||||
.blog-section-dark .blog-badge-news { background: #ffaa00; }
|
||||
.blog-section-dark .blog-badge-default { background: #a78bfa; }
|
||||
.blog-section-dark .blog-badge-default { background: #a78bfa; }
|
||||
|
||||
/* ---- Spinning Up Widget ---- */
|
||||
.spinning-up {
|
||||
background: #0d1b2e;
|
||||
padding: 3rem 0;
|
||||
text-align: center;
|
||||
}
|
||||
.spinning-card {
|
||||
display: inline-block;
|
||||
background: rgba(201,162,39,0.08);
|
||||
border: 1px solid rgba(201,162,39,0.25);
|
||||
border-radius: var(--radius-lg);
|
||||
padding: 2rem;
|
||||
max-width: 600px;
|
||||
}
|
||||
.spinning-card i {
|
||||
color: var(--brass);
|
||||
font-size: 3rem;
|
||||
margin-bottom: 1.25rem;
|
||||
display: block;
|
||||
}
|
||||
.spinning-card h3 {
|
||||
color: #fff;
|
||||
font-size: 1.6rem;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
.spinning-card p {
|
||||
color: rgba(255,255,255,0.7);
|
||||
margin: 0 0 0.75rem 0;
|
||||
}
|
||||
.spinning-note {
|
||||
font-size: 0.9rem;
|
||||
color: var(--brass);
|
||||
}
|
||||
+19
-12
@@ -8,11 +8,11 @@
|
||||
content="Support and FAQ for ODOO4projects hosting. Get help with your Odoo instance, modules, backups, domains, and more."
|
||||
/>
|
||||
<title>Support | ODOO4projects</title>
|
||||
<link rel="canonical" href="https://ODOO4projects.com/support" />
|
||||
<link rel="canonical" href="https://ODOO4projects.com/support.html" />
|
||||
<meta property="og:title" content="Support | ODOO4projects" />
|
||||
<meta property="og:description" content="Support and FAQ for ODOO4projects hosting." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://ODOO4projects.com/support" />
|
||||
<meta property="og:url" content="https://ODOO4projects.com/support.html" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<link rel="icon" href="images/favicon.ico" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
@@ -474,8 +474,7 @@
|
||||
<section class="contact-section" id="contact">
|
||||
<div class="container">
|
||||
<h2>Still questions? Contact our support.</h2>
|
||||
<form class="contact-form" id="supportForm" action="https://ODOO4projects.com/website/form/" method="POST" enctype="multipart/form-data">
|
||||
<input type="hidden" name="csrf_token" id="csrfToken" value="" />
|
||||
<form class="contact-form" id="supportForm">
|
||||
<div class="form-group">
|
||||
<label>Your Name <span class="required">*</span></label>
|
||||
<input type="text" id="contactName" name="contact_name" required placeholder="Your Name" />
|
||||
@@ -528,23 +527,31 @@
|
||||
var form = document.getElementById("supportForm");
|
||||
var submitBtn = form.querySelector(".btn");
|
||||
var successDiv = document.getElementById("formSuccess");
|
||||
fetch("https://ODOO4projects.com/web/csrf_token")
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (data) {
|
||||
document.getElementById("csrfToken").value = data.result || data.csrf_token || "";
|
||||
}).catch(function () {});
|
||||
form.addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
var name = document.getElementById("contactName").value.trim();
|
||||
var email = document.getElementById("contactEmail").value.trim();
|
||||
var uuid = document.getElementById("contactUuid").value.trim();
|
||||
var subject = document.getElementById("contactSubject").value.trim();
|
||||
var question = document.getElementById("contactQuestion").value.trim();
|
||||
if (!name || !email || !subject || !question) { alert("Please fill in all required fields."); return; }
|
||||
submitBtn.disabled = true;
|
||||
submitBtn.textContent = "Submitting...";
|
||||
fetch(form.action, { method: "POST", body: new FormData(form) })
|
||||
.then(function () { submitBtn.style.display = "none"; successDiv.classList.add("visible"); })
|
||||
.catch(function () { submitBtn.disabled = false; submitBtn.textContent = "Submit"; alert("Could not submit. Please try again."); });
|
||||
var payload = { name: name, email: email, subject: subject, requirements: question, area: "support" };
|
||||
if (uuid) payload.uuid = uuid;
|
||||
fetch("https://n8n.odoo4projects.com/webhook/ODOO4projects/crm", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify(payload)
|
||||
}).then(function (r) {
|
||||
if (!r.ok) throw new Error("bad status " + r.status);
|
||||
submitBtn.style.display = "none";
|
||||
successDiv.classList.add("visible");
|
||||
}).catch(function () {
|
||||
submitBtn.disabled = false;
|
||||
submitBtn.textContent = "Submit";
|
||||
alert("Could not submit. Please try again.");
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
Reference in new issue
Block a user