feat: reposition desfoto as an independent brand with four Arbeitsbereiche
This commit is contained in:
@@ -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 ==")
|
||||
|
||||
Reference in New Issue
Block a user