3.8 KiB
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 indocs/. Es wird nichts vonfonts.googleapis.comgeladen. - 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.confschaltet 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. 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.