Skip to content

Commit

Permalink
some mobile updates, new marquee component added
Browse files Browse the repository at this point in the history
  • Loading branch information
jessebubble committed Jan 26, 2025
1 parent 02e8d0f commit 7e42446
Show file tree
Hide file tree
Showing 10 changed files with 217 additions and 147 deletions.
20 changes: 1 addition & 19 deletions app/components/CTA/Connections.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export function Connections() {
animate="visible"
aria-label="Grid of DEVSA community images"
>
<motion.div className="hidden md:grid grid-cols-3 gap-4 aspect-[4/3] w-full">
<motion.div className="grid grid-cols-3 gap-4 aspect-[4/3] w-full">
{images.map((src, index) => (
<motion.figure
key={src}
Expand All @@ -127,24 +127,6 @@ export function Connections() {
</motion.figure>
))}
</motion.div>
<div className="md:hidden grid grid-cols-2 gap-4">
{images.map((src, index) => (
<motion.figure
key={src}
className="aspect-square"
variants={itemVariants}
whileTap={{ scale: 0.95 }}
onClick={() => handleImageClick(index)}
>
<img
src={src || "/placeholder.svg"}
alt={getImageDescription(index)}
className="w-full h-full object-cover rounded-lg"
/>
<figcaption className="sr-only">{getImageDescription(index)}</figcaption>
</motion.figure>
))}
</div>
</motion.div>
</div>

Expand Down
12 changes: 11 additions & 1 deletion app/components/CTA/Coworking.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export function Coworking() {

<motion.div className="w-full mt-8" variants={containerVariants} initial="hidden" animate="visible">
<div
className="w-full overflow-x-auto snap-x snap-mandatory flex gap-4 py-4 scrollbar-hide"
className="hidden w-full overflow-x-auto snap-x snap-mandatory md:flex gap-4 py-4 scrollbar-hide"
aria-label="Coworking space image gallery"
>
{images.map((src, index) => (
Expand Down Expand Up @@ -135,6 +135,16 @@ export function Coworking() {
</motion.figure>
))}
</div>
<div
className="md:hidden w-full"
aria-label="Coworking space logo"
>
<img
src="https://devsa-assets.s3.us-east-2.amazonaws.com/community-coworking.svg"
alt="DEVSA Logo"
className="w-full h-full"
/>
</div>
</motion.div>
</div>

Expand Down
16 changes: 8 additions & 8 deletions app/components/CTA/partners.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ import { GradientText } from "./GradientText"
import { useReducedMotion, motion } from "motion/react"

const partners = [
{
name: "Project Quest",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/project-quest-logo.svg",
link: "https://questsa.org/",
},
{
name: "Tech Bloc",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/tech-bloc.svg",
Expand All @@ -13,20 +18,15 @@ const partners = [
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/geekdom_logo_full.svg",
link: "https://geekdom.com",
},
{
name: "434 Media",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/434media.svg",
link: "https://434media.com",
},
{
name: "UTSA UC",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/uc-utsa.svg",
link: "https://uc.utsa.edu/programs/mdst.html",
},
{
name: "Project Quest",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/project-quest-logo.svg",
link: "https://questsa.org/",
name: "434 Media",
logo: "https://devsa-assets.s3.us-east-2.amazonaws.com/434media.svg",
link: "https://434media.com",
},
{
name: "Capital Factory",
Expand Down
4 changes: 2 additions & 2 deletions app/components/ui/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ function Sitemap() {
<div>
<SitemapHeading>DEVSA</SitemapHeading>
<SitemapLinks>
<SitemapLink to="https://devsanantonio.printify.me/products">Store</SitemapLink>
<SitemapLink to="/mission">The Mission</SitemapLink>
<SitemapLink to="/replay2024">Replay 2024</SitemapLink>
<SitemapLink to="/mission">The Mission</SitemapLink>
<SitemapLink to="https://devsanantonio.printify.me/products">Store</SitemapLink>
</SitemapLinks>
</div>
<div>
Expand Down
57 changes: 57 additions & 0 deletions app/components/ui/devsa-hero.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { motion } from "motion/react"
import { Marquee } from "./marquee"

const partners = [
{ name: "UTSA UC", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/uc-utsa.svg" },
{ name: "Project Quest", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/project-quest-logo.svg" },
{ name: "Geekdom", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/geekdom_logo_full.svg" },
{ name: "Digital Canvas", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/digital-canvas-ymas.svg" },
{ name: "434 MEDIA", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/434media.svg" },
{ name: "GDG SA", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/gdg-sa.svg" },
{ name: "Tech Bloc", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/TB+Full+Logo.png" },
{ name: "Alamo Python", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/alamo-py.svg" },
{ name: "A11Y", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/a11y+(1).svg" },
{ name: "React", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/devsa-star.svg" },
{ name: "GGS", img: "https://devsa-assets.s3.us-east-2.amazonaws.com/ggs.svg" },
]

const PartnerImage = ({ img, name }: { img: string; name: string }) => (
<motion.div whileHover={{ scale: 1.05 }} className="relative w-40 h-40 overflow-hidden m-4">
<img src={img || "/placeholder.svg"} alt={name} className="w-full h-full object-contain" />
</motion.div>
)

export function DEVSAHero() {
return (
<div className="relative w-full h-[600px] overflow-hidden bg-neutral-950 mt-16 mb-32">
<motion.div
className="absolute inset-0 flex items-center justify-center z-10"
initial={{ opacity: 0, scale: 0.5 }}
animate={{ opacity: 1, scale: 1 }}
transition={{ duration: 0.5 }}
>
<img
src="https://devsa-assets.s3.us-east-2.amazonaws.com/devsa-community.svg"
alt="DEVSA Logo"
className="w-64 h-64 md:w-96 md:h-96"
/>
</motion.div>
<div className="absolute inset-0 flex flex-col justify-center">
<Marquee pauseOnHover className="[--duration:40s] blur-sm">
{partners.map((partner) => (
<PartnerImage key={partner.name} {...partner} />
))}
</Marquee>
<Marquee reverse pauseOnHover className="[--duration:40s] blur-sm">
{partners.map((partner) => (
<PartnerImage key={partner.name} {...partner} />
))}
</Marquee>
</div>
<div className="absolute inset-0 bg-gradient-to-r from-gray-900 via-transparent to-gray-900" />
<div className="absolute inset-x-0 top-0 h-20 bg-gradient-to-b from-gray-900 to-transparent" />
<div className="absolute inset-x-0 bottom-0 h-20 bg-gradient-to-t from-gray-900 to-transparent" />
</div>
)
}

52 changes: 52 additions & 0 deletions app/components/ui/marquee.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import type { ComponentPropsWithoutRef } from "react"
import clsx from "clsx"

interface MarqueeProps extends ComponentPropsWithoutRef<"div"> {
className?: string
reverse?: boolean
pauseOnHover?: boolean
children: React.ReactNode
vertical?: boolean
repeat?: number
}

export function Marquee({
className,
reverse = false,
pauseOnHover = false,
children,
vertical = false,
repeat = 2,
...props
}: MarqueeProps) {
return (
<div
{...props}
className={clsx(
"group flex overflow-hidden [--duration:40s]",
{
"flex-row": !vertical,
"flex-col": vertical,
},
className,
)}
>
{Array(repeat)
.fill(0)
.map((_, i) => (
<div
key={i}
className={clsx("flex shrink-0 justify-around", {
"animate-marquee flex-row": !vertical,
"animate-marquee-vertical flex-col": vertical,
"group-hover:[animation-play-state:paused]": pauseOnHover,
"[animation-direction:reverse]": reverse,
})}
>
{children}
</div>
))}
</div>
)
}

53 changes: 0 additions & 53 deletions app/routes/board/board.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { useRef } from "react"
import { motion, useInView, useReducedMotion } from "motion/react"
import { Container } from "../../components/ui/Container"
import { Border } from "../../components/ui/Border"

const containerVariants = {
hidden: { opacity: 0 },
Expand All @@ -24,57 +23,6 @@ const itemVariants = {
},
}

export function VisionGrid() {
const prefersReducedMotion = useReducedMotion()
const ref = useRef(null)
const isInView = useInView(ref, { once: true, amount: 0.2 })

const gridItems = [
{
title: "Why Non-Profit?",
description:
"Our focus is long-term, building a thriving tech community that continues beyond any single individual, ensuring stability and lasting impact",
},
{
title: "Community Access",
description:
"Our non-profit status often allows us to secure affordable event venues, making our programs accessible and inclusive for a wider range of participants",
},
{
title: "Donor Advantages",
description:
"Contributions to DEVSA are tax-deductible for donors, encouraging greater support from individuals and organizations within the community",
},
{
title: "Funding Flexibility",
description:
"As a non-profit, we can seek grants, sponsorships, and donations specifically dedicated to furthering our mission and programs",
},
{
title: "Dual Focus Approach",
description:
"This approach combines the expertise of our Board in two key areas: Developer Experience and Strategic Expertise",
},
]

return (
<section className="py-16 sm:py-24" aria-labelledby="vision-title">
<Container>
<motion.div ref={ref} initial="hidden" animate={isInView ? "visible" : "hidden"} variants={containerVariants}>
<motion.img
src="https://devsa-assets.s3.us-east-2.amazonaws.com/devsa-community.svg"
alt="DEVSA Street Art logo"
className="h-full w-full object-contain max-w-3xl mx-auto"
width={400}
height={400}
variants={itemVariants}
/>
</motion.div>
</Container>
</section>
)
}

export function Board() {
const prefersReducedMotion = useReducedMotion()
const ref = useRef(null)
Expand All @@ -92,7 +40,6 @@ export function Board() {
>
{team.map((group) => (
<div key={group.title}>
<Border as={motion.div} variants={itemVariants} />
<div className="grid gap-8 pt-8 sm:pt-12 lg:grid-cols-4">
<motion.h2
id="board-title"
Expand Down
69 changes: 35 additions & 34 deletions app/routes/board/route.tsx
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
import { MetaFunction } from '@remix-run/node';
import { Board, VisionGrid } from './board';
import { Board } from './board';
import { DEVSAHero } from '~/components/ui/devsa-hero';

export const meta: MetaFunction = () => {
return [
{
title: 'DEVSA | Focused on Learning, Networking, and Community',
},
{
property: 'og:url',
content: 'https://devsanantonio.com/mission',
},
{
property: 'og:type',
content: 'website',
},
{
property: 'og:title',
content: 'Your Support Matters | Make a Tax-Deductible Donation',
},
{
name: 'description',
content:
"We're building a stronger ecosystem for the techies in San Antonio",
},
{
property: 'og:image',
content:
'https://devsa-assets.s3.us-east-2.amazonaws.com/flyers-8-ogmeta.png',
},
];
return [
{
title: 'DEVSA | Focused on Learning, Networking, and Community',
},
{
property: 'og:url',
content: 'https://devsanantonio.com/mission',
},
{
property: 'og:type',
content: 'website',
},
{
property: 'og:title',
content: 'Your Support Matters | Make a Tax-Deductible Donation',
},
{
name: 'description',
content:
"We're building a stronger ecosystem for the techies in San Antonio",
},
{
property: 'og:image',
content:
'https://devsa-assets.s3.us-east-2.amazonaws.com/flyers-8-ogmeta.png',
},
];
};

export default function Index() {
return (
<>
<VisionGrid />
<Board />
</>
);
return (
<>
<Board />
<DEVSAHero />
</>
);
}
4 changes: 4 additions & 0 deletions app/routes/replay2024/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ const images = [
src: "https://devsa-assets.s3.us-east-2.amazonaws.com/216C99E4-62E0-404A-BA48-80F49C2C8936+2.jpg",
alt: "Runway AI meetup at Texas Public Radio",
},
{
src: "https://devsa-assets.s3.us-east-2.amazonaws.com/IMG_4665.jpg",
alt: "DEVSA Game Design event with UTSA UC",
},
{
src: "https://devsa-assets.s3.us-east-2.amazonaws.com/IMG_1484.jpg",
alt: "Hanging out with the community at AITX event",
Expand Down
Loading

0 comments on commit 7e42446

Please sign in to comment.