/* JAM — Real Weddings index + Case Study detail */ function RealWeddingsPage({ setRoute, openWedding }) { const D = window.JAM; const initial = window.__JAMFilter || "all"; const [filter, setFilter] = useState(initial); useEffect(() => { if (window.__JAMFilter) { window.__JAMFilter = null; } }, []); const filtered = useMemo(() => ( filter === "all" ? D.weddings : D.weddings.filter(w => w.tradition === filter) ), [filter]); // Counts per tradition const counts = useMemo(() => { const c = { all: D.weddings.length }; D.traditions.forEach(t => { c[t.id] = D.weddings.filter(w => w.tradition === t.id).length; }); return c; }, []); // Span layout — varied sizes by index const layoutFor = (idx, len) => { const patterns = ["wcard-l", "wcard-r", "wcard-m", "wcard-m", "wcard-l", "wcard-r"]; return patterns[idx % patterns.length]; }; return (
Each wedding below is a structured story — tradition, venue, functions covered, guest band, year, photographer credit and the design moves we made. Use the filter to see weddings by tradition.
No stories published yet in this tradition.
More case studies in publication — pending consent.
setRoute("real-weddings")} style={{ borderBottom: "1px solid var(--border-strong)", paddingBottom: 2 }}>Real Weddings / {w.traditionLabel}
{w.narrative}
Photography
{w.photographer}
Planning, design & production
Jam Wedding Planner — full team
Consent
Published with couple permission · names redacted by request