desfoto.de

Quellcode und Deployment für https://desfoto.de — die Foto- und Videoproduktion von Denny Schulz aus Neumünster.

Die Seite ist bewusst als statische Website gebaut: kein Framework, kein CMS, keine Datenbank. scripts/build-site.py erzeugt aus src/ und den heruntergeladenen Originaldateien in assets-src/ das vollständige, auslieferbare Verzeichnis site/.

Aufbau

Pfad Inhalt
src/content.py Alle redaktionellen Inhalte, Kontaktdaten und Pflichtangaben
src/pages.py Die 13 Seiten und die 404-Seite als HTML-Fabriken
src/layout.py Grundgerüst, Navigation, <head>, Bild-Helfer
src/theme.py Design-Tokens und das komplette Stylesheet
src/images.json Zuordnung der Bildmotive aus dem eigenen Bilderpool
scripts/fetch-assets.py Lädt Bilderpool, Google-Fonts-Subsets und Lizenzen
scripts/build-site.py Erzeugt site/ inkl. WebP-Varianten, OG-Bildern, Sitemap
tests/test_site.py Struktur-, Datenschutz- und Inhaltstests
site/ Generiertes Ergebnis — wird so ausgeliefert (committet)
assets-src/ Heruntergeladene Quellen (nicht im Git, per Skript reproduzierbar)
.ocauto/ QA-, Deploy- und Verify-Hooks
docs/deployment.md Produktionsablauf, Rollback, Infrastruktur

Lokal bauen und prüfen

python3 scripts/fetch-assets.py     # einmalig, braucht Zugriff auf den Bilderpool
python3 scripts/build-site.py       # schreibt site/
.ocauto/qa                          # vollständige deterministische Prüfung

Der lokale Server läuft über Docker Compose:

docker compose -f compose.yml up -d
open http://127.0.0.1:18430/

Seiten

Startseite · Fotografie · Businessfotografie · Portrait & Model · Familie · Minishootings · Video · Social Media · Projekte · Über · Kontakt · Impressum · Datenschutz — plus eine eigene 404-Seite.

Der GTIN-Generator unter /gtin/ ist ein separates, öffentlich direkt aufrufbares Werkzeug. Er bleibt absichtlich unverlinkt, fehlt in der Sitemap und trägt noindex,nofollow; nur das Werkzeug selbst verlinkt auf seine eigenständigen Rechtstexte unter /gtin/impressum/ und /gtin/datenschutz/. Diese Seiten verwenden keine Navigation oder Rechtstexte des Hauptauftritts.

Technische Entscheidungen

  • Schriften selbst gehostet. Fraunces (Display) und Manrope (Text) werden als Google-Fonts-woff2-Subsets mitgeliefert, dazu die OFL-Lizenzen in docs/. Es wird nichts von fonts.googleapis.com geladen.
  • Bilder als WebP in mehreren Breiten. Erzeugt werden nur Breiten, die kleiner oder gleich dem Original sind — nichts wird hochskaliert.
  • YouTube erst nach Klick. Statt eines vorab geladenen iframes gibt es ein Vorschaubild; das eigentliche Video kommt per Klick über youtube-nocookie.com.
  • Kontaktformular ohne Server. Das Formular setzt aus den Eingaben lokal einen E-Mail-Entwurf zusammen. Ohne JavaScript greift mailto: als Fallback. Es gibt keinen API-Endpunkt und keine Datenübertragung an den Server.
  • Keine Zugriffsprotokolle. nginx.conf schaltet das Access-Log ab; es gibt keine Cookies, keine Analyse und keine externen Ressourcen.
  • GTIN-Generator. Der Generator unter /gtin/ rechnet vollständig im Browser, ohne Konto, externe API oder Serverübertragung. Er speichert bis zu 20 zuletzt erzeugte Einträge lokal im Browser; der Offline-Appcache enthält nur die Anwendungsdateien. Der Service Worker speichert die kanonische Startadresse /gtin/ ohne Weiterleitung; jede Änderung am Werkzeug erhält eine neue Cache-Version. Die eigenständige Datenschutzerklärung liegt unter /gtin/datenschutz/; die Rechtstexte sind nicht mit denen des Hauptauftritts verknüpft.

Herkunft der Inhalte

Die Bilder stammen aus dem eigenen Bilderpool des Betreibers und werden als bereits abgeleitete web-Variante geladen. Es werden nur Motive gezeigt, für die die Rechte vorliegen. Alle gezeigten Personen sind mit der Veröffentlichung einverstanden.

Description
desfoto.de - hand-written static photography and video site
Readme 37 MiB
Languages
HTML 41.7%
Python 30.8%
JavaScript 16.7%
CSS 7.7%
Shell 3.1%