feat: pSEO CMS — SSG architecture with git templates + DuckDB

# Conflicts:
#	web/pyproject.toml
This commit is contained in:
Deeman
2026-02-23 12:51:30 +01:00
15 changed files with 1474 additions and 874 deletions

View File

@@ -53,6 +53,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
(`rate_peak`, `rate_off_peak`, `avg_utilisation_pct`, `courts_typical`); adds
`_dataSource` and `_currency` metadata keys
### Changed
- **pSEO CMS: SSG architecture** — templates now live in git as `.md.jinja` files with YAML
frontmatter (slug, data_table, url_pattern, etc.) instead of SQLite `article_templates` table;
data comes directly from DuckDB serving tables instead of intermediary `template_data` table;
admin template views are read-only (edit in git, preview/generate in admin)
- **pSEO CMS: SEO pipeline** — article generation bakes canonical URLs, hreflang links (EN + DE),
JSON-LD structured data (Article, FAQPage, BreadcrumbList), and Open Graph tags into each
article's `seo_head` column at generation time; articles stored with `template_slug`, `language`,
and `date_modified` columns for regeneration and freshness tracking
### Removed
- `article_templates` and `template_data` SQLite tables (migration 0018) — replaced by git
template files + direct DuckDB reads; `template_data_id` FK removed from `articles` and
`published_scenarios` tables
- Admin template CRUD routes (create/edit/delete) and CSV upload — replaced by read-only views
with generate/regenerate/preview actions
- `template_form.html` and `template_data.html` admin templates
### Changed
- **Extraction: one file per source** — replaced monolithic `execute.py` with per-source
modules (`overpass.py`, `eurostat.py`, `playtomic_tenants.py`, `playtomic_availability.py`);