10 Commits

Author SHA1 Message Date
25f93817f8 Merge version_7_1777391327908 into main
Merge version_7_1777391327908 into main
2026-04-28 15:55:41 +00:00
c4c3dd1302 Bob AI: Add basic styling to the 'Team Pets' section for layout and 2026-04-28 18:55:04 +03:00
3058e8ca38 Bob AI: Import and add the new 'TeamPetsSection' component to the ho 2026-04-28 18:53:00 +03:00
026fc0d0f3 Bob AI: Implement the component's structure to display pet photos an 2026-04-28 18:51:00 +03:00
bafd516d71 Merge version_6_1777388492759 into main
Merge version_6_1777388492759 into main
2026-04-28 15:13:28 +00:00
d67d95cf74 Bob AI: fix build errors (attempt 1) 2026-04-28 18:12:49 +03:00
7726ae87ea Bob AI: [SECTION ADD OPERATION]
You must create a COMPLETELY NEW sec
2026-04-28 18:11:18 +03:00
24d8f8bcb1 Switch to version 3: remove src/components/sections/team/TeamPets.tsx 2026-04-28 14:11:57 +00:00
cfba97474b Switch to version 3: modified src/pages/HomePage.tsx 2026-04-28 14:11:57 +00:00
a2d9241c56 Merge version_4_1777385254133 into main
Merge version_4_1777385254133 into main
2026-04-28 14:10:49 +00:00
3 changed files with 97 additions and 71 deletions

View File

@@ -0,0 +1,92 @@
import Card from "@/components/ui/Card";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import TextAnimation from "@/components/ui/TextAnimation";
import ScrollReveal from "@/components/ui/ScrollReveal";
type Pet = {
name: string;
description?: string;
imageSrc: string;
};
type TeamPetsProps = {
tag?: string;
title?: string;
description?: string;
pets?: Pet[];
};
const defaultPets: Pet[] = [
{
name: "Barnaby",
description: "Chief Tasting Officer",
imageSrc: "https://images.unsplash.com/photo-1583511655857-d19b40a7a54e?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwxfHxkb2d8ZW58MXwwfHx8MTc3NzM4NDkyMXww&ixlib=rb-4.1.0&q=80&w=1080",
},
{
name: "Luna",
description: "Nap Coordinator",
imageSrc: "https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwxfHxjYXR8ZW58MXwwfHx8MTc3NzM4NDkyMnww&ixlib=rb-4.1.0&q=80&w=1080",
},
{
name: "Cooper",
description: "Door Greeter",
imageSrc: "https://images.unsplash.com/photo-1552053831-71594a27632d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwyfHxkb2d8ZW58MXwwfHx8MTc3NzM4NDkyM3ww&ixlib=rb-4.1.0&q=80&w=1080",
},
{
name: "Milo",
description: "Crumb Inspector",
imageSrc: "https://images.unsplash.com/photo-1573865526739-10659fec78a5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwyfHxjYXR8ZW58MXwwfHx8MTc3NzM4NDkyNHww&ixlib=rb-4.1.0&q=80&w=1080",
}
];
export default function TeamPets({
tag = "Our Companions",
title = "Meet the Team Pets",
description = "The furry friends that keep our bakery running with joy and tail wags.",
pets = defaultPets
}: TeamPetsProps) {
return (
<section aria-label="Team Pets section" className="py-20">
<div className="flex flex-col gap-8 mx-auto w-content-width">
<div className="flex flex-col items-center gap-2">
<span className="px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
<TextAnimation
text={title}
variant="fade-blur"
gradientText={true}
tag="h2"
className="text-6xl font-medium text-center text-balance"
/>
<TextAnimation
text={description}
variant="fade-blur"
gradientText={false}
tag="p"
className="md:max-w-6/10 text-lg leading-tight text-center"
/>
</div>
<ScrollReveal variant="slide-up">
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8">
{pets.map((pet) => (
<Card
key={pet.name}
className="flex flex-col hover:-translate-y-1 hover:shadow-xl transition-all duration-200"
>
<div className="w-full h-48 rounded overflow-hidden mb-4">
<ImageOrVideo imageSrc={pet.imageSrc} className="w-full h-full object-cover" />
</div>
<h3 className="text-xl font-semibold text-foreground">{pet.name}</h3>
{pet.description && (
<p className="text-base opacity-80 mt-2">{pet.description}</p>
)}
</Card>
))}
</div>
</ScrollReveal>
</div>
</section>
);
}

