blog
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"posts": [
|
||||
{
|
||||
"id": "news-platform-update",
|
||||
"date": "2026-06-24",
|
||||
"area": "news",
|
||||
"headline": "Platform Update: New Dashboard, Faster Backups & Smarter Monitoring",
|
||||
"teaser": "We've rolled out a major platform update with a redesigned dashboard, incremental backups, and AI-powered uptime monitoring.",
|
||||
"link": "blog/posts/news-platform-update.html"
|
||||
},
|
||||
{
|
||||
"id": "guide-migrate-enterprise",
|
||||
"date": "2026-06-20",
|
||||
"area": "guide",
|
||||
"headline": "How to Migrate from Odoo Community to Enterprise Without Downtime",
|
||||
"teaser": "A step-by-step guide to migrating your Odoo CE instance to Enterprise edition with zero downtime and full data integrity.",
|
||||
"link": "blog/posts/guide-migrate-enterprise.html"
|
||||
},
|
||||
{
|
||||
"id": "howto-custom-module",
|
||||
"date": "2026-06-17",
|
||||
"area": "howto",
|
||||
"headline": "Install Custom Odoo Modules via Git – A Practical How-To",
|
||||
"teaser": "Learn how to install and manage custom Odoo modules directly from Git repositories on your ODOO4projects instance.",
|
||||
"link": "blog/posts/howto-custom-module.html"
|
||||
},
|
||||
{
|
||||
"id": "news-official-partner",
|
||||
"date": "2026-06-14",
|
||||
"area": "news",
|
||||
"headline": "ODOO4projects Becomes an Official Odoo Ready Partner",
|
||||
"teaser": "We're thrilled to announce our official partnership with Odoo SA, bringing enterprise-grade hosting to even more businesses.",
|
||||
"link": "blog/posts/news-official-partner.html"
|
||||
},
|
||||
{
|
||||
"id": "speed-run-backup",
|
||||
"date": "2026-06-10",
|
||||
"area": "speed-run",
|
||||
"headline": "Set Up Automated Backups in Under 2 Minutes",
|
||||
"teaser": "Protect your Odoo data in moments. This speed-run walks you through enabling automated daily backups with one click.",
|
||||
"link": "blog/posts/speed-run-backup.html"
|
||||
},
|
||||
{
|
||||
"id": "howto-ai-automation",
|
||||
"date": "2026-06-06",
|
||||
"area": "howto",
|
||||
"headline": "Build AI-Powered Workflows with Odoo & n8n",
|
||||
"teaser": "Connect Odoo to AI services and automate repetitive tasks using n8n workflows. A hands-on guide for busy operators.",
|
||||
"link": "blog/posts/howto-ai-automation.html"
|
||||
},
|
||||
{
|
||||
"id": "speed-run-deploy",
|
||||
"date": "2026-06-02",
|
||||
"area": "speed-run",
|
||||
"headline": "Deploy Your First Odoo Instance in 5 Minutes",
|
||||
"teaser": "From zero to live Odoo instance in under five minutes. Follow this speed-run and see your business apps running instantly.",
|
||||
"link": "blog/posts/speed-run-deploy.html"
|
||||
},
|
||||
{
|
||||
"id": "my-first-post",
|
||||
"date": "2026-05-28",
|
||||
"area": "guide",
|
||||
"headline": "Getting Started with Odoo Hosting – What You Need to Know",
|
||||
"teaser": "New to Odoo hosting? This guide covers everything from choosing a plan to configuring your first domain and SSL.",
|
||||
"link": "blog/posts/my-first-post.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
How to Migrate from Odoo Community to Enterprise Without Downtime |
|
||||
ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="A step-by-step guide to migrating your Odoo CE instance to Enterprise edition with zero downtime and full data integrity."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/guide-migrate-enterprise.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="How to Migrate from Odoo Community to Enterprise Without Downtime"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="A step-by-step guide to migrating your Odoo CE instance to Enterprise edition with zero downtime and full data integrity."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
How to Migrate from Odoo Community to Enterprise Without
|
||||
Downtime
|
||||
</h1>
|
||||
<div class="post-meta">June 20, 2026 · Guide</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
Migrating from Odoo Community Edition (CE) to Enterprise
|
||||
Edition (EE) unlocks advanced features like the Studio,
|
||||
extra apps, and priority support. The key concern for
|
||||
most businesses:
|
||||
<strong>can we do this without downtime?</strong>
|
||||
</p>
|
||||
<p>Yes — and here's exactly how.</p>
|
||||
<h2>Prerequisites</h2>
|
||||
<ul>
|
||||
<li>An active Odoo Enterprise subscription key</li>
|
||||
<li>A full database backup of your CE instance</li>
|
||||
<li>Your ODOO4projects Powerhouse plan (or higher)</li>
|
||||
</ul>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> Always take a backup before
|
||||
any migration. On ODOO4projects, you can create a manual
|
||||
backup from your dashboard in one click.
|
||||
</div>
|
||||
<h2>Step 1: Provision an Enterprise-Ready Instance</h2>
|
||||
<p>
|
||||
If you're on a Powerhouse plan, your instance is already
|
||||
Enterprise-ready. Log in to your dashboard and toggle
|
||||
the Enterprise flag. The system will prepare a new
|
||||
environment with the Enterprise codebase.
|
||||
</p>
|
||||
<h2>Step 2: Restore Your Data</h2>
|
||||
<p>
|
||||
Upload your CE backup to the new Enterprise instance via
|
||||
the Odoo database management screen. All your data,
|
||||
workflows, and customizations will be preserved.
|
||||
</p>
|
||||
<pre><code>1. Navigate to: https://your-instance.odooprojects.com/web/database/manager
|
||||
2. Click "Restore Database"
|
||||
3. Select your backup file
|
||||
4. Confirm and wait for completion</code></pre>
|
||||
<h2>Step 3: Validate and Go Live</h2>
|
||||
<p>
|
||||
Once restored, validate that all modules are working as
|
||||
expected. Then update your DNS to point to the new
|
||||
instance. With proper planning, the cutover takes under
|
||||
5 minutes.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Ready to Go Enterprise?</h3>
|
||||
<p>
|
||||
Upgrade to Powerhouse and unlock Enterprise features
|
||||
today.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>View Powerhouse Plan</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,233 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Build AI-Powered Workflows with Odoo & n8n | ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Connect Odoo to AI services and automate repetitive tasks using n8n workflows. A hands-on guide for busy operators."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/howto-ai-automation.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Build AI-Powered Workflows with Odoo & n8n"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Connect Odoo to AI services and automate repetitive tasks using n8n workflows. A hands-on guide for busy operators."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Build AI-Powered Workflows with Odoo & n8n
|
||||
</h1>
|
||||
<div class="post-meta">June 6, 2026 · How-To</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
Combining Odoo's business management capabilities with
|
||||
AI services unlocks powerful automation. With n8n
|
||||
running alongside your ODOO4projects instance, you can
|
||||
build intelligent workflows that save hours every day.
|
||||
</p>
|
||||
<h2>What You'll Need</h2>
|
||||
<ul>
|
||||
<li>An ODOO4projects instance (any plan)</li>
|
||||
<li>An n8n instance (self-hosted or cloud)</li>
|
||||
<li>
|
||||
API keys for your AI service (OpenAI, Anthropic,
|
||||
etc.)
|
||||
</li>
|
||||
</ul>
|
||||
<h2>Example: AI-Powered Lead Scoring</h2>
|
||||
<p>
|
||||
Create an n8n workflow that triggers whenever a new lead
|
||||
is created in Odoo CRM. The workflow sends the lead data
|
||||
to an AI model for scoring and enrichment, then updates
|
||||
the lead record with the results.
|
||||
</p>
|
||||
<pre><code>1. Trigger: New Lead in Odoo CRM
|
||||
2. Action: Send lead data to GPT-4 for scoring
|
||||
3. Action: Enrich with company info from web search
|
||||
4. Action: Update lead priority in Odoo
|
||||
5. Action: Notify sales team via Slack</code></pre>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> Use ODOO4projects' n8n
|
||||
integration channel for a pre-built connection template.
|
||||
It handles authentication, rate limiting, and error
|
||||
logging out of the box.
|
||||
</div>
|
||||
<h2>Deploy in Minutes</h2>
|
||||
<p>
|
||||
With ODOO4projects, you can deploy n8n alongside your
|
||||
Odoo instance with a single click. No complex networking
|
||||
or security configuration needed — everything is
|
||||
pre-configured.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Automate Your Business Today</h3>
|
||||
<p>Combine Odoo with AI and n8n on ODOO4projects.</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>Get Started</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,232 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Install Custom Odoo Modules via Git – A Practical How-To |
|
||||
ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Learn how to install and manage custom Odoo modules directly from Git repositories on your ODOO4projects instance."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/howto-custom-module.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Install Custom Odoo Modules via Git – A Practical How-To"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Learn how to install and manage custom Odoo modules directly from Git repositories on your ODOO4projects instance."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Install Custom Odoo Modules via Git – A Practical
|
||||
How-To
|
||||
</h1>
|
||||
<div class="post-meta">June 17, 2026 · How-To</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
One of the most powerful features of Odoo is its modular
|
||||
architecture. With ODOO4projects' On the Rise plan and
|
||||
above, you can install custom modules directly from Git
|
||||
repositories. Here's how.
|
||||
</p>
|
||||
<h2>Step 1: Connect Your Git Repository</h2>
|
||||
<p>
|
||||
From your dashboard, navigate to the
|
||||
<strong>Modules</strong> tab and click
|
||||
<strong>Connect Git Repo</strong>. Enter your repository
|
||||
URL and authentication credentials if required. We
|
||||
support GitHub, GitLab, and Bitbucket.
|
||||
</p>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> Use a private repository with
|
||||
a deploy token for secure, automated access. Never store
|
||||
personal access tokens in your Odoo configuration files.
|
||||
</div>
|
||||
<h2>Step 2: Deploy the Module</h2>
|
||||
<p>
|
||||
Once connected, select the module from the list and
|
||||
click <strong>Deploy</strong>. The system will clone the
|
||||
repository, install any dependencies, and make the
|
||||
module available in your Odoo apps list.
|
||||
</p>
|
||||
<pre><code>git clone https://github.com/your-org/odoo-custom-module.git
|
||||
# ODOO4projects handles the rest automatically</code></pre>
|
||||
<h2>Step 3: Install in Odoo</h2>
|
||||
<p>
|
||||
Go to the Odoo Apps menu, search for your module, and
|
||||
click <strong>Install</strong>. That's it. Your custom
|
||||
module is now live.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Need Module Support?</h3>
|
||||
<p>
|
||||
Upgrade to On the Rise for full module installation
|
||||
and customization support.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>View Plans</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,246 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Getting Started with Odoo Hosting – What You Need to Know |
|
||||
ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="New to Odoo hosting? This guide covers everything from choosing a plan to configuring your first domain and SSL."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/my-first-post.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Getting Started with Odoo Hosting – What You Need to Know"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="New to Odoo hosting? This guide covers everything from choosing a plan to configuring your first domain and SSL."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Getting Started with Odoo Hosting – What You Need to
|
||||
Know
|
||||
</h1>
|
||||
<div class="post-meta">May 28, 2026 · Guide</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
So you've decided to move your business to Odoo. Great
|
||||
choice. But where do you start with hosting? This guide
|
||||
walks you through everything — from choosing the
|
||||
right plan to getting your first domain mapped and SSL
|
||||
certificate installed.
|
||||
</p>
|
||||
<h2>Step 1: Choose Your Plan</h2>
|
||||
<p>
|
||||
At ODOO4projects we offer four plans designed to grow
|
||||
with you. If you're just getting started,
|
||||
<strong>Side Hustle</strong> gives you a fully
|
||||
functional Odoo CE instance with 1 backup slot and
|
||||
domain mapping. As your needs grow, you can upgrade to
|
||||
<strong>On the Rise</strong> for module installation
|
||||
support, or jump to <strong>Powerhouse</strong> for Odoo
|
||||
Enterprise readiness.
|
||||
</p>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> All plans include instant
|
||||
setup. If you're not satisfied within 30 days, we'll
|
||||
refund you — no questions asked.
|
||||
</div>
|
||||
<h2>Step 2: Deploy Your Instance</h2>
|
||||
<p>
|
||||
Once you've made your purchase, your instance is
|
||||
deployed automatically. You'll receive an email with
|
||||
your login credentials and instance URL within minutes.
|
||||
From there, you can access the Odoo backend and start
|
||||
configuring your apps.
|
||||
</p>
|
||||
<pre><code>Your instance URL: https://yourcompany.odooprojects.com
|
||||
Admin credentials: sent via email</code></pre>
|
||||
<h2>Step 3: Map Your Domain</h2>
|
||||
<p>
|
||||
Want to use your own domain? Navigate to your account
|
||||
dashboard and enter your domain name. We'll provide you
|
||||
with the DNS records to configure. Once your DNS
|
||||
propagates, we automatically issue a free SSL
|
||||
certificate via Let's Encrypt.
|
||||
</p>
|
||||
<h2>Step 4: Start Building</h2>
|
||||
<p>
|
||||
With your instance live and your domain mapped, you're
|
||||
ready to install apps, configure users, and customize
|
||||
your workflows. Need help? Our support team is just a
|
||||
message away.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Ready to Get Started?</h3>
|
||||
<p>
|
||||
Pick a plan and launch your Odoo instance in
|
||||
minutes.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>View Plans</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,217 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
ODOO4projects Becomes an Official Odoo Ready Partner | ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="We're thrilled to announce our official partnership with Odoo SA, bringing enterprise-grade hosting to even more businesses."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/news-official-partner.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="ODOO4projects Becomes an Official Odoo Ready Partner"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="We're thrilled to announce our official partnership with Odoo SA, bringing enterprise-grade hosting to even more businesses."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
ODOO4projects Becomes an Official Odoo Ready Partner
|
||||
</h1>
|
||||
<div class="post-meta">June 14, 2026 · News</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
We are incredibly proud to announce that ODOO4projects
|
||||
has been officially recognized as an
|
||||
<strong>Odoo Ready Partner</strong> by Odoo SA.
|
||||
</p>
|
||||
<p>
|
||||
This certification reflects our commitment to providing
|
||||
best-in-class hosting infrastructure, expert consulting,
|
||||
and exceptional support for Odoo users worldwide.
|
||||
</p>
|
||||
<h2>What This Means for You</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Enterprise-Grade Infrastructure:</strong>
|
||||
Meet Odoo's strict performance and reliability
|
||||
standards
|
||||
</li>
|
||||
<li>
|
||||
<strong>Priority Support Pathway:</strong> Direct
|
||||
escalation channels with Odoo's engineering team
|
||||
when needed
|
||||
</li>
|
||||
<li>
|
||||
<strong>Early Access:</strong> Preview new Odoo
|
||||
features before general release
|
||||
</li>
|
||||
</ul>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> Odoo Ready Partners undergo a
|
||||
rigorous audit process. This certification is your
|
||||
guarantee that ODOO4projects meets Odoo's highest
|
||||
standards for hosting and consulting.
|
||||
</div>
|
||||
<p>
|
||||
We want to thank our customers for their trust and
|
||||
support. This milestone belongs to all of you.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Experience Enterprise Hosting</h3>
|
||||
<p>
|
||||
Join thousands of businesses running on
|
||||
ODOO4projects.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>Get Started</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,217 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Platform Update: New Dashboard, Faster Backups & Smarter
|
||||
Monitoring | ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="We've rolled out a major platform update with a redesigned dashboard, incremental backups, and AI-powered uptime monitoring."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/news-platform-update.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Platform Update: New Dashboard, Faster Backups & Smarter Monitoring"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="We've rolled out a major platform update with a redesigned dashboard, incremental backups, and AI-powered uptime monitoring."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Platform Update: New Dashboard, Faster Backups & Smarter
|
||||
Monitoring
|
||||
</h1>
|
||||
<div class="post-meta">June 24, 2026 · News</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
We're excited to announce our biggest platform update
|
||||
yet. Here's what's new:
|
||||
</p>
|
||||
<h2>Redesigned Dashboard</h2>
|
||||
<p>
|
||||
Your control panel has been completely rebuilt for speed
|
||||
and clarity. Key metrics — instance status,
|
||||
resource usage, backup history — are now front and
|
||||
center. The new dashboard loads 3x faster and works
|
||||
seamlessly on mobile.
|
||||
</p>
|
||||
<h2>Incremental Backups</h2>
|
||||
<p>
|
||||
Backups now use incremental technology, meaning only
|
||||
changed data is stored after the initial full backup.
|
||||
This results in 80% faster backup times and
|
||||
significantly reduced storage usage — all while
|
||||
maintaining full point-in-time recovery.
|
||||
</p>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> With incremental backups, you
|
||||
can now restore to any point within your retention
|
||||
window — not just the latest snapshot. This is a
|
||||
game-changer for audit and compliance needs.
|
||||
</div>
|
||||
<h2>AI-Powered Monitoring</h2>
|
||||
<p>
|
||||
Our new monitoring system uses machine learning to
|
||||
detect anomalies in your instance's performance before
|
||||
they become problems. You'll receive proactive alerts
|
||||
with suggested remediation steps.
|
||||
</p>
|
||||
<p>
|
||||
This update is automatically available to all
|
||||
ODOO4projects customers. Log in to your dashboard to
|
||||
explore the new features.
|
||||
</p>
|
||||
<div class="cta-box">
|
||||
<h3>Experience the New Platform</h3>
|
||||
<p>Log in to your dashboard and see what's new.</p>
|
||||
<a href="../../index.html" class="btn"
|
||||
>Visit ODOO4projects</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,224 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Set Up Automated Backups in Under 2 Minutes | ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="Protect your Odoo data in moments. This speed-run walks you through enabling automated daily backups with one click."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/speed-run-backup.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Set Up Automated Backups in Under 2 Minutes"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Protect your Odoo data in moments. This speed-run walks you through enabling automated daily backups with one click."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Set Up Automated Backups in Under 2 Minutes
|
||||
</h1>
|
||||
<div class="post-meta">June 10, 2026 · Speed Run</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
Data loss is every business owner's nightmare. With
|
||||
ODOO4projects, you can set up automated daily backups in
|
||||
under two minutes. Here's the speed-run.
|
||||
</p>
|
||||
<h2>Step 1: Open Your Dashboard</h2>
|
||||
<p>
|
||||
Log in to your ODOO4projects account and navigate to the
|
||||
<strong>Backups</strong> tab.
|
||||
</p>
|
||||
<h2>Step 2: Enable Automated Backups</h2>
|
||||
<p>
|
||||
Click the toggle to enable automated backups. Choose
|
||||
your preferred time window and retention period (7, 14,
|
||||
or 30 days).
|
||||
</p>
|
||||
<pre><code>Dashboard > Backups > Enable Automated Backups
|
||||
Recommended: Daily at 02:00 UTC, 14-day retention</code></pre>
|
||||
<h2>Step 3: You're Done</h2>
|
||||
<p>
|
||||
That's it. Your data is now backed up automatically
|
||||
every day. You can also trigger manual backups anytime
|
||||
from the same screen.
|
||||
</p>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> For critical data, enable the
|
||||
30-day retention option and set up a weekly manual
|
||||
backup before major customizations or upgrades.
|
||||
</div>
|
||||
<div class="cta-box">
|
||||
<h3>Protect Your Business Data</h3>
|
||||
<p>
|
||||
All ODOO4projects plans include automated backups.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>Choose a Plan</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,237 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
Deploy Your First Odoo Instance in 5 Minutes | ODOO4projects
|
||||
</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="From zero to live Odoo instance in under five minutes. Follow this speed-run and see your business apps running instantly."
|
||||
/>
|
||||
<link
|
||||
rel="canonical"
|
||||
href="https://odooprojects.com/blog/posts/speed-run-deploy.html"
|
||||
/>
|
||||
<meta
|
||||
property="og:title"
|
||||
content="Deploy Your First Odoo Instance in 5 Minutes"
|
||||
/>
|
||||
<meta
|
||||
property="og:description"
|
||||
content="From zero to live Odoo instance in under five minutes. Follow this speed-run and see your business apps running instantly."
|
||||
/>
|
||||
<meta property="og:type" content="article" />
|
||||
<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"
|
||||
/>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, sans-serif;
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.container {
|
||||
width: 80%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.blog-header {
|
||||
padding: 2rem 0;
|
||||
border-bottom: 1px solid #1a1a2e;
|
||||
}
|
||||
.blog-header a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.blog-header a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.post-title {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||||
font-weight: 700;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-meta {
|
||||
color: rgba(232, 232, 240, 0.5);
|
||||
font-size: 0.85rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
.post-content h2 {
|
||||
font-family: "Inter Tight", sans-serif;
|
||||
font-size: 1.3rem;
|
||||
margin-top: 2rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.post-content p {
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.post-content ul,
|
||||
.post-content ol {
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.post-content li {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.post-content code {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 0.2rem 0.4rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
.post-content pre {
|
||||
background: #12121c;
|
||||
color: #00f5ff;
|
||||
padding: 1rem;
|
||||
border-radius: 0.6rem;
|
||||
overflow-x: auto;
|
||||
border: 1px solid #1a1a2e;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.pro-tip {
|
||||
border-left: 3px solid #00f5ff;
|
||||
background: #010f20;
|
||||
padding: 1rem 1.25rem;
|
||||
margin: 1.5rem 0;
|
||||
border-radius: 0 0.6rem 0.6rem 0;
|
||||
}
|
||||
.pro-tip strong {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.cta-box {
|
||||
border: 1px solid rgba(0, 245, 255, 0.2);
|
||||
background: #12121c;
|
||||
padding: 1.5rem;
|
||||
margin: 2rem 0;
|
||||
border-radius: 0.6rem;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 {
|
||||
margin: 0 0 0.5rem;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.cta-box p {
|
||||
margin: 0 0 1rem;
|
||||
color: rgba(232, 232, 240, 0.7);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.cta-box .btn {
|
||||
display: inline-block;
|
||||
padding: 0.6rem 1.5rem;
|
||||
background: #00f5ff;
|
||||
color: #08080c;
|
||||
text-decoration: none;
|
||||
border-radius: 0.5rem;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.cta-box .btn:hover {
|
||||
opacity: 0.85;
|
||||
}
|
||||
.post-footer {
|
||||
padding: 2rem 0;
|
||||
border-top: 1px solid #1a1a2e;
|
||||
margin-top: 2rem;
|
||||
}
|
||||
.post-footer a {
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
}
|
||||
.post-footer a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="blog-header">
|
||||
<a href="../../index.html#blog">← Back to Blog</a>
|
||||
</div>
|
||||
<article>
|
||||
<h1 class="post-title">
|
||||
Deploy Your First Odoo Instance in 5 Minutes
|
||||
</h1>
|
||||
<div class="post-meta">June 2, 2026 · Speed Run</div>
|
||||
<div class="post-content">
|
||||
<p>
|
||||
Ready to see Odoo in action? Deploying your first
|
||||
instance on ODOO4projects takes less time than brewing
|
||||
your morning coffee. Here's the speed-run.
|
||||
</p>
|
||||
<h2>Step 1: Choose a Plan</h2>
|
||||
<p>
|
||||
Visit our
|
||||
<a
|
||||
href="../../index.html#pricing"
|
||||
style="color: #00f5ff"
|
||||
>pricing page</a
|
||||
>
|
||||
and select the plan that fits your needs. For testing,
|
||||
Side Hustle is perfect. For production, go with On the
|
||||
Rise or Powerhouse.
|
||||
</p>
|
||||
<h2>Step 2: Complete Purchase</h2>
|
||||
<p>
|
||||
Fill in your details and complete the payment. Your
|
||||
instance will begin provisioning immediately.
|
||||
</p>
|
||||
<h2>Step 3: Check Your Email</h2>
|
||||
<p>
|
||||
Within 60 seconds, you'll receive your instance URL and
|
||||
admin credentials. Click the link and log in.
|
||||
</p>
|
||||
<pre><code>Instance ready at: https://your-company.odooprojects.com
|
||||
User: admin
|
||||
Password: (check your email)</code></pre>
|
||||
<h2>Step 4: Start Building</h2>
|
||||
<p>
|
||||
Once logged in, you can install apps, configure users,
|
||||
and start managing your business — all within
|
||||
minutes.
|
||||
</p>
|
||||
<div class="pro-tip">
|
||||
<strong>Pro Tip:</strong> Start with the CRM and Sales
|
||||
apps to manage leads and invoices. You can add more apps
|
||||
as your business grows — no reinstallation needed.
|
||||
</div>
|
||||
<div class="cta-box">
|
||||
<h3>Launch Your Instance Today</h3>
|
||||
<p>
|
||||
From zero to live in under 5 minutes — no
|
||||
credit card required to start.
|
||||
</p>
|
||||
<a href="../../index.html#pricing" class="btn"
|
||||
>Choose Your Plan</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<div class="post-footer">
|
||||
<a href="../../index.html#blog">← Back to all posts</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+283
@@ -638,6 +638,186 @@
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- Blog Section ---- */
|
||||
.blog-section {
|
||||
padding: 3rem 0;
|
||||
background: #08080c;
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.blog-section h2 {
|
||||
color: #e8e8f0;
|
||||
}
|
||||
.blog-search-wrap {
|
||||
max-width: 500px;
|
||||
margin: 0 auto 2rem;
|
||||
}
|
||||
.blog-search {
|
||||
width: 100%;
|
||||
padding: 0.75rem 1rem;
|
||||
font-size: 0.85rem;
|
||||
background: #12121c;
|
||||
border: 1px solid #1a1a2e;
|
||||
border-radius: 0.5rem;
|
||||
color: #e8e8f0;
|
||||
font-family: Inter, sans-serif;
|
||||
transition: border-color 0.2s;
|
||||
outline: none;
|
||||
}
|
||||
.blog-search:focus {
|
||||
border-color: #00f5ff;
|
||||
box-shadow: 0 0 0 2px rgba(0,245,255,0.15);
|
||||
}
|
||||
.blog-search::placeholder {
|
||||
color: rgba(232,232,240,0.35);
|
||||
}
|
||||
.blog-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 1.25rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
@media (max-width: 992px) {
|
||||
.blog-grid {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
}
|
||||
@media (max-width: 576px) {
|
||||
.blog-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.blog-card {
|
||||
background: #12121c;
|
||||
border: 1px solid #1a1a2e;
|
||||
border-radius: 0.6rem;
|
||||
padding: 1.25rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
|
||||
}
|
||||
.blog-card:hover {
|
||||
transform: translateY(-2px);
|
||||
border-color: #00f5ff;
|
||||
box-shadow: 0 4px 20px rgba(0,245,255,0.08);
|
||||
}
|
||||
.blog-card-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin-bottom: 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.blog-badge {
|
||||
display: inline-block;
|
||||
padding: 0.15rem 0.5rem;
|
||||
border-radius: 3rem;
|
||||
font-size: 0.6rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
color: #08080c;
|
||||
}
|
||||
.blog-badge-speed-run {
|
||||
background: #f472b6;
|
||||
}
|
||||
.blog-badge-guide {
|
||||
background: #a78bfa;
|
||||
}
|
||||
.blog-badge-howto {
|
||||
background: #00f5ff;
|
||||
}
|
||||
.blog-badge-news {
|
||||
background: #ffaa00;
|
||||
}
|
||||
.blog-badge-default {
|
||||
background: #a78bfa;
|
||||
}
|
||||
.blog-agent {
|
||||
display: inline-block;
|
||||
padding: 0.15rem 0.45rem;
|
||||
border-radius: 3rem;
|
||||
font-size: 0.56rem;
|
||||
font-weight: 600;
|
||||
background: rgba(0,245,255,0.15);
|
||||
color: #00f5ff;
|
||||
border: 1px solid rgba(0,245,255,0.25);
|
||||
}
|
||||
.blog-date {
|
||||
font-size: 0.7rem;
|
||||
color: rgba(232,232,240,0.45);
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
.blog-card h3 {
|
||||
font-family: 'Inter Tight', sans-serif;
|
||||
font-size: 0.95rem;
|
||||
font-weight: 600;
|
||||
margin: 0 0 0.5rem;
|
||||
line-height: 1.35;
|
||||
}
|
||||
.blog-card h3 a {
|
||||
color: #e8e8f0;
|
||||
text-decoration: none;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
.blog-card h3 a:hover {
|
||||
color: #00f5ff;
|
||||
}
|
||||
.blog-teaser {
|
||||
font-size: 0.78rem;
|
||||
color: rgba(232,232,240,0.65);
|
||||
line-height: 1.55;
|
||||
margin-bottom: 1rem;
|
||||
flex: 1;
|
||||
}
|
||||
.blog-readmore {
|
||||
font-size: 0.75rem;
|
||||
color: #00f5ff;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
transition: opacity 0.2s;
|
||||
margin-top: auto;
|
||||
}
|
||||
.blog-readmore:hover {
|
||||
opacity: 0.75;
|
||||
}
|
||||
.blog-empty {
|
||||
grid-column: 1 / -1;
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
color: rgba(232,232,240,0.5);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.blog-pagination {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.75rem;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
.blog-page-btn {
|
||||
padding: 0.4rem 1rem;
|
||||
font-size: 0.78rem;
|
||||
background: #12121c;
|
||||
border: 1px solid #1a1a2e;
|
||||
border-radius: 0.4rem;
|
||||
color: #e8e8f0;
|
||||
cursor: pointer;
|
||||
font-family: Inter, sans-serif;
|
||||
transition: border-color 0.2s, background 0.2s;
|
||||
}
|
||||
.blog-page-btn:hover:not(:disabled) {
|
||||
border-color: #00f5ff;
|
||||
background: rgba(0,245,255,0.08);
|
||||
}
|
||||
.blog-page-btn:disabled {
|
||||
opacity: 0.3;
|
||||
cursor: default;
|
||||
}
|
||||
.blog-page-info {
|
||||
font-size: 0.78rem;
|
||||
color: rgba(232,232,240,0.55);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -1224,6 +1404,20 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="blog-section" id="blog">
|
||||
<div class="container">
|
||||
<div class="text-center mb-4">
|
||||
<div class="hr"></div>
|
||||
<h2>Latest from the Blog</h2>
|
||||
</div>
|
||||
<div class="blog-search-wrap">
|
||||
<input type="text" class="blog-search" id="blogSearch" placeholder="Search posts..." />
|
||||
</div>
|
||||
<div class="blog-grid" id="blogGrid"></div>
|
||||
<div class="blog-pagination" id="blogPagination"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="fgrid">
|
||||
@@ -1463,6 +1657,95 @@
|
||||
.classList.add("active");
|
||||
});
|
||||
});
|
||||
|
||||
/* ---- Blog Module ---- */
|
||||
var blogState = {
|
||||
allPosts: [],
|
||||
filteredPosts: [],
|
||||
currentPage: 1,
|
||||
perPage: 6,
|
||||
searchTerm: ""
|
||||
};
|
||||
|
||||
function formatDate(dateStr) {
|
||||
var d = new Date(dateStr + "T00:00:00Z");
|
||||
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
|
||||
return months[d.getUTCMonth()] + " " + d.getUTCDate() + ", " + d.getUTCFullYear();
|
||||
}
|
||||
|
||||
function badgeClass(area) {
|
||||
var m = {"speed-run":"speed-run","guide":"guide","howto":"howto","news":"news"};
|
||||
return m[area] || "default";
|
||||
}
|
||||
|
||||
function renderBlog() {
|
||||
var grid = document.getElementById("blogGrid");
|
||||
var search = (blogState.searchTerm || "").toLowerCase();
|
||||
blogState.filteredPosts = blogState.allPosts.filter(function(p) {
|
||||
if (!search) return true;
|
||||
return (p.headline + " " + p.teaser).toLowerCase().indexOf(search) !== -1;
|
||||
});
|
||||
var total = blogState.filteredPosts.length;
|
||||
var totalPages = Math.max(1, Math.ceil(total / blogState.perPage));
|
||||
if (blogState.currentPage > totalPages) blogState.currentPage = totalPages;
|
||||
var start = (blogState.currentPage - 1) * blogState.perPage;
|
||||
var pagePosts = blogState.filteredPosts.slice(start, start + blogState.perPage);
|
||||
|
||||
var html = "";
|
||||
if (pagePosts.length === 0) {
|
||||
html = "<div class=\"blog-empty\">No posts match your search.</div>";
|
||||
} else {
|
||||
for (var i = 0; i < pagePosts.length; i++) {
|
||||
var p = pagePosts[i];
|
||||
var bc = badgeClass(p.area);
|
||||
var agentHtml = "";
|
||||
if (p.agent) agentHtml = "<span class=\"blog-agent\">" + p.agent + "</span>";
|
||||
html += "<div class=\"blog-card\">" +
|
||||
"<div class=\"blog-card-top\">" +
|
||||
"<span class=\"blog-badge blog-badge-" + bc + "\">" + p.area + "</span>" +
|
||||
agentHtml +
|
||||
"</div>" +
|
||||
"<div class=\"blog-date\">" + formatDate(p.date) + "</div>" +
|
||||
"<h3><a href=\"" + p.link + "\">" + p.headline + "</a></h3>" +
|
||||
"<p class=\"blog-teaser\">" + p.teaser + "</p>" +
|
||||
"<a href=\"" + p.link + "\" class=\"blog-readmore\">Read more →</a>" +
|
||||
"</div>";
|
||||
}
|
||||
}
|
||||
grid.innerHTML = html;
|
||||
|
||||
var pag = document.getElementById("blogPagination");
|
||||
var pagHtml = "";
|
||||
if (totalPages > 1) {
|
||||
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(1)\"" + (blogState.currentPage <= 1 ? " disabled\"" : "\"") + ">«</button>";
|
||||
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + (blogState.currentPage - 1) + ")\"" + (blogState.currentPage <= 1 ? " disabled\"" : "\"") + ">‹ Prev</button>";
|
||||
pagHtml += "<span class=\"blog-page-info\">Page " + blogState.currentPage + " of " + totalPages + "</span>";
|
||||
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + (blogState.currentPage + 1) + ")\"" + (blogState.currentPage >= totalPages ? " disabled\"" : "\"") + ">Next ›</button>";
|
||||
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + totalPages + ")\"" + (blogState.currentPage >= totalPages ? " disabled\"" : "\"") + ">»</button>";
|
||||
}
|
||||
pag.innerHTML = pagHtml;
|
||||
}
|
||||
|
||||
function blogGo(page) {
|
||||
blogState.currentPage = page;
|
||||
renderBlog();
|
||||
}
|
||||
|
||||
fetch("blog/index.json?_=" + Date.now())
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
blogState.allPosts = data.posts;
|
||||
renderBlog();
|
||||
})
|
||||
.catch(function() {
|
||||
document.getElementById("blogGrid").innerHTML = "<div class=\"blog-empty\">Could not load blog posts.</div>";
|
||||
});
|
||||
|
||||
document.getElementById("blogSearch").addEventListener("input", function() {
|
||||
blogState.searchTerm = this.value;
|
||||
blogState.currentPage = 1;
|
||||
renderBlog();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user