msos/tools/git-hooks
popovskik 0d49293693 GEO: FAQPage/NGO/Event schema + autonomous generation for new projects
Generative Engine Optimization pass so AI answer engines (ChatGPT, Gemini,
Perplexity, AI Overviews) can confidently identify and cite MSOS.

Schema (tools/seo_inject.py, propagated to all 231 pages):
- FAQPage JSON-LD parsed from the /faq/ Q&A blocks (33 Q&A x EN/MK/SI)
- Organization upgraded to NGO with entity-disambiguation fields:
  alternateName (all spellings), description, areaServed Slovenia,
  knowsLanguage, and foundingDate 2023-03-05
- Event JSON-LD on all 9 /projects/ recap pages (date + real location)

Autonomous for future content (no code edits to add a project):
- Event/Article dates auto-read from the English page's publish date;
  event city auto-detected from the body (Slovenian-city whitelist).
  ARTICLE_DATES/PROJECT_LOCATIONS are now optional overrides only.
  (Auto-detect corrected Paint & Wine to Nova Gorica.)
- build_listings.py: auto-date fallback so undated new content still lists
- pre-commit hook now runs seo_inject.py --all --sitemap first, then
  listings/botlinks, and re-stages changed pages (idempotent)

Docs: docs/geo-offsite-worklist.md - copy-paste-ready off-site plan
(Wikidata, Wikipedia fixes, directories, Google Business, AI-visibility tests).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-07 22:17:03 +02:00
..
README.md Add pre-commit hook to auto-sync News/homepage/bot pages 2026-08-05 18:32:55 +02:00
pre-commit GEO: FAQPage/NGO/Event schema + autonomous generation for new projects 2026-08-07 22:17:03 +02:00

README.md

Git hooks

Versioned hooks that keep auto-generated files in sync.

Activate (once per clone)

git config core.hooksPath tools/git-hooks

That points git at this folder. From then on, every git commit runs tools/build_listings.py and tools/build_botlinks.py and stages their output, so the News hub, homepage "Latest news", /llms.txt and /links-for-bots/ stay in sync with the actual Blog / Projects / News pages.

The hook never blocks a commit — if Python or a generator fails it just prints a warning and lets the commit proceed.

Note: SEO metadata and the sitemap are not regenerated on commit (that is a heavier, all-pages pass). When you add a new page, also add its date to ARTICLE_DATES in tools/seo_inject.py and run python tools/seo_inject.py --all --sitemap.