<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zack BM</title>
    <description>The latest articles on DEV Community by Zack BM (@zackbm).</description>
    <link>https://dev.to/zackbm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3960238%2Fb13a261e-1947-4f63-b64e-fd9647103d35.png</url>
      <title>DEV Community: Zack BM</title>
      <link>https://dev.to/zackbm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zackbm"/>
    <language>en</language>
    <item>
      <title>Odoo Checkout Failures: The Revenue Leak You Notice Too Late</title>
      <dc:creator>Zack BM</dc:creator>
      <pubDate>Sat, 06 Jun 2026 20:27:33 +0000</pubDate>
      <link>https://dev.to/zackbm/odoo-checkout-failures-the-revenue-leak-you-notice-too-late-2nbc</link>
      <guid>https://dev.to/zackbm/odoo-checkout-failures-the-revenue-leak-you-notice-too-late-2nbc</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://hexalian.com/store" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Traffic looks fine. Revenue does not. On Odoo shops, checkout often breaks quietly: template errors, shipping widgets, payment steps that only fail for guests. This post covers &lt;strong&gt;why that happens&lt;/strong&gt;, &lt;strong&gt;what it costs&lt;/strong&gt;, and &lt;strong&gt;what to fix first&lt;/strong&gt; on Odoo &lt;strong&gt;17–19&lt;/strong&gt;. Need conversion modules that do not add fragile theme code? &lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=medium&amp;amp;utm_medium=social&amp;amp;utm_campaign=checkout_failures" rel="noopener noreferrer"&gt;Browse the Hexalian store →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Friday afternoon: “Checkout is broken”
&lt;/h2&gt;

&lt;p&gt;Your marketing team is running a promo. Traffic is up.&lt;/p&gt;

&lt;p&gt;Then support forwards a screenshot: &lt;em&gt;“I can’t pay.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You test as admin. Checkout works.&lt;/p&gt;

&lt;p&gt;You test as guest. &lt;strong&gt;500 error&lt;/strong&gt; on address, shipping, or payment — or the page spins and dies.&lt;/p&gt;

&lt;p&gt;That gap — admin works, customer does not — is one of the most expensive patterns in Odoo eCommerce. You keep paying for clicks into a funnel that only your team can complete.&lt;/p&gt;




&lt;h2&gt;
  
  
  This is not a “conversion optimization” problem first
&lt;/h2&gt;

&lt;p&gt;It is a &lt;strong&gt;production reliability&lt;/strong&gt; problem in &lt;code&gt;website_sale&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing or broken QWeb views after upgrade (e.g. &lt;code&gt;website_sale.cart_summary&lt;/code&gt; not found)&lt;/li&gt;
&lt;li&gt;Shipping carrier widgets that zero out cost or leave “Pay now” enabled when delivery is invalid&lt;/li&gt;
&lt;li&gt;Payment providers still in test mode on production&lt;/li&gt;
&lt;li&gt;Custom modules that override checkout but were never tested on staging with guest users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Community forums and Stack Overflow are full of the same story: checkout redirects to an error page, often only for non-admin users, often right after a version upgrade or theme merge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you only measure traffic and not completed guest checkouts, you are optimizing a broken pipe.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What silent checkout failure costs you
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;What the business feels&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Guest checkout 500, admin OK&lt;/td&gt;
&lt;td&gt;“Must be user error” — until ad spend is wasted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shipping step shows €0 incorrectly&lt;/td&gt;
&lt;td&gt;Orders ship at wrong cost or get cancelled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment step never loads&lt;/td&gt;
&lt;td&gt;Highest-intent users bounce with no ticket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Errors only under promo load&lt;/td&gt;
&lt;td&gt;Black Friday becomes a reputation event&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Paid acquisition does not pause when checkout is flaky. You buy the same intent twice — or never.&lt;/p&gt;




&lt;h2&gt;
  
  
  30-minute triage checklist (do this before the next campaign)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Guest checkout on production&lt;/strong&gt; — not logged in, not internal IP, mobile + desktop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full path:&lt;/strong&gt; cart → address → delivery → payment → confirmation email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare staging to prod&lt;/strong&gt; — same workers, cron, mail, SSL, payment provider mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch server logs&lt;/strong&gt; during one real guest attempt — template/render errors show up fast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify during promos&lt;/strong&gt; — one shipping method, one payment provider, fewer custom checkout overrides.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; If checkout was not tested as a guest in the last 7 days, assume it is broken until proven otherwise.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  After checkout is stable: conversion layers that belong in modules
&lt;/h2&gt;

&lt;p&gt;Once the pipe works, revenue usually comes from &lt;strong&gt;repeatable storefront features&lt;/strong&gt; — not one-off theme hacks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Why teams ask for it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Back in stock&lt;/td&gt;
&lt;td&gt;Recover high-intent visits when qty = 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recently viewed&lt;/td&gt;
&lt;td&gt;Return buyers should not start from zero&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundles / kits&lt;/td&gt;
&lt;td&gt;Campaigns should not trigger a dev sprint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promo bars&lt;/td&gt;
&lt;td&gt;Marketing should not wait on QWeb edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick view / compare&lt;/td&gt;
&lt;td&gt;Reduce friction on spec-heavy catalogs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B2B bulk order&lt;/td&gt;
&lt;td&gt;CSV reordering on portal, not cart gymnastics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are merchandising and UX problems. They should not each become a fragile custom project every quarter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Primary CTA
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stable checkout first. Then add conversion modules with one upgrade path.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Browse production-grade Odoo &lt;strong&gt;17 / 18 / 19&lt;/strong&gt; extensions (full source, one-time purchase):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=medium&amp;amp;utm_medium=social&amp;amp;utm_campaign=checkout_failures" rel="noopener noreferrer"&gt;hexalian.com/store →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Fallback CTA
&lt;/h2&gt;

