Compare commits

...

9 Commits

Author SHA1 Message Date
carlosmintfan 8e28456bf3 assets: add favicon.ico 2026-04-09 20:08:16 -03:00
carlosmintfan 5d1d81bdbf form: remove "full Odoo or n8n instance" bullet from trial features 2026-04-09 13:41:23 -03:00
carlosmintfan f8430595e3 fix: toggle mobile menu button icon between bars and X on open/close 2026-04-09 13:25:19 -03:00
carlosmintfan 248a3796f4 fix: normalize region option values and add sydney 2026-04-09 13:24:54 -03:00
carlosmintfan 683f69f7c4 form: remove n8n product option from trial form 2026-04-09 13:24:23 -03:00
carlosmintfan 6fb2ef7570 content: rewrite FAQ answer to clarify n8n is optional across all module 2026-04-09 13:24:11 -03:00
carlosmintfan 6ab8310e57 chore: add .gitignore ignoring docker-compose.override.yml 2026-04-08 20:56:58 -03:00
carlosmintfan 908d21b0ac chore: dockerize dev server 2026-04-08 20:40:53 -03:00
carlosmintfan 4b76410979 chore: add .editorconfig 2026-04-08 17:06:40 -03:00
6 changed files with 96 additions and 103 deletions
+26
View File
@@ -0,0 +1,26 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{yaml,yml}]
indent_style = space
indent_size = 2
[*.py]
indent_style = space
indent_size = 4
[*.{js,ts,json}]
indent_style = space
indent_size = 2
[*.sh]
indent_style = space
indent_size = 2
[Makefile]
indent_style = tab
+1
View File
@@ -0,0 +1 @@
docker-compose.override.yml
+9
View File
@@ -0,0 +1,9 @@
FROM node:alpine
RUN npm install -g live-server
WORKDIR /app
EXPOSE 8080
CMD ["live-server", ".", "--port=8080", "--host=0.0.0.0", "--no-browser"]
+5
View File
@@ -0,0 +1,5 @@
services:
dev:
build: .
volumes:
- .:/app
+7
View File
@@ -0,0 +1,7 @@
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.29.1</center>
</body>
</html>
+48 -103
View File
@@ -977,30 +977,42 @@
></i>
</button>
<div class="faq-answer px-7 pb-6">
<p class="text-gray-500 text-sm leading-relaxed">
Not for all of them.
<strong class="text-dark">BI Queries</strong>
and
<p
class="text-gray-500 text-sm leading-relaxed mb-3"
>
None of these modules require n8n specifically.
<strong class="text-dark">BI Queries</strong>,
<strong class="text-dark"
>Payment Link API</strong
>
expose standard REST endpoints that work with
any HTTP client — curl, Postman, Make, Zapier,
or n8n.
<strong class="text-dark"
>Website Form Webhook</strong
>
POSTs to any webhook URL you configure, so Make
and other tools work too.
and
<strong class="text-dark"
>Invoice Address Edit</strong
>
and
expose standard REST endpoints that work with
any HTTP client — curl, Postman, Make, Zapier,
or anything else you already use.
<strong class="text-dark"
>Website Form Webhook</strong
>
POSTs to any webhook URL, so any automation
platform can receive submissions.
</p>
<p
class="text-gray-500 text-sm leading-relaxed mb-3"
>
That said, n8n is what we actually use and
recommend. Every endpoint is designed to drop
straight into an n8n HTTP Request node — but
you're never locked in.
</p>
<p class="text-gray-500 text-sm leading-relaxed">
<strong class="text-dark"
>Risk Management</strong
>
are standalone Odoo features with no external
dependency at all.
is a different category entirely — it's a
standalone Odoo feature with no external
dependency of any kind.
</p>
</div>
</div>
@@ -1235,18 +1247,6 @@
</span>
Managed hosting — we handle updates &amp; backups
</li>
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
<span
class="w-6 h-6 rounded-full bg-green-500/20 border border-green-400/30 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-check text-green-400 text-[10px]"
></i>
</span>
Full Odoo or n8n instance, not a sandbox
</li>
<li
class="flex items-center gap-3 text-sm text-gray-200"
>
@@ -1282,71 +1282,7 @@
/>
<!-- Product -->
<div>
<label
class="block text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"
>What do you need?</label
>
<div class="grid grid-cols-2 gap-3">
<label
id="opt-odoo"
class="trial-option flex items-center gap-3 border-2 border-brand rounded-xl px-4 py-3.5 cursor-pointer bg-brand/5 transition-all"
>
<input
type="radio"
name="product"
value="ODOO"
class="sr-only"
checked
/>
<span
class="w-8 h-8 rounded-lg bg-brand/10 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-cubes text-brand text-sm"
></i>
</span>
<div>
<p
class="text-sm font-semibold text-dark"
>
Odoo
</p>
<p class="text-[11px] text-gray-400">
ERP + modules
</p>
</div>
</label>
<label
id="opt-n8n"
class="trial-option flex items-center gap-3 border-2 border-gray-200 rounded-xl px-4 py-3.5 cursor-pointer hover:border-gray-300 transition-all"
>
<input
type="radio"
name="product"
value="N8N"
class="sr-only"
/>
<span
class="w-8 h-8 rounded-lg bg-gray-100 flex items-center justify-center flex-shrink-0"
>
<i
class="fas fa-project-diagram text-gray-400 text-sm"
></i>
</span>
<div>
<p
class="text-sm font-semibold text-dark"
>
n8n
</p>
<p class="text-[11px] text-gray-400">
Workflow automation
</p>
</div>
</label>
</div>
</div>
<input type="hidden" name="product" value="ODOO" />
<!-- Region -->
<div>
@@ -1362,21 +1298,24 @@
class="w-full appearance-none border-2 border-gray-200 rounded-xl px-4 py-3 text-sm text-dark bg-white focus:outline-none focus:border-brand transition-colors pr-10"
>
<option value="">Select a region…</option>
<option value="UK, Manchester">
<option value="manchester">
🇬🇧 UK — Manchester
</option>
<option value="US, Boston">
<option value="boston">
🇺🇸 US — Boston
</option>
<option value="IN, Mumbai">
<option value="mumbai">
🇮🇳 IN — Mumbai
</option>
<option value="BR, Sao Paulo">
<option value="saopaulo">
🇧🇷 BR — São Paulo
</option>
<option value="NL, Meppel">
<option value="meppel">
🇳🇱 NL — Meppel
</option>
<option value="sydney">
🇦🇺 AU — Sydney
</option>
</select>
<i
class="fas fa-chevron-down text-gray-400 text-xs absolute right-4 top-1/2 -translate-y-1/2 pointer-events-none"
@@ -1583,11 +1522,19 @@
// Mobile menu
const btn = document.getElementById("mobile-menu-button");
const menu = document.getElementById("mobile-menu");
btn.addEventListener("click", () =>
menu.classList.toggle("hidden"),
);
const btnIcon = btn.querySelector("i");
btn.addEventListener("click", () => {
menu.classList.toggle("hidden");
const isOpen = !menu.classList.contains("hidden");
btnIcon.classList.toggle("fa-bars", !isOpen);
btnIcon.classList.toggle("fa-times", isOpen);
});
menu.querySelectorAll("a").forEach((a) =>
a.addEventListener("click", () => menu.classList.add("hidden")),
a.addEventListener("click", () => {
menu.classList.add("hidden");
btnIcon.classList.add("fa-bars");
btnIcon.classList.remove("fa-times");
}),
);
// FAQ accordion
@@ -1704,8 +1651,6 @@
errorEl.classList.remove("hidden");
}
});
</script>
<script