/* ============================================================= * Stories (Impact) + About — per Fathers Arise Brief * ============================================================= */ function StoriesPage() { const [stories, setStories] = useState([]); const [filter, setFilter] = useState("all"); const [loading, setLoading] = useState(true); // Phase 3.7: editable site content const [cms, setCms] = useState({}); useEffect(() => { window.cms.getStories().then((s) => {setStories(s);setLoading(false);}); if (window.cms && typeof window.cms.getSiteContent === "function") { window.cms.getSiteContent("stories").then(setCms); } }, []); const sHero = cms.hero || {}; // Lightbox: click video card → play; click gallery image → expand const [lightbox, setLightbox] = useState(null); useEffect(() => { if (!lightbox) return; const onKey = (e) => { if (e.key === "Escape") setLightbox(null); }; document.body.style.overflow = "hidden"; window.addEventListener("keydown", onKey); return () => { document.body.style.overflow = ""; window.removeEventListener("keydown", onKey); }; }, [lightbox]); const filtered = filter === "all" ? stories : stories.filter((s) => s.kind === filter); const filters = [ { k: "all", l: "All Stories" }, { k: "be-a-man", l: "Be A Man" }, { k: "nurturing-bonds", l: "Nurturing Bonds" }, { k: "mobile-kanaabe", l: "Mobile Kanaabe" }]; return (
Impact / Stories

{sHero.headline || <>Stories of Transformation}

{sHero.subhead || "Every man in Fathers Arise carries a story. Some are stories of pain. Some are stories of healing. All are stories of becoming. Here are the men who said yes."}

{filters.map((f) => )}
{loading ?
{Array.from({ length: 6 }).map((_, i) =>
)}
:
{filtered.map((s, i) => setLightbox({ kind: "video", videoId: s.videoId, title: s.title, author: s.author })} />)}
}
{/* Podcast section */}
The Podcast

The Fathers Arise Podcast

Monthly episodes featuring father testimonies, expert conversations, and teaching from the B-E-A-M-A-N and Forge curricula.

