cache-bust local assets; narrow the language facet to scores >= 3

Part 1 — asset versioning: every local <script src> and <link rel=stylesheet> on the
tracked pages now carries ?v=<sha256-of-the-file> (10 hex), computed at BUILD time from
the file's bytes by work/build-asset-versions.py — never hand-typed, and idempotent
(re-running with no file change rewrites nothing). This is what makes an edited
focus-rule.js / photo-upload.js a new URL instead of a stale cache hit.

Part 2 — language facet: a language now counts for the Language filter only when its
0-5 self-assessment is >= LANG_FACET_MIN (3 = 'works in it'). The constant sits beside
the 15-point rule in the page script and its mirror in build-directory.py. Nothing
stored changes; the card's languages chart still prints every language above 0, the
search box is unchanged, and the facet stays an exact membership test against the
card's value. A '1' language no longer offers the person under that language.
This commit is contained in:
webmaster committed 2026-11-03 21:26:58 +00:00
1 parent c83186f809
commit bd0881f882
51 files changed
+138 -118

No files matched your search

+4 -4
View File
@@ -220,14 +220,14 @@
#customQuoteModal .biz-success p{color:var(--midnight)}
@media(max-width:600px){.oca-table td,.oca-table th{padding:.5rem .65rem;font-size:.8rem}.ow-panel{left:5%;right:5%}.ow-close{top:.5rem;right:.5rem;font-size:1.6rem}}
</style>
<link rel="stylesheet" href="/style.css" />
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
<script defer src="/static/lang.js"></script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</head>
<body>
<!--
@@ -672,7 +672,7 @@
</footer>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
<script src="/script.js"></script>
<script defer src="/static/agent-odoo4projects/agent.js"></script>
<script src="/script.js?v=d2046e3469"></script>
<script defer src="/static/agent-odoo4projects/agent.js?v=c3bb0cee2b"></script>
</body>
</html>
+2 -2
View File
@@ -38,7 +38,7 @@
onload="this.media='all'"
/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="stylesheet" href="/style.css" />
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<style>
/* ---- Odoo Community Upgrade page (page-scoped; additive) ---- */
.oc-sr-only {
@@ -479,7 +479,7 @@
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
<script defer src="/static/lang.js"></script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
+5 -5
View File
@@ -33,7 +33,7 @@
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="preload" as="image" href="/images/hero/bootcamp-hero-mobile-900.webp" media="(max-width: 640px)" fetchpriority="high" />
<link rel="preload" as="image" href="/images/hero/bootcamp-hero-desktop-1920.webp" media="(min-width: 641px)" fetchpriority="high" />
<link rel="stylesheet" href="/style.css" />
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<style>
/* ---- ODOO ERP Automation Bootcamp landing page (page-scoped; additive) ---- */
.bc-sr-only {
@@ -1018,9 +1018,9 @@
<div class="fcopy">Copyright &copy; ODOO4projects LLC</div>
</div>
</footer>
<script defer src="/static/buy.js"></script>
<script defer src="/static/bootcamp-availability.js"></script>
<script defer src="/static/bootcamp-waitlist.js"></script>
<script defer src="/static/lang.js"></script>
<script defer src="/static/buy.js?v=31314de600"></script>
<script defer src="/static/bootcamp-availability.js?v=94dfd8cd7c"></script>
<script defer src="/static/bootcamp-waitlist.js?v=6c2e2fbd33"></script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</body>
</html>
+2 -2
View File
@@ -31,7 +31,7 @@
onload="this.media='all'"
/>
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Marcellus&display=swap" /></noscript>
<link rel="stylesheet" href="/style.css" />
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<style>
/* ---- Odoo Hosting 2027 landing page (page-scoped; additive) ---- */
.cmp-sr-only {
@@ -559,7 +559,7 @@
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
<script defer src="/static/lang.js"></script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</head>
<body>
<!-- Page-scoped top bar: the site has no global header, so the page carries its own way home. -->
+3 -3
View File
@@ -29,7 +29,7 @@
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
/>
<link rel="stylesheet" href="/style.css" />
<link rel="stylesheet" href="/style.css?v=3332fbba93" />
<style>
/* Language selector — the page's top row: the back-link stays left, the selector travels right.
Cream canvas, so lang.js's own dark-brass active colour is the correct one (no override). */
@@ -274,7 +274,7 @@
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
<script defer src="/static/lang.js"></script>
<script defer src="/static/lang.js?v=3ec49a7e62"></script>
</head>
<body>
<main>
@@ -586,6 +586,6 @@
</script>
</main>
<script defer src="/static/agent-odoo4projects/agent.js"></script>
<script defer src="/static/agent-odoo4projects/agent.js?v=c3bb0cee2b"></script>
</body>
</html>