"use client" import Link from "next/link" import Image from "next/image" import { useState, useEffect, useRef, useCallback } from "react" import { Nav, Footer } from "./for/_components" import { Landmark, Globe } from "lucide-react" /* ── Hero stats ── */ const HERO_STATS = [ { stat: "30–50%", label: "of pledges never collected" }, { stat: "60s", label: "to complete a pledge" }, { stat: "£0", label: "cost to charities" }, { stat: "2 min", label: "signup to first link" }, ] /* ── Personas ── */ const PERSONAS = [ { slug: "charities", scenario: "You organized the dinner", stat1: "\u00A350,000 pledged.", stat2: "\u00A322,000 collected.", copy: "The speeches landed. The pledges poured in. Then Monday came \u2014 and the spreadsheet started. We follow up automatically. They pay. You stay focused on the mission.", cta: "For charity organizers", image: "/images/brand/event-01-speaker-passion.jpg", }, { slug: "fundraisers", scenario: "You shared the link", stat1: "23 said \u201CI\u2019ll donate.\u201D", stat2: "8 actually did.", copy: "You shared it on WhatsApp, posted on Instagram, mentioned it over dinner. People promised. Then life got busy. We track every promise and send the reminders \u2014 so you don\u2019t have to chase friends.", cta: "For personal fundraisers", image: "/images/brand/ramadan-05-charity-collection.jpg", }, { slug: "volunteers", scenario: "You were on the ground", stat1: "40 pledges collected.", stat2: "0 updates received.", copy: "You spent the evening going table to table. Smiling, explaining, handing out cards. You went home and never found out what happened next. With us, you see every payment \u2014 live.", cta: "For event volunteers", image: "/images/brand/event-06-volunteer-serving.jpg", }, { slug: "organisations", scenario: "You claim the Gift Aid", stat1: "200 rows. 47 typos.", stat2: "6 hours every quarter.", copy: "Names, amounts, home addresses, declaration dates. Half the records are incomplete. Every quarter, you build the spreadsheet from scratch. We give you a one\u2011click HMRC export \u2014 every field, every time.", cta: "For treasurers", image: "/images/brand/ops-03-laptop-late-night.jpg", }, ] /* ── FAQ ── */ const FAQS = [ { q: "How is this free? What\u2019s the catch?", a: "No catch. No tiers. No \u201Cupgrade to unlock.\u201D The tool is genuinely free because it helps us identify charities that need broader technology support. If your org grows beyond pledge collection, we offer fractional Head of Technology services \u2014 but that\u2019s a separate conversation you\u2019d start, not us.", }, { q: "Will my donors actually use this?", a: "They scan a QR code or tap a link. Three screens: amount, payment method, email or phone. 60 seconds, done. No app download, no account creation. We\u2019ve designed it for the least tech-confident person at your event.", }, { q: "Is this GDPR and HMRC compliant?", a: "Yes. Gift Aid declarations use the exact HMRC model wording with timestamped consent. Email and WhatsApp opt-ins are separate, never pre-ticked, with full audit trails. Data is stored on UK-hosted infrastructure.", }, { q: "We already use JustGiving / LaunchGood / a CRM.", a: "We\u2019re not replacing any of those. We\u2019re the layer between \u201CI\u2019ll donate\u201D and the money reaching your platform. Donors can be redirected to your existing fundraising page to pay. We just make sure they don\u2019t forget.", }, { q: "How long does setup take?", a: "Two minutes. Create an account, name your first event, generate a pledge link. You can test the donor flow on your own phone immediately.", }, { q: "What happens to donor data?", a: "You own it. Export everything as CSV anytime. We never sell or share donor data. When you delete your account, the data goes with it.", }, ] const GALLERY_IMAGES = [ { src: "/images/brand/life-04-family-dinner.jpg", alt: "Multi-generational family sharing dinner at home" }, { src: "/images/brand/everyday-03-school-gate.jpg", alt: "Parents chatting at the school gate" }, { src: "/images/brand/intergen-01-grandma-cooking.jpg", alt: "Grandmother teaching granddaughter to cook" }, { src: "/images/brand/everyday-04-nhs-nurse.jpg", alt: "NHS nurse on a busy shift" }, { src: "/images/brand/life-05-eid-morning.jpg", alt: "Eid morning celebrations outside the mosque" }, { src: "/images/brand/sport-01-football.jpg", alt: "Weekend football in the park" }, { src: "/images/brand/season-02-rainy-commute.jpg", alt: "Rainy London commute" }, { src: "/images/brand/intergen-02-walking-together.jpg", alt: "Grandfather and grandson walking together" }, { src: "/images/brand/ramadan-04-suhoor-kitchen.jpg", alt: "Pre-dawn suhoor preparation in the kitchen" }, { src: "/images/brand/everyday-01-barbershop.jpg", alt: "Local barbershop conversation" }, { src: "/images/brand/youth-02-mentoring.jpg", alt: "Young mentor working with a student" }, { src: "/images/brand/life-02-food-prep.jpg", alt: "Women preparing food in the community kitchen" }, { src: "/images/brand/season-03-park-summer.jpg", alt: "Summer afternoon in the park" }, { src: "/images/brand/everyday-05-taxi-driver.jpg", alt: "Taxi driver between fares" }, { src: "/images/brand/sacred-03-dua-hands.jpg", alt: "Hands raised in quiet dua" }, { src: "/images/brand/intergen-03-tech-help.jpg", alt: "Grandchild helping elder with a phone" }, { src: "/images/brand/sport-03-cricket-park.jpg", alt: "Cricket match in the park" }, { src: "/images/brand/everyday-02-corner-shop.jpg", alt: "Corner shop chat with the shopkeeper" }, { src: "/images/brand/life-06-charity-shop.jpg", alt: "Browsing the local charity shop" }, { src: "/images/brand/youth-03-childrens-class.jpg", alt: "Children's class at the community centre" }, { src: "/images/brand/season-01-winter-coats.jpg", alt: "Bundled up in winter coats" }, { src: "/images/brand/everyday-06-graduation.jpg", alt: "Graduation day with the whole family" }, { src: "/images/brand/intergen-04-mosque-elders.jpg", alt: "Elders gathered at the mosque" }, { src: "/images/brand/sacred-01-wudu.jpg", alt: "Wudu before prayer" }, { src: "/images/brand/sport-02-sisters-gym.jpg", alt: "Sisters gym session" }, { src: "/images/brand/life-01-mosque-exterior.jpg", alt: "The mosque at golden hour" }, { src: "/images/brand/season-04-snow-mosque.jpg", alt: "Snow falling outside the mosque" }, { src: "/images/brand/youth-01-workshop.jpg", alt: "Youth workshop in full swing" }, ] const SLIDE_DIR: [string, string] = ["translateX(100%)", "translateX(-100%)"] // slide from right const SLIDE_SPEED = 150 // ms — fast snap-slide const SLIDE_INTERVAL = 3500 function GallerySlideshow() { const [idx, setIdx] = useState(0) const [prevIdx, setPrevIdx] = useState(-1) const [phase, setPhase] = useState<"idle" | "prep" | "go">("idle") const dirRef = useRef(SLIDE_DIR) const inRef = useRef(null) const outRef = useRef(null) const advance = useCallback(() => { setIdx((i) => { setPrevIdx(i); return (i + 1) % GALLERY_IMAGES.length }) setPhase("prep") }, []) useEffect(() => { if (phase === "prep") { if (inRef.current) { inRef.current.style.transition = "none"; inRef.current.style.transform = dirRef.current[0] } if (outRef.current) { outRef.current.style.transition = "none"; outRef.current.style.transform = "translate(0,0)" } requestAnimationFrame(() => requestAnimationFrame(() => setPhase("go"))) } if (phase === "go") { const t = `transform ${SLIDE_SPEED}ms cubic-bezier(0.16, 1, 0.3, 1)` if (inRef.current) { inRef.current.style.transition = t; inRef.current.style.transform = "translate(0,0)" } if (outRef.current) { outRef.current.style.transition = t; outRef.current.style.transform = dirRef.current[1] } const timer = setTimeout(() => { setPrevIdx(-1); setPhase("idle") }, SLIDE_SPEED + 10) return () => clearTimeout(timer) } }, [phase]) useEffect(() => { const t = setInterval(advance, SLIDE_INTERVAL) return () => clearInterval(t) }, [advance]) return (
{prevIdx !== -1 && (
{GALLERY_IMAGES[prevIdx].alt}
)}
{GALLERY_IMAGES[idx].alt}
) } export default function HomePage() { return (
) }