&lt;p&gt;If your real pain is &lt;strong&gt;go-live weekend&lt;/strong&gt; — backups nobody restored, staging that lied, email that only worked in dev, no runbook — the short checklist above is not enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com/books/odoo-survival-guide?utm_source=medium&amp;amp;utm_medium=social&amp;amp;utm_campaign=checkout_failures_fallback" rel="noopener noreferrer"&gt;Odoo Survival Guide (PDF) →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Field-tested patterns from production Odoo audits: PostgreSQL, migrations, email deliverability, day-two operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is this only Odoo 19?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. Checkout and &lt;code&gt;website_sale&lt;/code&gt; failure modes show up on &lt;strong&gt;17, 18, and 19&lt;/strong&gt; — especially after upgrades and custom theme merges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We use Odoo.sh / a hosting partner.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ask when they last ran a &lt;strong&gt;guest&lt;/strong&gt; checkout test on production, not when they last deployed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should we fix checkout or install conversion modules first?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Checkout. Modules on a broken funnel multiply waste.&lt;/p&gt;




&lt;h2&gt;
  
  
  About Hexalian
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;Hexalian LLC&lt;/a&gt;&lt;/strong&gt; ships production Odoo modules and engineering guides for teams on &lt;strong&gt;Odoo 17–19&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=medium&amp;amp;utm_medium=social&amp;amp;utm_campaign=checkout_failures" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;&lt;/strong&gt; — eCommerce, B2B, reporting, sales tools
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/books" rel="noopener noreferrer"&gt;hexalian.com/books&lt;/a&gt;&lt;/strong&gt; — Survival Guide, Partner Playbook, DevOps, AI security
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nonaguard.com/signup?utm_source=medium&amp;amp;utm_medium=social&amp;amp;utm_campaign=checkout_failures_nonaguard" rel="noopener noreferrer"&gt;nonaguard.com/signup&lt;/a&gt;&lt;/strong&gt; — Odoo health scan (free trial)&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Hexalian LLC · &lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;hexalian.com&lt;/a&gt; · &lt;a href="mailto:info@hexalian.com"&gt;info@hexalian.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Odoo Partner Playbook: Scope, Price, and Scale Without Bleeding Margin</title>
      <dc:creator>Zack BM</dc:creator>
      <pubDate>Mon, 01 Jun 2026 23:43:48 +0000</pubDate>
      <link>https://dev.to/zackbm/the-odoo-partner-playbook-scope-price-and-scale-without-bleeding-margin-1c6j</link>
      <guid>https://dev.to/zackbm/the-odoo-partner-playbook-scope-price-and-scale-without-bleeding-margin-1c6j</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://hexalian.com/books/odoo-partner-playbook" rel="noopener noreferrer"&gt;hexalian.com/books/odoo-partner-playbook&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Technical Odoo skills rarely kill consulting practices. &lt;strong&gt;Scoping, pricing, renewals, and portfolio health&lt;/strong&gt; do. If you implement Odoo for clients, you have lived the fixed-price project that became endless T&amp;amp;M, the upgrade nobody sold until panic, and the client with three versions of the same custom module. &lt;strong&gt;&lt;a href="https://hexalian.com/books/odoo-partner-playbook" rel="noopener noreferrer"&gt;The Odoo Partner Playbook&lt;/a&gt;&lt;/strong&gt; ($12.99 PDF) is the business side nobody teaches in ORM tutorials. &lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-partner-playbook?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_partner_playbook" rel="noopener noreferrer"&gt;Get on Gumroad →&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://hexalian.com/books/odoo-partner-playbook" rel="noopener noreferrer"&gt;hexalian.com/books&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  You already know Odoo. That is not why projects hurt.
&lt;/h2&gt;

&lt;p&gt;You can debug the ORM, tune PostgreSQL, and ship a go-live. Your clients trust you technically.&lt;/p&gt;

&lt;p&gt;What still happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discovery becomes a second project you did not invoice&lt;/li&gt;
&lt;li&gt;"Small favor" requests eat the margin on a fixed SOW&lt;/li&gt;
&lt;li&gt;Renewals feel awkward because you never productized maintenance&lt;/li&gt;
&lt;li&gt;You learn about an upgrade crisis from the client's accountant, not your dashboard&lt;/li&gt;
&lt;li&gt;One client database is fine; ten clients and you have no portfolio view&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This post is for Odoo freelancers, boutique implementers, and resellers&lt;/strong&gt; — not internal IT teams going live on their own database. If that is your buyer, start with the &lt;strong&gt;&lt;a href="https://hexalian.com/books/odoo-survival-guide" rel="noopener noreferrer"&gt;Odoo Survival Guide&lt;/a&gt;&lt;/strong&gt; (production ops, backups, PostgreSQL).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fw%3D1400%26q%3D85%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1454165804606-c3d57bc86b40%3Fw%3D1400%26q%3D85%26auto%3Dformat%26fit%3Dcrop" alt="Planning and strategy" width="1400" height="934"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Five ways Odoo practices bleed margin (and what to do instead)
&lt;/h2&gt;

