feat(homepage): add new sections to homepage

This commit is contained in:
Amruth Pillai
2023-11-13 17:03:41 +01:00
parent 4b1e33db80
commit d18b258761
79 changed files with 3096 additions and 313 deletions

View File

@ -0,0 +1,67 @@
import { t } from "@lingui/macro";
import { Avatar, AvatarFallback, AvatarImage, Tooltip } from "@reactive-resume/ui";
import { cn } from "@reactive-resume/utils";
import { motion } from "framer-motion";
import { useMemo } from "react";
import { useContributors } from "@/client/services/resume/contributors";
export const ContributorsSection = () => {
const { github, crowdin, loading } = useContributors();
const contributors = useMemo(() => {
if (github && crowdin) return [...github, ...crowdin];
return [];
}, [github, crowdin]);
return (
<section id="contributors" className="container relative space-y-12 py-24 sm:py-32">
<div className="space-y-6 text-center">
<h1 className="text-4xl font-bold">{t`By the community, for the community.`}</h1>
<p className="mx-auto max-w-3xl leading-loose">
{t`Reactive Resume thrives thanks to its vibrant community. This project owes its progress to numerous individuals who've dedicated their time and skills. Below, we celebrate the coders who've enhanced its features on GitHub and the linguists whose translations on Crowdin have made it accessible to a broader audience.`}
</p>
</div>
{loading && (
<div className="mx-auto flex max-w-5xl flex-wrap items-center justify-center gap-3">
{Array(30)
.fill(0)
.map((_, index) => (
<motion.div
key={index}
viewport={{ once: true }}
initial={{ opacity: 0, scale: 0 }}
whileInView={{ opacity: 1, scale: 1, transition: { delay: index * 0.05 } }}
>
<Avatar>
<AvatarFallback></AvatarFallback>
</Avatar>
</motion.div>
))}
</div>
)}
<div className="mx-auto flex max-w-5xl flex-wrap items-center justify-center gap-3">
{contributors.map((contributor, index) => (
<motion.div
key={index}
viewport={{ once: true }}
initial={{ opacity: 0, scale: 0 }}
whileInView={{ opacity: 1, scale: 1, transition: { delay: index * 0.025 } }}
className={cn(index > 30 && "hidden lg:block")}
>
<a href={contributor.url} target="_blank" rel="noreferrer">
<Tooltip content={contributor.name}>
<Avatar>
<AvatarImage src={contributor.avatar} alt={contributor.name} />
<AvatarFallback>{contributor.name}</AvatarFallback>
</Avatar>
</Tooltip>
</a>
</motion.div>
))}
</div>
</section>
);
};