feat: Hero-Hintergrundvideo im Admin, ScrollReveal + Bild-Perf auf Unterseiten
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 2m31s

Neues admin-editierbares Hintergrundvideo fuer den Startseiten-Hero
(home.hero.video, MP4/WebM) mit eigenem, magic-byte-validiertem
Upload-Endpunkt (app/api/admin/upload-video) analog zur bestehenden
Bild-Upload-Pipeline. Ausserdem: ScrollReveal-Animation von der
Startseite auf Imkerei, Herkunft, Unternehmen, Ernten, Wissen, Kontakt,
Shop sowie die Produkt-/Ernte-/Chargen-Detailseiten ausgerollt (bisher
nur Startseite), priority auf bislang lazy geladene Above-the-fold-Bilder
(Herkunft/Unternehmen) gesetzt, und passende sizes-Hints auf Grid-Bilder
(Produktkarten, Origin/Regional/Business-Teaser, Ernten-Liste) ergaenzt
statt voller Viewport-Breite.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Sonnet 5 committed 2026-09-11 14:53:14 +02:00
1 parent 398db5c5ec
commit 6814e9e2c8
25 files changed
+524 -119

No files matched your search

+8 -5
View File
@@ -1,5 +1,6 @@
import type { Metadata } from "next";
import { Container, SectionHeading } from "@/components/ui";
import { ScrollReveal } from "@/components/scroll-reveal";
import { getCompanyInfo } from "@/lib/company-info";
import { getLocale } from "@/i18n/locale";
import { getDictionary } from "@/i18n/get-dictionary";
@@ -19,9 +20,11 @@ export default async function KontaktPage() {
return (
<div className="py-20">
<Container className="max-w-2xl">
<SectionHeading level="h1" eyebrow={t.kontaktPage.eyebrow} title={t.kontaktPage.title} />
<ScrollReveal>
<SectionHeading level="h1" eyebrow={t.kontaktPage.eyebrow} title={t.kontaktPage.title} />
</ScrollReveal>
<div className="mt-10 space-y-2 text-ink/75">
<ScrollReveal delay={0.1} className="mt-10 space-y-2 text-ink/75">
<p>{company.name}</p>
<p>{company.address.street}</p>
<p>
@@ -33,14 +36,14 @@ export default async function KontaktPage() {
</a>
</p>
<p>{company.phone}</p>
</div>
</ScrollReveal>
<div className="mt-12 border-t border-ink/10 pt-8">
<ScrollReveal delay={0.18} className="mt-12 border-t border-ink/10 pt-8">
<h2 className="text-lg text-forest">{t.kontaktPage.pickupHeading}</h2>
<p className="mt-2 text-sm text-ink/65 leading-relaxed">
{t.kontaktPage.pickupText}
</p>
</div>
</ScrollReveal>
</Container>
</div>
);