&lt;p&gt;These patterns show up on &lt;strong&gt;every&lt;/strong&gt; practice audit we run — regardless of country or Odoo version.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Discovery without a written boundary
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; The client says "we just need a simple inventory tweak." Week three: manufacturing, quality, three warehouses, and a custom report nobody mentioned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it hurts:&lt;/strong&gt; You priced implementation, not archaeology. Discovery hours are the most expensive hours in consulting — and the easiest to give away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sell discovery as its own deliverable (fixed fee, capped hours, written output)&lt;/li&gt;
&lt;li&gt;Define &lt;strong&gt;in scope / out of scope&lt;/strong&gt; before configuration starts&lt;/li&gt;
&lt;li&gt;Use a one-page scope appendix the client signs — not a 40-page SOW nobody reads&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Playbook chapter:&lt;/strong&gt; &lt;em&gt;Scoping Odoo Projects: How to Stop Bleeding on Discovery&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Fixed price on undefined scope
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; You quoted €25k to "implement Odoo" because the competitor did. The client remembers €25k; you remember every change request since March.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it hurts:&lt;/strong&gt; Fixed price only works when scope, data migration, integrations, and UAT ownership are explicit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Best when&lt;/th&gt;
&lt;th&gt;Watch out for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fixed price&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Repeatable vertical, clear module list, client owns data cleansing&lt;/td&gt;
&lt;td&gt;Scope creep, "while you're in there"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;T&amp;amp;M&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Discovery, rescue projects, unclear legacy&lt;/td&gt;
&lt;td&gt;No ceiling → client anxiety&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Retainer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Maintenance, monitoring, small enhancements&lt;/td&gt;
&lt;td&gt;Under-priced hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hybrid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fixed core + T&amp;amp;M integrations&lt;/td&gt;
&lt;td&gt;Needs clear phase gates&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rule:&lt;/strong&gt; If you cannot list the go-live checklist on one page, you are not ready for fixed price.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Playbook chapter:&lt;/strong&gt; &lt;em&gt;Pricing Odoo Projects: Fixed Price, Retainer &amp;amp; Hybrid Models&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. No recurring revenue layer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; You shipped go-live. Revenue drops until the next big project. The client calls at 9 p.m. Friday about email — you answer because you fear churn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it hurts:&lt;/strong&gt; Every reactive hour is margin you did not sell proactively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package &lt;strong&gt;maintenance + monitoring&lt;/strong&gt; before go-live, not after the first fire&lt;/li&gt;
&lt;li&gt;Tie renewals to outcomes: upgrade readiness, backup drills, health score — not "support hours"&lt;/li&gt;
&lt;li&gt;Use tooling (e.g. &lt;strong&gt;&lt;a href="https://nonaguard.com/signup?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_partner_playbook" rel="noopener noreferrer"&gt;NonaGuard&lt;/a&gt;&lt;/strong&gt;) so monitoring is visible to the client, not invisible heroics&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Playbook chapter:&lt;/strong&gt; &lt;em&gt;Building Recurring Revenue: Maintenance, Monitoring &amp;amp; Retainers&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  4. Upgrade sales only when the client panics
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; The client is on Odoo 16. Odoo 19 is live. They ask "can we upgrade next month?" — meaning before tax season / peak season / never.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it hurts:&lt;/strong&gt; Panic upgrades are T&amp;amp;M nightmares. Planned upgrades are productized revenue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Propose upgrade windows &lt;strong&gt;12 months ahead&lt;/strong&gt; with a written risk report&lt;/li&gt;
&lt;li&gt;Price upgrades as phases: audit → staging → UAT → cutover (not "we'll see")&lt;/li&gt;
&lt;li&gt;Maintain a module inventory per client — duplicate customizations are upgrade debt&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Playbook chapter:&lt;/strong&gt; &lt;em&gt;Upgrade Risk Management: How to Sell, Price &amp;amp; Deliver Odoo Upgrades&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  5. Portfolio blindness across clients
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Client A is healthy. Client B has deprecated modules and shared admin passwords. You find out when Client B's shop goes down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it hurts:&lt;/strong&gt; Reputation risk scales with client count faster than revenue does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run the same health checklist on every client quarterly&lt;/li&gt;
&lt;li&gt;Standardize on modules you maintain (fewer snowflakes)&lt;/li&gt;
&lt;li&gt;One dashboard for "which client needs attention this week"&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Playbook chapter:&lt;/strong&gt; &lt;em&gt;Client Portfolio Health: Running 10 Clients Without Losing Your Mind&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1522071820081-009f0129c71c%3Fw%3D1400%26q%3D85%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1522071820081-009f0129c71c%3Fw%3D1400%26q%3D85%26auto%3Dformat%26fit%3Dcrop" alt="Team collaboration" width="1400" height="934"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What is inside The Odoo Partner Playbook
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-partner-playbook?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_partner_playbook" rel="noopener noreferrer"&gt;$12.99 PDF&lt;/a&gt;&lt;/strong&gt; · instant download · no DRM · keep forever.&lt;/p&gt;

