Align site copy and structure with client foundation brief
Add About, Mission, What We Do, Events, and Contact pages; update hero, footer, nav, EIN 33-4887159, and [email protected]; warm cream/beige palette and faith-centered messaging for LA County outreach. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+87
-91
@@ -67,6 +67,16 @@ import MimChatAgent from './components/MimChatAgent'
|
||||
import { Navigation } from './components/Navigation'
|
||||
import { Footer } from './components/Footer'
|
||||
import { BrandAssetsPage } from './pages/BrandPage'
|
||||
import {
|
||||
AboutPage,
|
||||
ContactPage,
|
||||
EventsPage,
|
||||
MissionPage,
|
||||
StoriesIntroBlock,
|
||||
WhatWeDoPage,
|
||||
} from './pages/foundation'
|
||||
import { WhoWeServe } from './components/home/WhoWeServe'
|
||||
import { SITE, WHAT_WE_DO } from './content/siteContent'
|
||||
|
||||
/**
|
||||
* Miracles in Motion — Complete Non-Profit Website
|
||||
@@ -590,11 +600,6 @@ interface FeatureCardProps {
|
||||
body: string
|
||||
}
|
||||
|
||||
interface StatProps {
|
||||
label: string
|
||||
value: number
|
||||
}
|
||||
|
||||
interface SectionHeaderProps {
|
||||
eyebrow?: string
|
||||
title: string
|
||||
@@ -788,6 +793,7 @@ function HomePage() {
|
||||
return (
|
||||
<>
|
||||
<Hero />
|
||||
<WhoWeServe />
|
||||
<PartnerMarquee />
|
||||
<Programs />
|
||||
<Impact />
|
||||
@@ -813,7 +819,7 @@ function Hero() {
|
||||
<section ref={containerRef} className="relative isolate overflow-hidden min-h-screen flex items-center">
|
||||
{/* Enhanced 3D Background Layers */}
|
||||
<motion.div
|
||||
className="absolute inset-0 bg-gradient-to-br from-primary-50/30 via-white to-secondary-50/30 dark:from-gray-900/30 dark:via-gray-800/30 dark:to-gray-900/30"
|
||||
className="absolute inset-0 bg-gradient-to-br from-[var(--mim-cream)] via-white to-secondary-50/40 dark:from-gray-900/30 dark:via-gray-800/30 dark:to-gray-900/30"
|
||||
style={{ y: backgroundY }}
|
||||
>
|
||||
<FloatingParticles />
|
||||
@@ -846,19 +852,21 @@ function Hero() {
|
||||
>
|
||||
<div className="lg:col-span-7">
|
||||
<ParallaxContainer depth={0.3}>
|
||||
<p className="text-sm font-medium tracking-wide text-secondary-700 dark:text-secondary-300">
|
||||
{SITE.tagline}
|
||||
</p>
|
||||
<motion.h1
|
||||
initial={{ opacity: 0, y: 12 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ duration: 0.6 }}
|
||||
className="text-balance text-4xl font-bold tracking-tight sm:text-5xl md:text-6xl transform-gpu"
|
||||
className="mt-3 text-balance font-serif text-4xl font-bold tracking-tight sm:text-5xl md:text-6xl transform-gpu"
|
||||
style={{ transformStyle: 'preserve-3d' }}
|
||||
>
|
||||
Equipping kids for success—
|
||||
<span className="relative whitespace-pre gradient-text"> school supplies, clothing, & more</span>
|
||||
{SITE.brandMessage}
|
||||
</motion.h1>
|
||||
<p className="mt-5 max-w-xl text-lg leading-7 text-neutral-700 dark:text-neutral-300">
|
||||
Miracles in Motion is a nonprofit providing students with the essentials they need to thrive: backpacks and notebooks, uniforms and shoes, and the everything-else fund for urgent needs.
|
||||
Bringing hope, compassion, and support to individuals and families facing life’s most difficult moments — through faith, community outreach, and compassionate care in Los Angeles County.
|
||||
</p>
|
||||
<div className="mt-8 flex flex-wrap items-center gap-3">
|
||||
<Magnetic>
|
||||
@@ -869,14 +877,14 @@ function Hero() {
|
||||
<a href="#/volunteers" className="btn-secondary">
|
||||
Volunteer <ArrowRight className="ml-1 h-4 w-4" />
|
||||
</a>
|
||||
<a href="#/stories" className="rounded-full border border-transparent px-4 py-2 text-sm text-neutral-700 underline-offset-4 hover:underline dark:text-neutral-300">
|
||||
Read stories
|
||||
<a href="#/about" className="rounded-full border border-transparent px-4 py-2 text-sm text-neutral-700 underline-offset-4 hover:underline dark:text-neutral-300">
|
||||
About us
|
||||
</a>
|
||||
</div>
|
||||
<ul className="mt-8 flex flex-wrap items-center gap-x-6 gap-y-2 text-sm text-neutral-600 dark:text-neutral-400">
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-emerald-500"/> 501(c)(3) public charity</li>
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-emerald-500"/> Donations tax-deductible</li>
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-emerald-500"/> Community-driven impact</li>
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-secondary-600"/> {SITE.legalStatus}</li>
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-secondary-600"/> EIN {SITE.ein}</li>
|
||||
<li className="flex items-center gap-2"><CheckCircle2 className="h-4 w-4 text-secondary-600"/> Los Angeles County</li>
|
||||
</ul>
|
||||
</ParallaxContainer>
|
||||
</div>
|
||||
@@ -1028,10 +1036,10 @@ function HeroShowcase() {
|
||||
<div className="relative mx-auto max-w-sm lg:max-w-md xl:max-w-lg">
|
||||
<div className="absolute -inset-6 -z-10 rounded-3xl bg-gradient-to-tr from-primary-500/15 via-secondary-500/15 to-secondary-600/15 blur-2xl" />
|
||||
<div className="grid grid-cols-2 gap-3 sm:gap-4">
|
||||
<TiltCard icon={Backpack} title="School Supplies" desc="Backpacks, notebooks, calculators" />
|
||||
<TiltCard icon={Shirt} title="School Clothing" desc="Uniforms, shoes, coats" />
|
||||
<TiltCard icon={Sparkles} title="Everything Else" desc="Glasses, fees, emergencies" />
|
||||
<TiltCard icon={Users} title="Family Support" desc="Referrals & wraparound care" />
|
||||
<TiltCard icon={Users} title="Community Outreach" desc="Direct support for families in need" />
|
||||
<TiltCard icon={Heart} title="Crisis & Relief" desc="Fire, disaster, and emergency assistance" />
|
||||
<TiltCard icon={Shield} title="Advocacy & Navigation" desc="Resources, referrals, and compassionate care" />
|
||||
<TiltCard icon={Sparkles} title="Hope & Restoration" desc="Faith-rooted support when it matters most" />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
@@ -1117,11 +1125,12 @@ function PartnerMarquee() {
|
||||
}
|
||||
|
||||
function Programs() {
|
||||
const items = [
|
||||
{ icon: Backpack, title: "School Supplies", body: "Backpacks, notebooks, art kits, calculators—ready for day one." },
|
||||
{ icon: Shirt, title: "School Clothing", body: "Uniforms, shoes, coats, and seasonal essentials in all sizes." },
|
||||
{ icon: Sparkles, title: "Everything Else", body: "Glasses, test fees, activity passes, hygiene kits—fast relief when needed." },
|
||||
]
|
||||
const icons = [Users, Heart, HomeIcon, Globe, Shield, Star] as const
|
||||
const items = WHAT_WE_DO.slice(0, 3).map((p, idx) => ({
|
||||
icon: icons[idx] ?? Heart,
|
||||
title: p.title,
|
||||
body: p.body,
|
||||
}))
|
||||
|
||||
return (
|
||||
<section id="programs" className="relative py-20 overflow-hidden">
|
||||
@@ -1149,7 +1158,7 @@ function Programs() {
|
||||
|
||||
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 relative z-10">
|
||||
<ParallaxContainer depth={0.2}>
|
||||
<SectionHeader eyebrow="What we do" title="Practical, student-first programs" subtitle="Flexible help that meets families where they are." />
|
||||
<SectionHeader eyebrow="What we do" title="Compassionate support when it matters most" subtitle="Outreach, advocacy, emergency assistance, and resource navigation for vulnerable populations." />
|
||||
</ParallaxContainer>
|
||||
<div className="mt-10 grid gap-6 md:grid-cols-3">
|
||||
{items.map((i, idx) => (
|
||||
@@ -1158,6 +1167,11 @@ function Programs() {
|
||||
</ParallaxContainer>
|
||||
))}
|
||||
</div>
|
||||
<div className="mt-10 text-center">
|
||||
<a href="#/what-we-do" className="btn-secondary">
|
||||
See all programs <ArrowRight className="ml-1 inline h-4 w-4" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
@@ -1216,11 +1230,11 @@ function FeatureCard({ icon: Icon, title, body }: FeatureCardProps) {
|
||||
}
|
||||
|
||||
function Impact() {
|
||||
const stats = [
|
||||
{ label: "Students equipped", value: 4200 },
|
||||
{ label: "Schools partnered", value: 38 },
|
||||
{ label: "Avg. response time (hrs)", value: 24 },
|
||||
{ label: "Counties served", value: 6 },
|
||||
const pillars = [
|
||||
{ label: "Community outreach", desc: "Direct support for underserved families" },
|
||||
{ label: "Emergency assistance", desc: "Crisis, fire, and disaster relief" },
|
||||
{ label: "Advocacy & navigation", desc: "Connecting people to hope and resources" },
|
||||
{ label: "Faith & restoration", desc: "Dignity, empathy, and compassionate care" },
|
||||
]
|
||||
|
||||
return (
|
||||
@@ -1251,41 +1265,38 @@ function Impact() {
|
||||
|
||||
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 relative z-10">
|
||||
<ParallaxContainer depth={0.2}>
|
||||
<SectionHeader eyebrow="Impact" title="Every gift moves a student forward" subtitle="Transparent, measurable outcomes powered by local partnerships." />
|
||||
<SectionHeader eyebrow="Our heart" title="Healing begins when people feel seen" subtitle={SITE.closingLine} />
|
||||
</ParallaxContainer>
|
||||
|
||||
<div className="mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
|
||||
{stats.map((s, i) => (
|
||||
{pillars.map((s, i) => (
|
||||
<ParallaxContainer key={i} depth={0.3 + i * 0.05}>
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 30, rotateX: -15 }}
|
||||
whileInView={{ opacity: 1, y: 0, rotateX: 0 }}
|
||||
initial={{ opacity: 0, y: 30 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
viewport={{ once: true }}
|
||||
transition={{ duration: 0.8, delay: i * 0.15 }}
|
||||
whileHover={{
|
||||
scale: 1.05,
|
||||
rotateY: 8,
|
||||
z: 60,
|
||||
boxShadow: "0 25px 50px -12px rgba(0, 0, 0, 0.25)"
|
||||
}}
|
||||
style={{ transformStyle: 'preserve-3d' }}
|
||||
className="card h-full text-center"
|
||||
>
|
||||
<Stat label={s.label} value={s.value} />
|
||||
<div className="font-semibold tracking-tight text-primary-800 dark:text-primary-100">{s.label}</div>
|
||||
<p className="mt-2 text-sm text-neutral-600 dark:text-neutral-400">{s.desc}</p>
|
||||
</motion.div>
|
||||
</ParallaxContainer>
|
||||
))}
|
||||
</div>
|
||||
<div className="mt-10 grid items-center gap-6 rounded-2xl border border-emerald-500/20 bg-emerald-500/10 p-6 sm:grid-cols-2">
|
||||
<div className="text-sm text-emerald-900 dark:text-emerald-100">
|
||||
<div className="font-medium">Where your donation goes</div>
|
||||
<ul className="mt-3 space-y-2">
|
||||
<li className="flex items-center gap-2"><span className="h-1.5 w-1.5 rounded-full bg-emerald-500"/> 85% programs • 10% ops • 5% fundraising</li>
|
||||
<li className="flex items-center gap-2"><span className="h-1.5 w-1.5 rounded-full bg-emerald-500"/> Average grant: $48 for supplies; $72 for clothing</li>
|
||||
</ul>
|
||||
<div className="mt-10 grid items-center gap-6 rounded-2xl border border-secondary-300/30 bg-secondary-50/50 p-6 sm:grid-cols-2 dark:border-secondary-700/30 dark:bg-secondary-900/20">
|
||||
<div className="text-sm text-primary-900 dark:text-primary-100">
|
||||
<div className="font-medium">Your gift restores hope</div>
|
||||
<p className="mt-3 leading-relaxed">
|
||||
Donations support outreach, emergency assistance, wellness support, and resource navigation for women, families, survivors, and communities in crisis throughout Los Angeles County.
|
||||
</p>
|
||||
</div>
|
||||
<div className="flex items-center justify-end">
|
||||
<a href="#/impact" className="btn-primary">
|
||||
See the impact report <ArrowRight className="ml-2 h-4 w-4" />
|
||||
<div className="flex flex-wrap items-center justify-end gap-3">
|
||||
<a href="#/donate" className="btn-primary">
|
||||
Donate <ArrowRight className="ml-2 h-4 w-4" />
|
||||
</a>
|
||||
<a href="#/stories" className="btn-secondary">
|
||||
Stories of hope
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1294,32 +1305,6 @@ function Impact() {
|
||||
)
|
||||
}
|
||||
|
||||
function Stat({ label, value }: StatProps) {
|
||||
return (
|
||||
<div className="card text-center">
|
||||
<div className="absolute -right-10 -top-10 h-28 w-28 rounded-full bg-gradient-to-br from-primary-500/20 to-secondary-600/20 blur-2xl" />
|
||||
<div className="text-4xl font-semibold tracking-tight">
|
||||
<AnimatedNumber value={value} />
|
||||
</div>
|
||||
<div className="mt-2 text-sm text-neutral-600 dark:text-neutral-300">{label}</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function AnimatedNumber({ value }: { value: number }) {
|
||||
const mv = useMotionValue(0)
|
||||
const spring = useSpring(mv, { stiffness: 90, damping: 15 })
|
||||
const rounded = useTransform(spring, (latest) => Math.floor(latest).toLocaleString())
|
||||
|
||||
useEffect(() => {
|
||||
mv.set(0)
|
||||
const timeout = setTimeout(() => mv.set(value), 150)
|
||||
return () => clearTimeout(timeout)
|
||||
}, [value, mv])
|
||||
|
||||
return <motion.span>{rounded}</motion.span>
|
||||
}
|
||||
|
||||
function HowItWorks() {
|
||||
const steps = [
|
||||
{ title: "Referral", body: "A school counselor, social worker, or parent submits a simple request." },
|
||||
@@ -1583,10 +1568,10 @@ function CTA() {
|
||||
<h3 className="font-medium tracking-tight">Prefer offline?</h3>
|
||||
<ul className="mt-3 space-y-2 text-sm text-white/90">
|
||||
<li className="flex items-center gap-2"><MapPin className="h-4 w-4"/> 20274 Via Medici, Porter Ranch, CA 91326</li>
|
||||
<li className="flex items-center gap-2"><Mail className="h-4 w-4"/> [email protected]</li>
|
||||
<li className="flex items-center gap-2"><Mail className="h-4 w-4"/> {SITE.email}</li>
|
||||
<li className="flex items-center gap-2"><Phone className="h-4 w-4"/> (818) 491-6884</li>
|
||||
</ul>
|
||||
<p className="mt-3 text-xs text-white/80">Miracles in Motion is a 501(c)(3). EIN 88-1234567.</p>
|
||||
<p className="mt-3 text-xs text-white/80">{SITE.legalStatus}. EIN {SITE.ein}.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1995,7 +1980,7 @@ function DonatePage() {
|
||||
<span>Secure 256-bit SSL encryption</span>
|
||||
</div>
|
||||
<p className="text-xs text-neutral-500 dark:text-neutral-500 mt-2">
|
||||
You'll receive an email receipt for your tax records. Donations are tax-deductible to the extent allowed by law. EIN 12-3456789.
|
||||
You'll receive an email receipt for your tax records. Donations are tax-deductible to the extent allowed by law. EIN {SITE.ein}.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2012,7 +1997,7 @@ function DonatePage() {
|
||||
</div>
|
||||
</div>
|
||||
<p className="text-sm text-neutral-700 dark:text-neutral-300 mb-3">
|
||||
Many employers will match your charitable donation. Check with your HR department and provide our EIN: 12-3456789.
|
||||
Many employers will match your charitable donation. Check with your HR department and provide our EIN: {SITE.ein}.
|
||||
</p>
|
||||
<a href="#" className="inline-flex items-center gap-2 text-sm text-primary-600 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-300 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 rounded">
|
||||
<ExternalLink className="h-4 w-4" />
|
||||
@@ -2115,8 +2100,8 @@ function DonatePage() {
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Mail className="h-4 w-4 text-primary-600 dark:text-primary-400" />
|
||||
<a href="mailto:[email protected]" className="text-primary-600 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-300">
|
||||
contact@mim4u.org
|
||||
<a href={SITE.emailHref} className="text-primary-600 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-300">
|
||||
{SITE.email}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -2230,13 +2215,14 @@ function SponsorsPage() {
|
||||
|
||||
function StoriesPage() {
|
||||
const stories = [
|
||||
{ title: "Ready on Day One", tag: "Supplies", body: "A 3rd grader received a backpack and art kit, returning to class with pride.", by: "Ms. Lee, Teacher" },
|
||||
{ title: "Warm for Winter", tag: "Clothing", body: "A high schooler got a coat and shoes before a cold snap—attendance rebounded.", by: "School Social Worker" },
|
||||
{ title: "Glasses for Growth", tag: "Everything Else", body: "A student's new glasses improved reading in two weeks.", by: "Counselor" },
|
||||
{ title: "A family found hope again", tag: "Outreach", body: "After a fire displaced their home, a mother and children received emergency support and compassionate guidance through recovery.", by: "Community partner" },
|
||||
{ title: "Strength after hardship", tag: "Advocacy", body: "A survivor connected with resources and encouragement — reminded that she matters and brighter days are ahead.", by: "Volunteer" },
|
||||
{ title: "Community showed up", tag: "Events", body: "Neighbors and volunteers came together at an outreach event to serve families with supplies, prayer, and heartfelt support.", by: "Event volunteer" },
|
||||
]
|
||||
|
||||
return (
|
||||
<PageShell title="Stories" icon={BookOpenText} eyebrow="Impact in motion" cta={<a href="#/testimonies" className="btn-secondary">Read testimonies</a>}>
|
||||
<PageShell title="Stories of Hope" icon={BookOpenText} eyebrow="Hope in motion" cta={<a href="#/testimonies" className="btn-secondary">Read testimonies</a>}>
|
||||
<StoriesIntroBlock />
|
||||
<div className="grid gap-6 md:grid-cols-3">
|
||||
{stories.map((s, i) => (
|
||||
<article key={i} className="card">
|
||||
@@ -2289,7 +2275,7 @@ function ImpactReportPage() {
|
||||
<PageShell title="Impact Report" icon={BarChart3} eyebrow="Our impact in numbers" cta={<a href="#/donate" className="btn-primary">Donate to support more students</a>}>
|
||||
<div className="max-w-4xl mx-auto space-y-8">
|
||||
<p className="text-lg text-neutral-700 dark:text-neutral-300">
|
||||
Miracles in Motion provides essential supplies, clothing, and support to students in need. Below is a summary of our impact. For the full report or data requests, contact <a className="underline" href="mailto:[email protected]">contact@mim4u.org</a>.
|
||||
Miracles in Motion Foundation serves vulnerable individuals and families across Los Angeles County. For impact updates or data requests, contact <a className="underline" href={SITE.emailHref}>{SITE.email}</a>.
|
||||
</p>
|
||||
<div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
|
||||
<div className="card text-center">
|
||||
@@ -2365,7 +2351,7 @@ function LegalPage() {
|
||||
<p>We aim to meet WCAG 2.1 AA standards. If you encounter accessibility barriers, email <a className="underline" href="mailto:[email protected]">access@miraclesinmotion.org</a>.</p>
|
||||
</PolicySection>
|
||||
<PolicySection id="financials" title="Financials & 990">
|
||||
<p>Miracles in Motion is a 501(c)(3) nonprofit. EIN 12-3456789. Annual reports and Form 990s are available upon request or linked here when published.</p>
|
||||
<p>{SITE.name} is a {SITE.legalStatus.toLowerCase()}. EIN {SITE.ein}. Annual reports and Form 990s are available upon request or linked here when published.</p>
|
||||
</PolicySection>
|
||||
<PolicySection id="sponsorship-terms" title="Sponsorship Terms & Logo Use">
|
||||
<ul className="list-disc pl-5 space-y-2">
|
||||
@@ -4558,7 +4544,7 @@ function AppContent() {
|
||||
// Update document title based on current route
|
||||
useEffect(() => {
|
||||
document.title = currentPath === "/"
|
||||
? "Miracles in Motion — Essentials for Every Student"
|
||||
? `${SITE.name} — ${SITE.brandMessage}`
|
||||
: `Miracles in Motion — ${currentPath.replace("/", "").replace(/-/g, " ").replace(/\b\w/g, (m) => m.toUpperCase())}`
|
||||
}, [currentPath])
|
||||
|
||||
@@ -4579,6 +4565,16 @@ function AppContent() {
|
||||
return <LegalPage />
|
||||
case '/brand':
|
||||
return <BrandAssetsPage />
|
||||
case '/about':
|
||||
return <AboutPage />
|
||||
case '/mission':
|
||||
return <MissionPage />
|
||||
case '/what-we-do':
|
||||
return <WhatWeDoPage />
|
||||
case '/events':
|
||||
return <EventsPage />
|
||||
case '/contact':
|
||||
return <ContactPage />
|
||||
case '/impact':
|
||||
return <ImpactReportPage />
|
||||
case '/request-assistance':
|
||||
|
||||
Reference in New Issue
Block a user