Odusite Docs
The entire public website and customer portal of Odoo 19, re-created as a fast, modular, themable Astro site on Cloudflare Workers. Odoo stays the backend — a headless CMS reached only through a token-secured REST API.
-
Token-secured REST API
The browser never talks to Odoo. The Astro Worker calls
/odusite/v1/...server-to-server, authenticated with theX-Odusite-Tokenheader. -
Modular Blocks
Blog, shop, portal, events, jobs, forum, courses and more — each a build-time block that a disabled site ships zero JS and zero routes for.
-
Themable by Tokens
Every colour and spacing flows through the theme layer's design tokens. Default theme is a polished dark theme; swap it without touching blocks.
-
Headless Commerce
Catalog, cart and checkout run against a draft
sale.order. Payments go straight to the provider (Stripe first); Odoo stays the source of truth. -
JWT Portal
Sign-up with email double opt-in, orders, quotations, invoices and projects — all behind short-lived JWTs issued by Odoo. No session cookies.
-
Edge-cached SSR
Marketing pages prerender at the edge; catalog, cart and portal render on demand. Odoo webhooks invalidate exactly the pages that changed.
What Odusite is¶
Odusite re-creates the Odoo 19.0 public website and customer portal as a standalone Astro site deployed on Cloudflare Workers, with Odoo acting as a headless CMS/backend. Odoo's own rendering — QWeb, website snippets, the website builder — is not used. Everything the visitor sees is authored and served by the Astro frontend.
The two halves talk over a single, deliberate seam:
addons/odusite_*— Odoo 19 addons. Each depends on a standard module (sale,website_blog,crm, …) and exposes REST controllers under/odusite/v1/.... Everything shared — token check, JSON envelope, pagination, image URLs, webhooks — lives inodusite_base.site/— the Astro frontend: hybrid SSR on Cloudflare Workers, grouped into build-time blocks and styled entirely through a theme layer.
Every request from the site to Odoo carries X-Odusite-Token; portal actions
add a user JWT in Authorization: Bearer. Public reads are filtered exactly
like the stock website controllers (is_published, multi-website domain,
publish date), so no unpublished record ever leaks.
Start here¶
-
Understand the system
Read the Architecture overview, then dive into the specs in the repository for full detail.
-
Run it yourself
Install the Odoo addons, then deploy the Astro site to Cloudflare.
-
Use the site
The User Guide walks through the account, shop, portal and community features from a visitor's point of view.