&lt;p&gt;Full table of contents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Introduction&lt;/strong&gt; — The Business of Odoo Nobody Teaches You
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoping&lt;/strong&gt; — How to Stop Bleeding on Discovery
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing&lt;/strong&gt; — Fixed Price, Retainer &amp;amp; Hybrid Models
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recurring revenue&lt;/strong&gt; — Maintenance, Monitoring &amp;amp; Retainers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upgrades&lt;/strong&gt; — How to Sell, Price &amp;amp; Deliver Odoo Upgrades
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portfolio health&lt;/strong&gt; — Running 10 Clients Without Losing Your Mind
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales &amp;amp; proposals&lt;/strong&gt; — Closing Odoo Projects Without Discounting
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30-day partner launch&lt;/strong&gt; — Go From Freelancer to Odoo Practice
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Plus margin protection patterns, SOW language that survives legal review, and proposal structures that stop discounting at the finish line.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who should read this
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Odoo freelancers moving from hourly billing to productized offers
&lt;/li&gt;
&lt;li&gt;Small agencies standardizing delivery across multiple clients
&lt;/li&gt;
&lt;li&gt;Technical leads who are great at Odoo but weak at commercial conversations
&lt;/li&gt;
&lt;li&gt;Resellers who need a repeatable scoping framework — &lt;strong&gt;official Odoo partner status not required&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Who should read something else
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your buyer&lt;/th&gt;
&lt;th&gt;Read instead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Internal IT / CTO going live&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hexalian.com/books/odoo-survival-guide" rel="noopener noreferrer"&gt;Odoo Survival Guide&lt;/a&gt; — backups, PostgreSQL, runbooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public eCommerce on Odoo 19&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hexalian.com/books/odoo-survival-guide-volume-2" rel="noopener noreferrer"&gt;Survival Guide Volume 2&lt;/a&gt; — storefront security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer shipping with AI tools&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://hexalian.com/books/vibe-code-ship-safe" rel="noopener noreferrer"&gt;Vibe Code, Ship Safe&lt;/a&gt; — pre-ship security&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Get the playbook
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-partner-playbook?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_partner_playbook" rel="noopener noreferrer"&gt;Gumroad — instant download →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hexalian.com/books/odoo-partner-playbook" rel="noopener noreferrer"&gt;hexalian.com/books/odoo-partner-playbook&lt;/a&gt; — full TOC, FAQs, related guides&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair with &lt;strong&gt;&lt;a href="https://nonaguard.com/signup?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_partner_playbook" rel="noopener noreferrer"&gt;NonaGuard&lt;/a&gt;&lt;/strong&gt; for client portfolio monitoring — find upgrade blockers and permission gaps before your client opens a ticket.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need to be an official Odoo partner?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. The scoping, pricing, and retention patterns work for freelancers, boutiques, and resellers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is this a technical go-live guide?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. For PostgreSQL, backups, and migrations, use the &lt;strong&gt;&lt;a href="https://hexalian.com/books/odoo-survival-guide" rel="noopener noreferrer"&gt;Odoo Survival Guide&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I share the PDF with my team?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
One purchase = one licensee. Agencies often buy one copy per lead consultant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does this relate to NonaGuard?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The playbook teaches &lt;em&gt;how to sell and deliver&lt;/em&gt; monitoring. NonaGuard is the &lt;em&gt;tool&lt;/em&gt; — free connector on Odoo Apps, SaaS plans for scans.&lt;/p&gt;




&lt;h2&gt;
  
  
  About Hexalian
&lt;/h2&gt;

