feat: reposition desfoto as an independent brand with four Arbeitsbereiche

This commit is contained in:
desfoto automation
2026-09-19 19:14:42 +02:00
parent 96247da074
commit 68613788b8
86 changed files with 1287 additions and 756 deletions

View File

@@ -48,15 +48,16 @@ ACCENT = (192, 67, 28)
# OpenGraph image per route, built from the page's own key visual.
ROUTE_OG = {
"/": ("music-vocal-blue", "og-desfoto.jpg", "Bilder und Filme, die nicht beliebig aussehen."),
"/shootings/": ("business-portrait-studio", "og-shootings.jpg", "Shootings aus Neumünster"),
"/fotografie/": ("business-portrait-studio", "og-fotografie.jpg", "Fotografie aus Neumünster"),
"/businessfotografie/": ("business-portrait-studio", "og-businessfotografie.jpg", "Businessfotografie"),
"/portrait-und-model/": ("editorial-colour", "og-portrait.jpg", "Portrait & Model"),
"/familien-und-paare/": ("people-joy", "og-familien.jpg", "Familien & Paare"),
"/minishootings/": ("portrait-natural", "og-minishootings.jpg", "Minishootings"),
"/familie/": ("free-portrait-light", "og-familie.jpg", "Familienfotografie"),
"/minishootings/": ("free-modern-portrait", "og-minishootings.jpg", "Minishootings"),
"/video/": ("music-guitar-silhouette", "og-video.jpg", "Videoprojekte"),
"/social-media/": ("event-motion", "og-social-media.jpg", "Social-Media-Inhalte"),
"/musik-und-buehne/": ("music-vocal-blue", "og-musik-und-buehne.jpg", "Musik & Bühne"),
"/social-media/": ("event-speaker", "og-social-media.jpg", "Social-Media-Inhalte"),
"/projekte/": ("free-mountain-view", "og-projekte.jpg", "Eigene Projekte"),
"/ueber/": ("studio-setup", "og-ueber.jpg", "Über desfoto"),
"/ueber/": ("gear-cases", "og-ueber.jpg", "Über desfoto"),
"/kontakt/": ("event-venue", "og-kontakt.jpg", "Kontakt"),
"/impressum/": ("gear-cases", "og-impressum.jpg", "Impressum"),
"/datenschutz/": ("event-venue", "og-datenschutz.jpg", "Datenschutz"),
@@ -563,6 +564,24 @@ def link_check(routes: list[tuple[str, str]]) -> list[str]:
return problems
def prune_stale_pages(routes: list[tuple]) -> None:
"""Remove built pages that no longer belong to the route table.
The build writes into the existing tree, so a renamed route would otherwise
leave its old HTML (and its retired image srcsets) behind and the link check
would keep failing on files nobody serves any more.
"""
expected = {SITE / route[1] for route in routes} | {SITE / "404.html"}
for html in sorted(SITE.rglob("*.html")):
if html in expected:
continue
print(f" [pages] removed stale {html.relative_to(SITE)}")
html.unlink()
parent = html.parent
if parent != SITE and not any(parent.iterdir()):
parent.rmdir()
def normalize_permissions() -> None:
"""Make the build output readable for the serving nginx worker.
@@ -587,6 +606,7 @@ def main() -> int:
build_brand_assets(table)
print("== pages ==")
routes = build_html(table)
prune_stale_pages(routes)
build_meta_files(routes)
build_script()
print("== checks ==")