Split landing hero into interactive webcam grid

- Move hero into its own client component
- Add webcam-backed pixel grid background
- Update landing wiring and content test coverage
This commit is contained in:
2026-05-06 09:10:14 +02:00
parent 2032395472
commit 9faca2a859
6 changed files with 761 additions and 76 deletions

View File

@@ -2,10 +2,15 @@ import { readFile } from "node:fs/promises";
import test from "node:test";
import assert from "node:assert/strict";
const componentPath = new URL("../src/components/landing.tsx", import.meta.url);
const sourcePaths = [
new URL("../src/components/landing.tsx", import.meta.url),
new URL("../src/components/landing-hero-section.tsx", import.meta.url),
];
test("Landing component contains the core brief anchors", async () => {
const source = await readFile(componentPath, "utf8");
const source = (
await Promise.all(sourcePaths.map((p) => readFile(p, "utf8")))
).join("\n");
for (const phrase of ["Projektbrief", "01", "Website", "Kontakt", "für", "müssen", "Änderungen"]) {
assert.match(source, new RegExp(phrase));
@@ -13,7 +18,9 @@ test("Landing component contains the core brief anchors", async () => {
});
test("Landing component uses real German umlauts in visible copy", async () => {
const source = await readFile(componentPath, "utf8");
const source = (
await Promise.all(sourcePaths.map((p) => readFile(p, "utf8")))
).join("\n");
for (const asciiFallback of [
"fuer",