&lt;p&gt;I run &lt;strong&gt;&lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;Hexalian LLC&lt;/a&gt;&lt;/strong&gt; — production Odoo modules and engineering guides for teams on &lt;strong&gt;Odoo 17, 18, and 19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We ship &lt;strong&gt;full source&lt;/strong&gt; (no lock-in), test on real deployments, and publish the same patterns from &lt;strong&gt;40+ production audits&lt;/strong&gt; into PDF playbooks and Odoo Apps listings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_modules" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;&lt;/strong&gt; — eCommerce, B2B, monitoring modules
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/books" rel="noopener noreferrer"&gt;hexalian.com/books&lt;/a&gt;&lt;/strong&gt; — Survival Guide, Partner Playbook, DevOps, AI security
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nonaguard.com/signup?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_nonaguard" rel="noopener noreferrer"&gt;nonaguard.com&lt;/a&gt;&lt;/strong&gt; — 7-day Odoo health scan trial
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Production Odoo modules (many partners resell these)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Website Promo Banner&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sticky countdown promo bars with click analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_product_bundles" rel="noopener noreferrer"&gt;Product Bundles &amp;amp; Kits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Combo deals, stock-aware kits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_recently_viewed" rel="noopener noreferrer"&gt;Recently Viewed Products&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Browsing history carousel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_stock_notification" rel="noopener noreferrer"&gt;Back in Stock Alerts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Email when inventory returns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_bulk_order_form" rel="noopener noreferrer"&gt;B2B Quick Order Form&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CSV bulk ordering for B2B portals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/web_commerce_suite" rel="noopener noreferrer"&gt;E-commerce Suite All-in-One&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bundled conversion stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/nonaguard_connector" rel="noopener noreferrer"&gt;NonaGuard Connector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Free&lt;/strong&gt; — connect Odoo to health monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Odoo &lt;strong&gt;17, 18, 19&lt;/strong&gt; · Odoo Apps + Gumroad · one-time purchase · full source.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_modules" rel="noopener noreferrer"&gt;Browse all modules →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hexalian LLC · &lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;hexalian.com&lt;/a&gt; · &lt;a href="mailto:info@hexalian.com"&gt;info@hexalian.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Odoo Website Promo Bars Without Custom Theme Code Every Black Friday</title>
      <dc:creator>Zack BM</dc:creator>
      <pubDate>Sun, 31 May 2026 22:26:50 +0000</pubDate>
      <link>https://dev.to/zackbm/odoo-website-promo-bars-without-custom-theme-code-every-black-friday-2f41</link>
      <guid>https://dev.to/zackbm/odoo-website-promo-bars-without-custom-theme-code-every-black-friday-2f41</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;hexalian.com/store/hex_website_announcement_bar&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; — Marketing wants a sitewide promo strip with countdown and analytics. Theme hacks break on every Odoo upgrade. &lt;strong&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Website Promo Banner &amp;amp; Announcement Bar&lt;/a&gt;&lt;/strong&gt; is a standalone Odoo 17–19 app with &lt;strong&gt;30 templates&lt;/strong&gt;, live preview, and click tracking. Already sold on &lt;strong&gt;Odoo Apps&lt;/strong&gt; (France v19, Thailand v18). &lt;strong&gt;&lt;a href="https://apps.odoo.com/apps/modules/19.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Get on Odoo Apps →&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hex_website_announcement_bar-odoo19?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_announcement_bar" rel="noopener noreferrer"&gt;Gumroad (full source) →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The conversation that happens every October
&lt;/h2&gt;

&lt;p&gt;Your marketing lead opens Slack:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Can we add a sticky Black Friday banner with a countdown — today?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you run Odoo eCommerce or a B2B portal, you know what comes next:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Someone edits the website theme QWeb&lt;/li&gt;
&lt;li&gt;Countdown JavaScript gets copy-pasted from last year&lt;/li&gt;
&lt;li&gt;It works in staging&lt;/li&gt;
&lt;li&gt;Odoo 18 → 19 upgrade breaks the override&lt;/li&gt;
&lt;li&gt;February: &lt;em&gt;"Why is the summer sale bar still showing?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;That is not a marketing problem. It is an architecture problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Website Promo Banner &amp;amp; Announcement Bar&lt;/a&gt;&lt;/strong&gt; so merchandising teams can publish promos from the Odoo backend — without opening the theme repo every campaign season.&lt;/p&gt;

&lt;p&gt;It is already selling on the &lt;strong&gt;&lt;a href="https://apps.odoo.com/apps/modules/19.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Odoo Apps Store&lt;/a&gt;&lt;/strong&gt; — shops in &lt;strong&gt;France (Odoo 19)&lt;/strong&gt; and &lt;strong&gt;Thailand (Odoo 18)&lt;/strong&gt; bought it for real production use, not a demo database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxecgb5l4ggdnpja1shk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxecgb5l4ggdnpja1shk.png" alt="Promo bar live on an Odoo website storefront" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Theme hack vs dedicated module
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Theme QWeb hack&lt;/th&gt;
&lt;th&gt;Website Promo Banner module&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time to first bar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hours (dev)&lt;/td&gt;
&lt;td&gt;~15 minutes (marketing)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Survives Odoo upgrade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Often breaks&lt;/td&gt;
&lt;td&gt;Maintained module path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Countdown auto-hide&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Custom JS each year&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Click analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usually none&lt;/td&gt;
&lt;td&gt;Views + clicks per bar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multiple campaigns&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fragile&lt;/td&gt;
&lt;td&gt;Multi-bar + scheduling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who maintains it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Developer queue&lt;/td&gt;
&lt;td&gt;Marketing + settings screen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rule of thumb:&lt;/strong&gt; If marketing asks for promo changes more than twice a year, a module pays for itself on the first avoided dev sprint.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What you get (without touching the theme)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckj02h7kh0rs8jpsys9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fckj02h7kh0rs8jpsys9c.png" alt="30 announcement bar templates in the Odoo backend" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Merchandising features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sticky top bar&lt;/strong&gt; — promo stays visible while scrolling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live countdown timer&lt;/strong&gt; — bar auto-hides when the offer ends (real JavaScript timer, not a static date string)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulse animation&lt;/strong&gt; — urgency without custom CSS on every campaign&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30 ready-to-use templates&lt;/strong&gt; — B2B notices, flash sales, free-shipping strips, trade-show banners&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live preview in the backend&lt;/strong&gt; — see exact colors, fonts, and layout before publish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-bar stacking&lt;/strong&gt; — run prioritized campaigns; no arbitrary "one default template" limit&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Targeting and control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visitor targeting&lt;/strong&gt; — first-time vs returning visitors (lightweight cookies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL / page filtering&lt;/strong&gt; — show bars only on &lt;code&gt;/shop&lt;/code&gt;, checkout, or specific landing pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule windows&lt;/strong&gt; — start/end datetime per campaign&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-company&lt;/strong&gt; — separate bars per company on shared infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Analytics (the part theme hacks never have)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Views and clicks per bar&lt;/strong&gt; — read-only stats in the backend&lt;/li&gt;
&lt;li&gt;Compare campaigns: which copy drove clicks before you rewrite the whole shop&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1u1jkvp16c9bman7yc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz1u1jkvp16c9bman7yc4.png" alt="Flash sale template with live preview and countdown settings" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72ipmh508t0j3a403zzp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72ipmh508t0j3a403zzp.png" alt="Design section — gradients, typography, live preview" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1aj0wd5c19hz5jai4bks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1aj0wd5c19hz5jai4bks.png" alt="Analytics and URL visibility constraints per bar" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Standalone app with its &lt;strong&gt;own top-level menu&lt;/strong&gt; — not buried three clicks deep inside Website settings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;h3&gt;
  
  
  eCommerce shops (Odoo 17–19)
