From 7e2c7b7dddae931ee569c4077c89b5db1a189c7d Mon Sep 17 00:00:00 2001 From: muraschal Date: Thu, 25 Jun 2026 23:00:38 +0200 Subject: [PATCH] feat(web): show the per-audit hero image in the homepage audit cards The "13 audits, one methodology" grid cards now lead with the same Verified-Systems-Lab hero (16:9 image header, content below), reusing the server-side heroSrc lookup. Graceful fallback: no image -> the original text-only card. next/image lazy-loads the grid (responsive sizes), subtle hover zoom; decorative alt (the name + blurb carry the meaning). Co-Authored-By: Claude Opus 4.8 (1M context) --- web/components/landing.tsx | 45 +++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/web/components/landing.tsx b/web/components/landing.tsx index 19ba70c..5312a37 100644 --- a/web/components/landing.tsx +++ b/web/components/landing.tsx @@ -1,3 +1,4 @@ +import Image from "next/image"; import { ArrowDown, ArrowRight, CircleDot, Search, ShieldCheck, Terminal } from "lucide-react"; import { CommandBlock, CopyCommandButton } from "@/components/copy-command"; import { GitHubMark } from "@/components/icons"; @@ -17,6 +18,7 @@ import { VERSION, } from "@/lib/content"; import { glossify } from "@/lib/glossary"; +import { heroSrc } from "@/lib/heroes"; import { DESCRIPTION, SITE_URL } from "@/lib/site"; import { type Lang, @@ -388,19 +390,36 @@ function Audits({ lang }: { lang: Lang }) { lead={tt.audLead} >
- {auditsFor(lang).map((a, i) => ( - - - -

{a.name}

-

{glossify(a.blurb, lang)}

-

{glossify(a.mapsTo, lang)}

-
-
- ))} + {auditsFor(lang).map((a, i) => { + const hero = heroSrc(a.name); + return ( + + + {hero && ( +
+ +
+ )} +
+ +

{a.name}

+

{glossify(a.blurb, lang)}

+

{glossify(a.mapsTo, lang)}

+
+
+
+ ); + })}
);