diff --git a/public/photos/community/outreach-01.jpg b/public/photos/community/outreach-01.jpg new file mode 100644 index 0000000..2d6a90f Binary files /dev/null and b/public/photos/community/outreach-01.jpg differ diff --git a/public/photos/community/outreach-02.jpg b/public/photos/community/outreach-02.jpg new file mode 100644 index 0000000..e3b5b16 Binary files /dev/null and b/public/photos/community/outreach-02.jpg differ diff --git a/public/photos/community/outreach-03.jpg b/public/photos/community/outreach-03.jpg new file mode 100644 index 0000000..11050e2 Binary files /dev/null and b/public/photos/community/outreach-03.jpg differ diff --git a/public/photos/community/outreach-04.jpg b/public/photos/community/outreach-04.jpg new file mode 100644 index 0000000..6947afa Binary files /dev/null and b/public/photos/community/outreach-04.jpg differ diff --git a/public/photos/community/outreach-05.jpg b/public/photos/community/outreach-05.jpg new file mode 100644 index 0000000..406a6f2 Binary files /dev/null and b/public/photos/community/outreach-05.jpg differ diff --git a/public/photos/community/outreach-video.mp4 b/public/photos/community/outreach-video.mp4 new file mode 100644 index 0000000..7e7c5b6 Binary files /dev/null and b/public/photos/community/outreach-video.mp4 differ diff --git a/src/App.tsx b/src/App.tsx index f08f2fc..7f030a4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect, useRef, useContext, createContext } from 'react' -import { motion, useMotionValue, useSpring, useTransform, useScroll, AnimatePresence } from 'framer-motion' +import { motion, useTransform, useScroll, AnimatePresence } from 'framer-motion' import { ArrowRight, Backpack, @@ -75,8 +75,9 @@ import { StoriesIntroBlock, WhatWeDoPage, } from './pages/foundation' +import { CommunityGallery } from './components/home/CommunityGallery' import { WhoWeServe } from './components/home/WhoWeServe' -import { SITE, WHAT_WE_DO } from './content/siteContent' +import { COMMUNITY_PHOTOS, SITE, WHAT_WE_DO } from './content/siteContent' /** * Miracles in Motion — Complete Non-Profit Website @@ -588,12 +589,6 @@ interface Translations { } } -interface TiltCardProps { - icon: React.ComponentType - title: string - desc: string -} - interface FeatureCardProps { icon: React.ComponentType title: string @@ -796,6 +791,7 @@ function HomePage() { + @@ -1032,74 +1028,31 @@ function Hero() { } function HeroShowcase() { + const featured = COMMUNITY_PHOTOS.slice(0, 4) return (
- - - - + {featured.map((photo, index) => ( + {photo.alt} + ))}
) } -function TiltCard({ icon: Icon, title, desc }: TiltCardProps) { - const x = useMotionValue(0) - const y = useMotionValue(0) - const rx = useTransform(y, [-50, 50], [12, -12]) - const ry = useTransform(x, [-50, 50], [-12, 12]) - const springX = useSpring(rx, { stiffness: 150, damping: 15 }) - const springY = useSpring(ry, { stiffness: 150, damping: 15 }) - const scale = useSpring(1, { stiffness: 300, damping: 25 }) - - return ( - { - const rect = e.currentTarget.getBoundingClientRect() - x.set(e.clientX - rect.left - rect.width / 2) - y.set(e.clientY - rect.top - rect.height / 2) - scale.set(1.05) - }} - onMouseLeave={() => { - x.set(0) - y.set(0) - scale.set(1) - }} - style={{ - rotateX: springX, - rotateY: springY, - scale: scale, - transformStyle: "preserve-3d", - boxShadow: useTransform(scale, [1, 1.05], [ - "0 4px 6px -1px rgba(0, 0, 0, 0.1)", - "0 20px 25px -5px rgba(0, 0, 0, 0.15), 0 10px 10px -5px rgba(0, 0, 0, 0.04)" - ]) - }} - className="group card card-hover will-change-transform cursor-pointer" - whileHover={{ - z: 20 - }} - transition={{ duration: 0.2 }} - > -
-
-
- -
-
-
{title}
-
{desc}
-
-
-
- Learn more -
- - ) -} - function PartnerMarquee() { return (
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 7839d0a..20f25b9 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,5 +1,5 @@ -import { Facebook, Globe, Instagram, Mail } from 'lucide-react' -import { SITE } from '../content/siteContent' +import { Instagram, Mail } from 'lucide-react' +import { SITE, SOCIAL } from '../content/siteContent' import { LogoMark } from './ui/LogoMark' export function Footer() { @@ -16,15 +16,16 @@ export function Footer() { {SITE.brandMessage}

{SITE.serviceArea}

- diff --git a/src/components/SEO/SEOHead.tsx b/src/components/SEO/SEOHead.tsx index efdb845..bb5318a 100644 --- a/src/components/SEO/SEOHead.tsx +++ b/src/components/SEO/SEOHead.tsx @@ -93,9 +93,7 @@ export function SEOHead({ "foundingDate": "2020", "areaServed": "United States", "sameAs": [ - "https://facebook.com/miraclesinmotion", - "https://twitter.com/miraclesinmotion", - "https://instagram.com/miraclesinmotion" + "https://www.instagram.com/miraclesinmotionfoundation" ], "contactPoint": { "@type": "ContactPoint", diff --git a/src/components/__tests__/Footer.test.tsx b/src/components/__tests__/Footer.test.tsx index bdf83e0..66e90b6 100644 --- a/src/components/__tests__/Footer.test.tsx +++ b/src/components/__tests__/Footer.test.tsx @@ -18,9 +18,13 @@ describe('Footer Component', () => { expect(screen.getByText(SITE.brandMessage)).toBeInTheDocument() }) - it('renders service area', () => { + it('renders service area and Instagram', () => { render(