build: content-hash cache-busting for local CSS/JS (?v=hash)
Deploy to Production on Develop Push / deploy (push) Successful in 20s

Stops deploys being served stale from browser cache — the recurring "changes
do not show up until a hard refresh" problem.

- New tools/cache_bust.py stamps a global content hash onto every local
  <link>/<script> CSS/JS ref AND the @import lines in css/main.css (so partial
  edits bust too). External (https://) refs are untouched. Deterministic and
  idempotent: same content -> same stamp, any asset edit -> new stamp sitewide.
- Wired as the final step of tools/build_site.py so every build/deploy stamps.
- Initial stamp applied across 259 pages + main.css (v=64a53dd6).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
popovskikandClaude Opus 4.8 committed 2026-08-27 18:14:44 +02:00
1 parent 7c2110d8a5
commit 954f186761
262 files changed
+1518 -1435

No files matched your search

@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Планирате да ги продолжите студиите во Словенија? Државјаните на Северна Македонија и на уште неколку земји од Западен Балкан можат да аплицираат за стипендија…">
<link rel="canonical" href="https://msosorg.com/mk/blog/ad-futura-scholarship-slovenia-2026/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/ad-futura-scholarship-slovenia-2026/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -444,9 +444,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Дојдени на крајот на вашето средно образование, со скромни 18 години позади вас треба да одлучите каде ќе го продолжите вашето образование. Дали ќе останете во…">
<link rel="canonical" href="https://msosorg.com/mk/blog/how-i-coped-with-leaving-home/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/how-i-coped-with-leaving-home/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -348,9 +348,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Практичен водич за македонските студенти: документите што ви требаат, како да изберете банка, користење на Flik и ажурирање на вашите податоци откако ќе ја отворите сметката.">
<link rel="canonical" href="https://msosorg.com/mk/blog/how-to-open-slovenian-bank-account/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/how-to-open-slovenian-bank-account/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -422,9 +422,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
+7 -7
View File
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Вистински искуства и практични совети од македонски студенти во Словенија. Нови приказни се на пат.">
<link rel="canonical" href="https://msosorg.com/mk/blog/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/">
@@ -57,7 +57,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Поврзување до главната CSS-датотека -->
<link rel="stylesheet" href="../../css/main.css">
<link rel="stylesheet" href="../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -434,11 +434,11 @@
</div>
</footer>
<!-- END_FOOTER -->
<script src="../../blog-filter.js"></script>
<script src="../../blog-filter.js?v=64a53dd6"></script>
<script src="../../main.js"></script>
<script src="../../filter-search.js"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<script src="../../main.js?v=64a53dd6"></script>
<script src="../../filter-search.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Се подготвувате да студирате во Словенија? Не мора да зборувате совршено словенечки пред да пристигнете, но ако ги научите основите навреме, многу полесно ќе…">
<link rel="canonical" href="https://msosorg.com/mk/blog/learning-slovene-where-to-start/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/learning-slovene-where-to-start/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -381,9 +381,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Дали сте странски државјанин со македонско потекло кој живее во Словенија или во друга земја опфатена со конкурсот? Министерството за образование и наука на…">
<link rel="canonical" href="https://msosorg.com/mk/blog/study-in-north-macedonia-government-scholarship-2026-2027/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/study-in-north-macedonia-government-scholarship-2026-2027/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -393,9 +393,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Почетокот на студиите во друга држава е полесен кога знаете каде треба да одите, кого да прашате и што ќе се случува во првите денови. Главните универзитети во…">
<link rel="canonical" href="https://msosorg.com/mk/blog/welcome-days-slovenian-universities-2026-2027/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/welcome-days-slovenian-universities-2026-2027/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -384,9 +384,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>
@@ -21,7 +21,7 @@
gtag('js', new Date());
gtag('config', 'G-WVYV807VSS');
</script>
<script src="/consent.js" defer></script>
<script src="/consent.js?v=64a53dd6" defer></script>
<meta name="description" content="Пронаоѓањето сместување често е еден од најстресните делови од преселбата во Словенија, особено во Љубљана и на приморјето. Најдобриот пристап е да започнете…">
<link rel="canonical" href="https://msosorg.com/mk/blog/where-to-search-for-accommodation-in-slovenia/">
<link rel="alternate" hreflang="en" href="https://msosorg.com/en/blog/where-to-search-for-accommodation-in-slovenia/">
@@ -59,7 +59,7 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media=&#39;all&#39;" /><noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" /></noscript>
<!-- Correct path to the main CSS file -->
<link rel="stylesheet" href="../../../css/main.css">
<link rel="stylesheet" href="../../../css/main.css?v=64a53dd6">
</head>
<body>
@@ -431,9 +431,9 @@
</footer>
<!-- END_FOOTER -->
<script src="../../../main.js"></script>
<script src="../../../main.js?v=64a53dd6"></script>
<link rel="stylesheet" href="/assistant.css">
<script src="/assistant.js" defer></script>
<link rel="stylesheet" href="/assistant.css?v=64a53dd6">
<script src="/assistant.js?v=64a53dd6" defer></script>
</body>
</html>