diff --git a/blog/odoo-20-community-is-here-and-it-feels-like-a-genuinely-polished-release.html b/blog/odoo-20-community-is-here-and-it-feels-like-a-genuinely-polished-release.html index e5e08f0..1e59186 100644 --- a/blog/odoo-20-community-is-here-and-it-feels-like-a-genuinely-polished-release.html +++ b/blog/odoo-20-community-is-here-and-it-feels-like-a-genuinely-polished-release.html @@ -24,7 +24,7 @@ diff --git a/blog/paraguay-s-odoo-localization-is-updated-to-v19-and-that-matters-more-than-it-sou.html b/blog/paraguay-s-odoo-localization-is-updated-to-v19-and-that-matters-more-than-it-sou.html index 4a6619f..c39157d 100644 --- a/blog/paraguay-s-odoo-localization-is-updated-to-v19-and-that-matters-more-than-it-sou.html +++ b/blog/paraguay-s-odoo-localization-is-updated-to-v19-and-that-matters-more-than-it-sou.html @@ -24,7 +24,7 @@ diff --git a/css/site.css b/css/site.css index 0677fd5..5c0896d 100644 --- a/css/site.css +++ b/css/site.css @@ -898,3 +898,40 @@ html.js [data-rv].rv-in { opacity: 1; transform: none; } } .sponsor-foot a { color: rgba(246, 236, 218, 0.92); text-decoration-color: var(--oak); text-underline-offset: 3px; } .sponsor-foot a:hover { color: var(--sand); } + +/* ---------- featured module ---------- */ +.featured-card { + background: var(--tint); + border: 1px solid var(--rule); + border-radius: var(--r-box); + padding: clamp(20px, 3vw, 34px); + max-width: 46em; +} +.featured-kicker { + margin: 0 0 6px; + font-size: var(--step-xs); + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--oak); + font-weight: 600; +} +.featured-name { + margin: 0 0 10px; + font-family: var(--display); + font-weight: 600; + font-size: var(--step-h3); + letter-spacing: -0.01em; +} +.featured-name a { text-decoration: none; color: var(--ink); } +.featured-name a:hover { color: var(--navy); text-decoration: underline; text-underline-offset: 4px; } +.featured-note { margin: 0 0 14px; color: var(--muted); font-size: var(--step-body); max-width: 38em; } +.featured-branches { margin: 0; display: flex; gap: 8px; } +.branch { + font-size: var(--step-xs); + letter-spacing: 0.08em; + padding: 3px 9px; + border-radius: 999px; + border: 1px solid var(--rule); + color: var(--muted); +} +.branch.is-on { border-color: var(--olive); color: var(--olive); } diff --git a/index.html b/index.html index c2d8be3..4d7f0d3 100644 --- a/index.html +++ b/index.html @@ -28,7 +28,7 @@ Welcome Tips Blog - Community + Modules About Ask a question @@ -88,7 +88,7 @@

Everything The OC Guy blog

- Community news + Featured module
@@ -165,20 +165,22 @@ -
+
diff --git a/js/site.js b/js/site.js index f398aee..d50963c 100644 --- a/js/site.js +++ b/js/site.js @@ -96,6 +96,22 @@ }); } + /* ---------- featured module: one editorial pick, status live from the feed ---------- */ + var FEATURED = 'mail tracker'; + + function updateFeatured(rows) { + var link = document.getElementById('featured-link'); + if (!link) return; + var hit = rows.filter(function (m) { + return String(m.name || '').toLowerCase().trim() === FEATURED; + })[0]; + if (!hit) return; + if (hit.URL) link.href = hit.URL; + var branches = document.querySelectorAll('#featured-branches .branch'); + if (branches[0]) branches[0].classList.toggle('is-on', !!hit.v19); + if (branches[1]) branches[1].classList.toggle('is-on', !!hit.v20); + } + if (ocaBody) { fetch('https://n8n.odoo4projects.com/webhook/oc-guy/modules') .then(function (r) { if (!r.ok) throw new Error('http ' + r.status); return r.json(); }) @@ -104,6 +120,7 @@ : (Array.isArray(payload) ? payload : null); if (!rows || !rows.length) throw new Error('empty'); renderOca(rows); + updateFeatured(rows); }) .catch(function () { /* keep the snapshot already in the markup */ diff --git a/scripts/sync_posts.py b/scripts/sync_posts.py index f8cf8e6..acd035a 100644 --- a/scripts/sync_posts.py +++ b/scripts/sync_posts.py @@ -222,7 +222,7 @@ POST_PAGE = """