Files
desfoto/README.md

69 lines
3.1 KiB
Markdown

# 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
```bash
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:
```bash
docker compose -f compose.yml up -d
open http://127.0.0.1:18430/
```
## Seiten
Startseite · Fotografie · Businessfotografie · Portrait & Model · Familien & Paare ·
Minishootings · Video · Social Media · Projekte · Über · Kontakt · Impressum ·
Datenschutz — plus eine eigene 404-Seite.
## 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.
## 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.