Files
msos/tools
popovskikandClaude Opus 4.8 903faf54fe content(mss-2026): add sponsor logo + event banners, update venue to NLB branch
- Add Capital Asset Management sponsor logo (images/partners/capital.png),
  replacing the plain-text sponsor name in the event partners row.
- Set the in-article hero to the clean event banner (mss-2026-hero.webp) and
  the News/homepage listing cards to the sponsor-strip promo variant
  (mss-2026-card.webp) via a new front-matter `card:` field.
- Update the venue everywhere (event page key info + prose + confirmation
  text, and the homepage promo banner) to
  "НЛБ експозитура, локација East Gate Mall, Скопје" (EN: NLB branch;
  SI: poslovalnica NLB), across all three languages.

Build tooling: build_content emits an optional data-card on the hero <img>;
build_listings prefers data-card as the listing thumbnail so the card can
differ from the in-article hero. Rebuilt news pages, listings and search index.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-27 07:05:41 +02:00
..

tools/

content_index.py

Reads the content/ source tree (front-matter) as structured data. Its load_dates() builds the article date registry consumed by seo_inject.py, so adding a post no longer needs a manual ARTICLE_DATES edit — the date lives in the post's front-matter (date / date_type). See docs/content-model.md.

build_site.py

One command to build the whole site from content/, in dependency order (content pages -> listings -> SEO/sitemap -> bot links -> search index). This is what CI runs before deploying. --check verifies without writing; --images also runs image optimisation. Idempotent. See docs/local-preview.md.

build_content.py

Renders the content/ source files into the blog/news/event detail pages (--check verifies the output matches the current site; --write emits pages). See docs/content-model.md and the no-code CMS plan in docs/plans/.

seo_inject.py

Injects a technical-SEO block into every language page (en|mk|si/**/index.html) and regenerates sitemap.xml + robots.txt. Safe to re-run — the block lives between <!-- SEO:START --> and <!-- SEO:END --> and is replaced in place.

The block adds: meta description (auto-extracted from the page's lead/subtitle where available), canonical, hreflang alternates (en / mk / sl / x-default), Open Graph, Twitter Card, and an Organization JSON-LD.

All absolute URLs point at the final domain https://msosorg.com (not the temporary host), so nothing needs rewriting at launch. Note: the Slovene folder is /si/ but the ISO code is sl — the script maps si → sl for hreflang/locale.

Usage

python tools/seo_inject.py            # dry run: print the block for pilot pages
python tools/seo_inject.py --all      # write the block into every page
python tools/seo_inject.py --all --sitemap   # also rebuild sitemap.xml + robots.txt

Run --all --sitemap after adding, renaming, or deleting any page so canonical tags, hreflang alternates, and the sitemap stay in sync.