View File

@@ -1,65 +0,0 @@
import TextAnimation from "@/components/ui/TextAnimation";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import ScrollReveal from "@/components/ui/ScrollReveal";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
type Pet = {
name: string;
owner: string;
role: string;
imageSrc: string;
};
type TeamPetsProps = {
tag: string;
title: string;
description: string;
pets: Pet[];
};
const TeamPets = ({ tag, title, description, pets }: TeamPetsProps) => {
return (
<section aria-label="Team Pets section" className="py-20">
<div className="flex flex-col gap-8">
<div className="flex flex-col items-center w-content-width mx-auto gap-2">
<span className="px-3 py-1 mb-1 text-sm card rounded">{tag}</span>
<TextAnimation
text={title}
variant="fade-blur"
gradientText={true}
tag="h2"
className="text-6xl font-medium text-center text-balance"
/>
<TextAnimation
text={description}
variant="fade-blur"
gradientText={false}
tag="p"
className="md:max-w-6/10 text-lg leading-tight text-center"
/>
</div>
<ScrollReveal variant="slide-up">
<GridOrCarousel>
{pets.map((pet) => (
<div key={pet.name} className="flex flex-col gap-3 xl:gap-4 2xl:gap-5 p-3 xl:p-4 2xl:p-5 h-full card rounded">
<div className="w-full aspect-square rounded overflow-hidden">
<ImageOrVideo imageSrc={pet.imageSrc} />
</div>
<div className="flex flex-col gap-1 text-center">
<h3 className="text-2xl font-medium">{pet.name}</h3>
<p className="text-base font-medium text-accent">{pet.role}</p>
<p className="text-sm opacity-80">Human: {pet.owner}</p>
</div>
</div>
))}
</GridOrCarousel>
</ScrollReveal>
</div>
</section>
);
};
export default TeamPets;

View File

@@ -7,7 +7,7 @@ import HeroBrand from '@/components/sections/hero/HeroBrand';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import ProductVariantCards from '@/components/sections/product/ProductVariantCards';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import TeamPets from '@/components/sections/team/TeamPets';
import TeamPets from '@/components/sections/other/TeamPets';
export default function HomePage() {
return (
@@ -146,7 +146,7 @@ export default function HomePage() {
{
title: "Traditional Methods",
description: "Long fermentation times create superior flavor and digestibility.",
avatarSrc: "https://images.unsplash.com/photo-1737700089482-e6ce492f712f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwzfHxmcmVuY2gl2MHBhc3RyeSUyMGJyZWFrZmFzdHxlbnwxfDB8fHwxNzc3Mzg0OTI4fDA&ixlib=rb-4.1.0&q=80&w=1080",
avatarSrc: "https://images.unsplash.com/photo-1737700089482-e6ce492f712f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHwzfHxmcmVuY2glMjBwYXN0cnklMjBicmVha2Zhc3R8ZW58MXwwfHx8MTc3NzM4NDkyOHww&ixlib=rb-4.1.0&q=80&w=1080",
buttonText: "See Methods",
imageSrc: "https://images.unsplash.com/photo-1605345746984-8ade72b44e00?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w4Mzc5ODl8MHwxfHNlYXJjaHw1Mnx8ZnJlc2glMjBjcm9pc3NhbnRzJTIwc2VsZWN0aW9uJTIwYnV0dGVyeXxlbnwxfDB8fHwxNzc3Mzg0OTI4fDA&ixlib=rb-4.1.0&q=80&w=1080",
},
@@ -234,11 +234,10 @@ export default function HomePage() {
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/default/no-image.jpg?id=xrpk5b"
/>
</div>
<div id="team" data-section="team">
<TeamPets />
<div id="other" data-section="other">
<TeamPets />
</div>
</>
</>
);
}