{/* Gallery — categorized + click-through with arrows */} setLightbox({ kind: "gallery", photos, index })} /> {lightbox && setLightbox(null)} />}
); } function StoryCard({ s, featured, onOpen }) { const isVideo = s.kind === "video"; return (

{s.title}

{s.excerpt}

{s.author}{s.readTime || s.duration}
); } /* ===== About ===== */ function AboutPage() { const [team, setTeam] = useState(null); // Phase 3.7: editable site content from Supabase const [cms, setCms] = useState({}); useEffect(() => { if (window.cms && window.cms.getTeam) { window.cms.getTeam().then((t) => setTeam(t && t.length ? t : null)); } if (window.cms && typeof window.cms.getSiteContent === "function") { window.cms.getSiteContent("about").then(setCms); } }, []); const hero = cms.hero || {}; // Fallback to hardcoded team if Supabase unreachable / table empty const teamMembers = team || [ { img: "uploads/PR ISAAC-59 (1).jpg", name: "Pastor Isaac Mukisa Ssebakijje", role: "Founder & Executive Director" }, { img: "uploads/Staff photos-1.jpg", name: "Hudson Tumusiime", role: "Communications Director" }, { img: "uploads/FATHERS ARISE-153.jpg", name: "Pastor Richard Kyakoonye", role: "Nurturing Bonds Program Lead" }, { img: "uploads/FATHERS ARISE MEETING-68.jpg", name: "Pastor Elisha Lutalo", role: "Be A Man Lead & Mobile Kanaabe Coordinator" } ]; const heroImage = hero.image || "uploads/FATHERS ARISE MEETING-79.jpg"; const heroTitle = hero.headline || "Who We Are"; const heroEyebrow = hero.subhead || "About Us"; const heroAlign = hero.align || "left"; const heroAlignClass = heroAlign === "center" ? "text-center" : heroAlign === "right" ? "text-right" : "text-left"; return (
{/* Hero */}
{heroEyebrow}

{heroTitle}

{/* The Story */}
The Story

Every generation faces a crisis that defines whether it rises or falls. Ours is the crisis of the absent father. Across our communities, our schools, our churches, and our prisons, the evidence is undeniable: when fathers disappear, families collapse. When families collapse, communities crumble. When communities crumble, nations lose their way.

Fathers Arise was not born from theory. It was born from the wreckage — from the pain of children who grew up without a father's voice, from the silence of men who never learned how to stay, from the emptiness of homes that have everything except a present father.

We are not a program. We are a movement. We are the sound of men rising from the ashes of abandonment, silence, and shame — and saying, "It ends with me. The cycle breaks here."

Pastor Isaac
{/* The Crisis */}
The Crisis

The Crisis We Answer

Fatherlessness is not a private family matter. It is the single most destructive force in any society. A boy who grows up without a father is not just missing a parent — he is missing a mirror. He does not know what a man looks like up close. He has no model for how to lead, how to love, how to stay when things get hard. And the wound does not stay in the home. It walks into schools, into relationships, into workplaces, into prisons.

{/* The Founder */}
Pastor Isaac Mukisa
The Founder

Pastor Isaac Mukisa Ssebakijje

Founder & Executive Director

In August 2015, Isaac and Annabelle Mukisa established The Remnant Generation. Out of years of youth outreach — and a recurring question from supporters about boys, men, and fathers — Fathers Arise was born during the COVID-19 lockdown of 2020, when the crisis of fatherlessness became impossible to ignore.

"Fathers Arise exists to restore men to their God-given role as present, responsible, and spiritually grounded fathers who lead their families and communities with integrity."

{/* The Team */}
{teamMembers.map((m, i) =>
{m.name}
{m.name}
{m.role}
)}
{/* Under TRG */}
Our Parent Organisation

Under The Remnant Generation

Fathers Arise operates under The Remnant Generation, a faith-based organisation committed to raising leaders and restoring families across Uganda and beyond.

); } /* ---------- Categorized gallery (Stories page) ---------- */ const STORIES_GALLERIES = [ { key: "sports", label: "Sports", emoji: "\u26bd", photos: ["uploads/sports/Father's Arise Football tournament-116.jpg", "uploads/sports/Father's Arise Football tournament-117.jpg", "uploads/sports/Father's Arise Football tournament-135.jpg", "uploads/sports/Father's Arise Football tournament-138.jpg", "uploads/sports/Father's Arise Football tournament-171.jpg", "uploads/sports/Father's Arise Football tournament-172.jpg", "uploads/sports/Father's Arise Football tournament-173.jpg", "uploads/sports/Father's Arise Football tournament-179.jpg", "uploads/sports/Father's Arise Football tournament-185.jpg", "uploads/sports/Father's Arise Football tournament-74.jpg", "uploads/sports/Father's Arise Football tournament-84.jpg", "uploads/sports/Father's Arise Football tournament-98.jpg", "uploads/sports/Father's Arise Football tournament-99.jpg"] }, { key: "outreach", label: "Outreach", emoji: "\ud83d\ude90", photos: ["uploads/outreach/Fathers Arise-103_Beautify.jpg", "uploads/outreach/Fathers Arise-118_Beautify.jpg", "uploads/outreach/Fathers Arise-131_Beautify.jpg", "uploads/outreach/Fathers Arise-139_Beautify.jpg", "uploads/outreach/Fathers Arise-15_Beautify.jpg", "uploads/outreach/Fathers Arise-16.jpg", "uploads/outreach/Fathers Arise-201_Beautify (1).jpg", "uploads/outreach/Fathers Arise-201_Beautify.jpg", "uploads/outreach/Fathers Arise-246_Beautify.jpg", "uploads/outreach/Fathers Arise-251_Beautify.jpg", "uploads/outreach/Fathers Arise-25_Beautify.jpg", "uploads/outreach/Fathers Arise-282_Beautify.jpg", "uploads/outreach/Fathers Arise-30.jpg", "uploads/outreach/Fathers Arise-309_Beautify.jpg", "uploads/outreach/Fathers Arise-311_Beautify.jpg", "uploads/outreach/Fathers Arise-4.jpg", "uploads/outreach/Fathers Arise-52.jpg", "uploads/outreach/Fathers Arise-58_Beautify.jpg", "uploads/outreach/Fathers Arise-60.jpg", "uploads/outreach/Fathers Arise-96_Beautify.jpg"] }, { key: "forge", label: "The Forge", emoji: "\ud83d\udd25", photos: ["uploads/forge/FATHERS ARISE MEETING-21.jpg", "uploads/forge/FATHERS ARISE MEETING-3.jpg", "uploads/forge/FATHERS ARISE MEETING-7.jpg", "uploads/forge/FATHERS ARISE MEETING-84.jpg", "uploads/forge/Forge 1-102.jpg", "uploads/forge/Forge 1-106.jpg", "uploads/forge/Forge 1-18.jpg", "uploads/forge/Forge 1-36.jpg", "uploads/forge/Forge 1-42.jpg", "uploads/forge/Forge 1-45.jpg", "uploads/forge/Forge 1-58.jpg", "uploads/forge/Forge 1-64.jpg", "uploads/forge/Forge 1-71.jpg", "uploads/forge/Forge 1-8.jpg", "uploads/forge/Forge 1-83.jpg", "uploads/forge/Forge 1-85.jpg", "uploads/forge/Forge 1-95.jpg", "uploads/forge/Forge 1-96.jpg"] }, { key: "breakfast", label: "Father's Breakfast", emoji: "\ud83c\udf73", photos: ["uploads/breakfast/FA--326.jpg", "uploads/breakfast/FA--328.jpg", "uploads/breakfast/FA-09310 (2).jpg", "uploads/breakfast/FA-09319 (1).jpg", "uploads/breakfast/FA-09334.jpg", "uploads/breakfast/FA-09340.jpg", "uploads/breakfast/FATHERS ARISE-135.jpg", "uploads/breakfast/FATHERS ARISE-208.jpg", "uploads/breakfast/FATHERS ARISE-213.jpg", "uploads/breakfast/FATHERS ARISE-226.jpg", "uploads/breakfast/FATHERS ARISE-232.jpg", "uploads/breakfast/FATHERS ARISE-237.jpg", "uploads/breakfast/FATHERS ARISE-270.jpg", "uploads/breakfast/FATHERS ARISE-275.jpg", "uploads/breakfast/FATHERS ARISE-295.jpg", "uploads/breakfast/FATHERS ARISE-304.jpg", "uploads/breakfast/FATHERS ARISE-308.jpg", "uploads/breakfast/FATHERS ARISE-42.jpg", "uploads/breakfast/FATHERS ARISE-90.jpg", "uploads/breakfast/TRG_Father_sBreakfast1.jpg", "uploads/breakfast/TRG_Father_sBreakfast10.jpg", "uploads/breakfast/TRG_Father_sBreakfast110.jpg", "uploads/breakfast/TRG_Father_sBreakfast115.jpg", "uploads/breakfast/TRG_Father_sBreakfast118.jpg", "uploads/breakfast/TRG_Father_sBreakfast121.jpg", "uploads/breakfast/TRG_Father_sBreakfast130.jpg", "uploads/breakfast/TRG_Father_sBreakfast156.jpg", "uploads/breakfast/TRG_Father_sBreakfast161.jpg", "uploads/breakfast/TRG_Father_sBreakfast162.jpg", "uploads/breakfast/TRG_Father_sBreakfast164.jpg", "uploads/breakfast/TRG_Father_sBreakfast20.jpg", "uploads/breakfast/TRG_Father_sBreakfast24.jpg", "uploads/breakfast/TRG_Father_sBreakfast27.jpg", "uploads/breakfast/TRG_Father_sBreakfast29.jpg", "uploads/breakfast/TRG_Father_sBreakfast33.jpg", "uploads/breakfast/TRG_Father_sBreakfast41.jpg", "uploads/breakfast/TRG_Father_sBreakfast76.jpg", "uploads/breakfast/TRG_Father_sBreakfast90.jpg", "uploads/breakfast/prof 1.jpg", "uploads/breakfast/prof10 -grad.jpg", "uploads/breakfast/prof2.jpg", "uploads/breakfast/prof4.jpg", "uploads/breakfast/prof5.jpg", "uploads/breakfast/prof6.jpg", "uploads/breakfast/prof8.jpg"] } ]; function CategorizedGallery({ onOpen }) { const [activeCategory, setActiveCategory] = useState(STORIES_GALLERIES[0].key); const current = STORIES_GALLERIES.find(g => g.key === activeCategory) || STORIES_GALLERIES[0]; return (
{/* Category tabs */}
{STORIES_GALLERIES.map((g) => ( ))}
{/* Photo grid for the active category */}
{current.photos.map((src, i) => ( ))}
Showing {current.photos.length} photos · click any to enlarge
); } /* ---------- Lightbox for stories videos + gallery images ---------- */ function Lightbox({ item, onClose }) { // For gallery-kind, track current index for prev/next navigation const [galleryIndex, setGalleryIndex] = useState(item.index || 0); const isGallery = item.kind === "gallery"; const total = isGallery ? item.photos.length : 0; const currentSrc = isGallery ? item.photos[galleryIndex] : null; const goPrev = (e) => { if (e) e.stopPropagation(); setGalleryIndex((galleryIndex - 1 + total) % total); }; const goNext = (e) => { if (e) e.stopPropagation(); setGalleryIndex((galleryIndex + 1) % total); }; // Arrow-key navigation useEffect(() => { if (!isGallery) return; const onKey = (e) => { if (e.key === "ArrowLeft") goPrev(); else if (e.key === "ArrowRight") goNext(); }; window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }); return (
{/* Prev / Next arrows for gallery mode */} {isGallery && total > 1 && ( <> )}
e.stopPropagation()} className="max-w-6xl w-full"> {item.kind === "video" ? (