&lt;/h3&gt;

&lt;p&gt;Black Friday, summer sale, free shipping over €X, last-chance checkout reminders — publish from the backend the same day marketing decides the offer.&lt;/p&gt;

&lt;h3&gt;
  
  
  B2B portals
&lt;/h3&gt;

&lt;p&gt;Payment terms updates, trade-show announcements, catalog maintenance notices — professional strips without a front-end contractor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Odoo partners and agencies
&lt;/h3&gt;

&lt;p&gt;Deploy the same capability across client sites. &lt;strong&gt;Full Python/XML source&lt;/strong&gt;, no license server, no subscription. One upgrade path for every storefront you maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  15-minute setup (first campaign)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install&lt;/strong&gt; from &lt;a href="https://apps.odoo.com/apps/modules/19.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Odoo Apps&lt;/a&gt; (search &lt;em&gt;Website Announcement Bar&lt;/em&gt;, publisher &lt;strong&gt;Hexalian&lt;/strong&gt;) — or download the ZIP for your Odoo version from &lt;a href="https://zackbm.gumroad.com/l/hex_website_announcement_bar-odoo19?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_announcement_bar" rel="noopener noreferrer"&gt;Gumroad&lt;/a&gt; / &lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Website Announcement Bar&lt;/strong&gt; from the main menu&lt;/li&gt;
&lt;li&gt;Pick a template (Flash Sale, Free Shipping, B2B Notice, …)&lt;/li&gt;
&lt;li&gt;Set colors, copy, CTA link, schedule, and countdown deadline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable&lt;/strong&gt; the template — check live preview, then verify on the public site&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Works on Odoo &lt;strong&gt;17.0, 18.0, and 19.0&lt;/strong&gt; — Community and Enterprise.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Before production:&lt;/strong&gt; test on staging first (same advice we ship in the module docs). Toggle master enable/disable globally when you need a hard kill switch.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Pricing and delivery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One-time purchase&lt;/strong&gt; — no monthly fee, no seat limits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full source code&lt;/strong&gt; — OPL-1, standard Odoo module layout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick your Odoo version&lt;/strong&gt; — separate SKUs for 17 / 18 / 19 on Gumroad; Odoo Apps listing per version&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get Website Promo Banner &amp;amp; Announcement Bar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Primary — Odoo Apps (marketplace checkout):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Odoo 19&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;a href="https://apps.odoo.com/apps/modules/19.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Install on Odoo Apps →&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Odoo 18&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apps.odoo.com/apps/modules/18.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Install on Odoo Apps →&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Odoo 17&lt;/td&gt;
&lt;td&gt;&lt;a href="https://apps.odoo.com/apps/modules/17.0/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Install on Odoo Apps →&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Direct — Gumroad / Hexalian (ZIP + source, pick version at checkout):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hex_website_announcement_bar-odoo19?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_announcement_bar" rel="noopener noreferrer"&gt;Gumroad — Odoo 19 SKU →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=devto_announcement_bar" rel="noopener noreferrer"&gt;hexalian.com/store/hex_website_announcement_bar →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions before you buy? &lt;strong&gt;&lt;a href="mailto:demo@hexalian.com"&gt;demo@hexalian.com&lt;/a&gt;&lt;/strong&gt; (live demo available) · &lt;strong&gt;&lt;a href="mailto:info@hexalian.com"&gt;info@hexalian.com&lt;/a&gt;&lt;/strong&gt; (pre-sales)&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does this replace my website theme?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. It injects announcement bars at the site header level. Your theme stays intact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run multiple bars at once?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes — stack by sequence priority; enable/disable per template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GDPR / cookies?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Visitor targeting uses lightweight cookies. Strict cookie controls are configurable from settings (review with your DPO for EU shops).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom HTML/CSS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Advanced mode supports custom HTML and scoped CSS (&lt;code&gt;.hex-announcement-bar&lt;/code&gt; prefix) for agencies that need brand-perfect layouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if I only need one bar once a year?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Still cheaper than a developer day every October — and you keep analytics for next year's campaign.&lt;/p&gt;




&lt;h2&gt;
  
  
  Going live on Odoo? (cross-sell)
&lt;/h2&gt;

