<?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.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 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>
