/* 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 (
{/* Header */}
Real Weddings · 2022–2024

Real couples. Real rooms.
Told in full.

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.

{/* Filter */}
{D.traditions.map(t => ( ))}
{/* Grid */}
{filtered.map((w, i) => (
openWedding(w.id)}>
{w.title}
{w.traditionLabel} {w.year} · {w.guestBand}
{w.title}
{w.venue} · {w.city}
))}
{filtered.length === 0 && (

No stories published yet in this tradition.

More case studies in publication — pending consent.

)}
{/* CTA */}

Imagining yours? Let's talk.

setRoute("contact")}>Book a consultation WhatsApp ↗
); } function CaseStudyPage({ weddingId, setRoute, openWedding }) { const D = window.JAM; const w = D.weddings.find(x => x.id === weddingId) || D.weddings[0]; const [lbIndex, setLbIndex] = useState(null); const related = D.weddings.filter(x => x.id !== w.id).slice(0, 3); return (
{/* Breadcrumb */}

setRoute("real-weddings")} style={{ borderBottom: "1px solid var(--border-strong)", paddingBottom: 2 }}>Real Weddings   /   {w.traditionLabel}

{/* Hero */}
{w.title}
{/* Title block */}
{w.traditionLabel} · {w.year}

{w.title}

{/* Meta strip */}
Tradition
{w.traditionLabel}
Venue
{w.venue}
Functions
{w.functions.join(", ")}
Guests
{w.guestBand}
Year
{w.year}
{/* Narrative + design notes */}
The story

{w.narrative}

Design moves
    {w.design.split("·").map(item => item.trim()).filter(Boolean).map((it, i) => (
  • 0{i+1} {it}
  • ))}
{/* Gallery */}
Gallery {w.gallery.length} images · click to enlarge
{w.gallery.map((g, i) => (
setLbIndex(i)}>
))}
{/* Credits / consent strip */}

Photography

{w.photographer}

Planning, design & production

Jam Wedding Planner — full team

Consent

Published with couple permission · names redacted by request

{/* Related */}

More real weddings

setRoute("real-weddings")}>All stories
{related.map(r => (
openWedding(r.id)}>
{r.title}
{r.traditionLabel} {r.year}
{r.title}
{r.venue}
))}
{/* CTA */}

Plan your wedding with Jam.

setRoute("contact")}>Book a free consultation
{lbIndex != null && ( setLbIndex(null)} onPrev={() => setLbIndex((lbIndex - 1 + w.gallery.length) % w.gallery.length)} onNext={() => setLbIndex((lbIndex + 1) % w.gallery.length)} /> )}
); } Object.assign(window, { RealWeddingsPage, CaseStudyPage });