&lt;p&gt;Promo bars drive clicks. &lt;strong&gt;Production go-live&lt;/strong&gt; is a different problem — backups nobody tested, staging that does not match prod, email that only worked in dev.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-survival-guide?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_survival_guide_xsell" rel="noopener noreferrer"&gt;Odoo Survival Guide&lt;/a&gt;&lt;/strong&gt; — field-tested PDF from &lt;strong&gt;40+ production audits&lt;/strong&gt;. PostgreSQL tuning, migration notes, go-live runbooks for &lt;strong&gt;Odoo 17–19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$9.99 · instant download · no DRM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-survival-guide?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_survival_guide_xsell" rel="noopener noreferrer"&gt;Get the Survival Guide on Gumroad →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hexalian.com/books/odoo-survival-guide" rel="noopener noreferrer"&gt;Full TOC on hexalian.com →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pair conversion modules with a healthy instance — not a shop that goes down on launch weekend.&lt;/p&gt;




&lt;h2&gt;
  
  
  About Hexalian
&lt;/h2&gt;

&lt;p&gt;I run &lt;strong&gt;&lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;Hexalian LLC&lt;/a&gt;&lt;/strong&gt; — production Odoo modules and engineering guides for teams on &lt;strong&gt;Odoo 17, 18, and 19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We ship &lt;strong&gt;full source&lt;/strong&gt; (no lock-in), test on real deployments, and publish the same patterns from production audits into PDF playbooks and Odoo Apps listings.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_modules" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;&lt;/strong&gt; — all modules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://hexalian.com/books" rel="noopener noreferrer"&gt;hexalian.com/books&lt;/a&gt;&lt;/strong&gt; — Survival Guide, Partner Playbook, DevOps, AI security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://nonaguard.com/signup?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_nonaguard" rel="noopener noreferrer"&gt;nonaguard.com&lt;/a&gt;&lt;/strong&gt; — free 7-day Odoo health scan (200+ checks)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  More conversion modules (same engineering standards)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Store&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Website Promo Banner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sticky countdown bars + analytics&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;store →&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_product_bundles" rel="noopener noreferrer"&gt;Product Bundles &amp;amp; Kits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Combo deals, stock-aware kits&lt;/td&gt;
&lt;td&gt;Sold on Apps (UAE)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_recently_viewed" rel="noopener noreferrer"&gt;Recently Viewed Products&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Browsing history carousel&lt;/td&gt;
&lt;td&gt;Odoo 17–19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_stock_notification" rel="noopener noreferrer"&gt;Back in Stock Alerts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Email when inventory returns&lt;/td&gt;
&lt;td&gt;Sold on Apps (HK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_bulk_order_form" rel="noopener noreferrer"&gt;B2B Quick Order Form&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CSV bulk ordering&lt;/td&gt;
&lt;td&gt;B2B portals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/web_commerce_suite" rel="noopener noreferrer"&gt;E-commerce Suite All-in-One&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bundled conversion stack&lt;/td&gt;
&lt;td&gt;Best value bundle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/nonaguard_connector" rel="noopener noreferrer"&gt;NonaGuard Connector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Free&lt;/strong&gt; — health monitoring&lt;/td&gt;
&lt;td&gt;Requires NonaGuard plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_modules" rel="noopener noreferrer"&gt;Browse all Odoo modules →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hexalian LLC · &lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;hexalian.com&lt;/a&gt; · &lt;a href="mailto:info@hexalian.com"&gt;info@hexalian.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>odoo</category>
      <category>marketing</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Recently Viewed Products for Odoo eCommerce (Recover Lost Return Visits)</title>
      <dc:creator>Zack BM</dc:creator>
      <pubDate>Sat, 30 May 2026 20:33:37 +0000</pubDate>
      <link>https://dev.to/zackbm/recently-viewed-products-for-odoo-ecommerce-recover-lost-return-visits-1i</link>
      <guid>https://dev.to/zackbm/recently-viewed-products-for-odoo-ecommerce-recover-lost-return-visits-1i</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://hexalian.com/store/ecommerce_recently_viewed" rel="noopener noreferrer"&gt;hexalian.com/store/ecommerce_recently_viewed&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Hexalian
&lt;/h2&gt;

&lt;p&gt;I run &lt;strong&gt;Hexalian LLC&lt;/strong&gt; (&lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;hexalian.com&lt;/a&gt;) — we build production Odoo modules and engineering guides for teams going live on &lt;strong&gt;Odoo 17, 18, and 19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hexalian is founder-led. We ship &lt;strong&gt;full source code&lt;/strong&gt; (no lock-in, no license servers), test on real client deployments, and publish the same patterns we use in production audits into PDF playbooks and Odoo Apps modules.&lt;/p&gt;

&lt;p&gt;What we build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Odoo eCommerce modules&lt;/strong&gt; — promo bars, bundles, recently viewed, back-in-stock alerts, B2B quick order, and more at &lt;a href="https://hexalian.com/store" rel="noopener noreferrer"&gt;hexalian.com/store&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering guides&lt;/strong&gt; — Odoo production ops, partner practice management, DevOps, AI security (&lt;a href="https://hexalian.com/books" rel="noopener noreferrer"&gt;hexalian.com/books&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NonaGuard&lt;/strong&gt; (&lt;a href="https://nonaguard.com" rel="noopener noreferrer"&gt;nonaguard.com&lt;/a&gt;) — automated Odoo health monitoring and upgrade readiness scans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are implementing Odoo in production, you will find both code and checklists here — not slide-deck theory.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Odoo Survival Guide (engineering playbook)
&lt;/h2&gt;

&lt;p&gt;Going live on Odoo is more than installing storefront modules. Backups nobody tested, PostgreSQL never tuned, email that only worked in dev — these show up on the same weekend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Odoo Survival Guide&lt;/strong&gt; is a field-tested PDF from &lt;strong&gt;40+ production Odoo audits&lt;/strong&gt;: PostgreSQL tuning, migration playbooks, go-live checklists, day-two ops, and scaling notes for &lt;strong&gt;Odoo 17–19&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$9.99 · instant download · no DRM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://zackbm.gumroad.com/l/hexalian-book-odoo-survival-guide?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_survival_guide_xsell" rel="noopener noreferrer"&gt;Get on Gumroad →&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hexalian.com/books/odoo-survival-guide" rel="noopener noreferrer"&gt;Full TOC and FAQs on hexalian.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Volume 2 covers eCommerce security and compliance. &lt;strong&gt;The Odoo Partner Playbook&lt;/strong&gt; covers scoping and pricing for consultants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recently Viewed Products (this module)
&lt;/h2&gt;

&lt;p&gt;Most Odoo webshops lose return visits because the storefront does not remember what buyers already looked at.&lt;/p&gt;

&lt;p&gt;Amazon trained everyone to expect a &lt;strong&gt;"recently viewed"&lt;/strong&gt; row. Odoo's default shop does not ship it — and theme JavaScript hacks do not sync with pricelists, multi-website rules, or portal sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recently Viewed Products&lt;/strong&gt; (Hexalian) tracks browsing history and shows a responsive AJAX carousel for &lt;strong&gt;Odoo 17, 18, and 19&lt;/strong&gt;. &lt;strong&gt;$10.99&lt;/strong&gt; one-time · full source · no subscription.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1556742049-0cfed4f6a45d%3Fw%3D1400%26q%3D80%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1556742049-0cfed4f6a45d%3Fw%3D1400%26q%3D80%26auto%3Dformat%26fit%3Dcrop" alt="Shopping" width="1400" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automatic product view tracking (logged-in + guest sessions)&lt;/li&gt;
&lt;li&gt;Session history for anonymous visitors&lt;/li&gt;
&lt;li&gt;Cross-device history for logged-in portal users&lt;/li&gt;
&lt;li&gt;Smart cleanup — last 20 views per user/session&lt;/li&gt;
&lt;li&gt;AJAX carousel — no full page reload&lt;/li&gt;
&lt;li&gt;Configurable placement: product page, cart, checkout&lt;/li&gt;
&lt;li&gt;EN/ES translations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why a module beats a theme tweak
&lt;/h3&gt;

&lt;p&gt;Theme JavaScript does not integrate with Odoo's product catalog, pricelists, or multi-website rules. A module uses proper models and website routes — it survives upgrades and respects access rights.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563013544-824ae1b704d3%3Fw%3D1400%26q%3D80%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1563013544-824ae1b704d3%3Fw%3D1400%26q%3D80%26auto%3Dformat%26fit%3Dcrop" alt="Warehouse and fulfillment" width="1400" height="933"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install path
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install from &lt;strong&gt;Odoo Apps&lt;/strong&gt; (search &lt;em&gt;Recently Viewed&lt;/em&gt;, Hexalian) or download the ZIP for your Odoo version&lt;/li&gt;
&lt;li&gt;Enable on your website and configure carousel placement&lt;/li&gt;
&lt;li&gt;Test with guest and logged-in sessions — views should persist per rules above&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Works on Odoo &lt;strong&gt;17.0, 18.0, and 19.0&lt;/strong&gt; Community and Enterprise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get this module
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hexalian.com/store/ecommerce_recently_viewed" rel="noopener noreferrer"&gt;hexalian.com/store/ecommerce_recently_viewed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zackbm.gumroad.com/l/ecommerce_recently_viewed-odoo19?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_recently_viewed" rel="noopener noreferrer"&gt;Gumroad — Odoo 19&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.odoo.com/apps/modules/19.0/ecommerce_recently_viewed" rel="noopener noreferrer"&gt;Odoo Apps — v19&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  More Hexalian Odoo modules
&lt;/h2&gt;

&lt;p&gt;We ship the same modules we deploy on client shops:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_website_announcement_bar" rel="noopener noreferrer"&gt;Website Promo Banner&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sticky countdown promo bars with click analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_product_bundles" rel="noopener noreferrer"&gt;Product Bundles &amp;amp; Kits&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Combo deals, stock-aware kits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/ecommerce_stock_notification" rel="noopener noreferrer"&gt;Back in Stock Alerts&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Email when inventory returns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/hex_bulk_order_form" rel="noopener noreferrer"&gt;B2B Quick Order Form&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CSV bulk ordering for B2B portals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hexalian.com/store/nonaguard_connector" rel="noopener noreferrer"&gt;NonaGuard Connector&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Free&lt;/strong&gt; — Odoo health monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hexalian.com/store?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=devto_modules" rel="noopener noreferrer"&gt;Browse all modules →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hexalian LLC · &lt;a href="https://hexalian.com" rel="noopener noreferrer"&gt;hexalian.com&lt;/a&gt; · Questions: &lt;a href="mailto:info@hexalian.com"&gt;info@hexalian.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>odoo</category>
      <category>erp</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
