From c574fe7e62586aba2282eae02c10ca60003003e4 Mon Sep 17 00:00:00 2001 From: Deeman Date: Tue, 24 Feb 2026 02:14:14 +0100 Subject: [PATCH] docs: update CHANGELOG and PROJECT.md for pSEO template improvements Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ PROJECT.md | 4 +++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b30abe7..b0031cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,32 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Fixed +- **Double language prefix in article URLs** — articles were served at + `/en/en/markets/italy` (double prefix) because `generate_articles()` stored + `url_path` with the lang prefix baked in, but the blueprint is already mounted + at `/`. Now `url_path` is stored without the prefix; canonical URLs, + breadcrumbs, sitemap, and admin links all generate correct single-prefix URLs. +- **`/markets` removed from RESERVED_PREFIXES** — pSEO articles live under + `/markets/` and the explicit `/markets` route takes priority over the catch-all, + so the reservation was blocking article generation. +- **`country-overview` schema_type** — changed from `[Article]` to + `[Article, FAQPage]` to enable FAQ rich results for existing FAQ content. + ### Added +- **Bilingual pSEO templates (DE + EN)** — all 3 article templates + (`city-cost-de`, `city-pricing`, `country-overview`) now generate proper + German prose via `{% if language == "de" %}` conditionals. German text uses + informal "Du/Dein", natural business German (not calque translation), and + localized labels/units (€/Std, Hauptzeit/Nebenzeit, etc.). +- **Expanded English pSEO content** — all 3 templates expanded from ~400–900 + words to ~1300–1500 words each. Added: Market Context/Landscape sections, + analytical commentary after scenario markers, cross-template links + (cost ↔ pricing ↔ country), planner links in FAQ answers, second CTA at + bottom of each article, 2 additional FAQ questions per template. +- **Scenario cross-reference** — `city-pricing` template now embeds + `[scenario:city-cost-de-{{ city_key }}:operating]` to show operating cost + data from the investment analysis template. - **CMS admin improvement** — articles list now has HTMX filter bar (search, status, template, language), pagination (50/page), and stats strip (total/live/scheduled/draft counts). Article actions (publish/unpublish, diff --git a/PROJECT.md b/PROJECT.md index 4b3c5dc..40e6064 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -1,7 +1,7 @@ # Padelnomics — Project Tracker > Move tasks across columns as you work. Add new tasks at the top of the relevant column. -> Last updated: 2026-02-23. +> Last updated: 2026-02-24. --- @@ -80,6 +80,8 @@ - [x] Per-city financial model overrides (rates, rent, utilities, permits, court config) - [x] Admin CMS (template CRUD, data row management, bulk CSV upload, bulk generate, publish toggle, rebuild) - [x] Admin CMS v2: HTMX filter/search/pagination, background generation, inline actions, sitemap invalidation, markdown editing +- [x] pSEO template improvements: bilingual DE+EN (all 3 templates), expanded content depth (~1500 words), cross-template links, scenario cross-references, FAQPage schema fix, 2 extra FAQs per template, second CTAs +- [x] URL prefix fix: articles stored without lang prefix (was causing `/en/en/markets/...`), all consumers updated - [x] Markets hub (`//markets`) — article listing with FTS + country/region filters - [x] DuckDB refresh script (`refresh_from_daas.py`)