3 Commits

Author SHA1 Message Date
kudinDmitriyUp
861acaa707 Bob AI: Remove the team section ('meet our experts') and all its con 2026-07-05 16:03:30 +00:00
kudinDmitriyUp
2068e174ac Bob AI: fix build errors (attempt 1) 2026-07-05 16:01:06 +00:00
kudinDmitriyUp
37d21cd268 Bob AI: Removed image from Elias Noor in team section 2026-07-05 16:00:04 +00:00
6 changed files with 238 additions and 140 deletions

View File

@@ -1,147 +1,25 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import TeamGlassCards from '@/components/sections/team/TeamGlassCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in the sibling sections/ folder (one file per section).
// Edit those section files directly. Non-block content (wrappers,
// non-inlinable sections) is preserved inline; extracted section blocks
// become component refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import ServicesSection from './HomePage/sections/Services';
import AboutSection from './HomePage/sections/About';
import CtaSection from './HomePage/sections/Cta';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Noor & Noir"
title="Noor. Noir."
description=" "
primaryButton={{
text: "View Work",
href: "#services",
}}
secondaryButton={{
text: "Contact",
href: "/contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/liquid-marbling-paint-texture-background-fluid-painting-abstract-texture-intensive-color-mix-wallpaper_1258-99503.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/3d-wooden-interior-with-spotlights-shining-down_1048-18961.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/abstract-textured-backgound_1258-30612.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/black-concrete-wall_53876-92805.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/beige-textured-fabric-background-with-design-space_53876-133356.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/monochrome-dark-gray-stucco_1194-6912.jpg",
},
]}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedCards
tag="Expertise"
title="What we do"
description="We balance clarity with depth."
items={[
{
title: "Web Design",
description: "Custom layouts and interaction design built around content, not templates.",
tags: [
"UX",
"UI",
"Creative",
],
imageSrc: "http://img.b2bpic.net/free-photo/abstract-smooth-brown-wall-background-layout-design-studio-room-web-template-business-report-with-smooth-circle-gradient-color_1258-71972.jpg",
},
{
title: "Brand & Identity",
description: "Type systems, color, and voice that define your presence.",
tags: [
"Strategy",
"Visuals",
"Voice",
],
imageSrc: "http://img.b2bpic.net/free-photo/abstract-luxury-plain-blur-grey-black-gradient-used-as-background-studio-wall-display-your-products_1258-52733.jpg",
},
{
title: "Development",
description: "Fast, accessible builds handed over clean.",
tags: [
"Code",
"Perf",
"Delivery",
],
imageSrc: "http://img.b2bpic.net/free-photo/dark-grunge-texture_1048-4055.jpg",
},
]}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="The Duality of Design"
description="We believe the most compelling experiences exist at the intersection of shadow and light—minimalist precision meets evocative storytelling."
imageSrc="http://img.b2bpic.net/free-photo/dark-smoky-room-with-concrete-floor-dramatic-lighting_84443-83704.jpg"
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamGlassCards
tag="The Studio"
title="Visionaries behind the lens"
description="A collective of creative thinkers focused on digital craftsmanship."
members={[
{
name: "Elias Noor",
role: "Creative Director",
imageSrc: "http://img.b2bpic.net/free-photo/young-man-portrait-with-flowers_23-2148830424.jpg",
},
{
name: "Sarah Noir",
role: "Lead Designer",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-albino-woman_23-2150283438.jpg",
},
]}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
<div id="cta" data-section="cta">
<SectionErrorBoundary name="cta">
<ContactCta
tag="Let's talk"
text="Have a project in mind? We'd love to hear about it."
primaryButton={{
text: "Get in touch",
href: "/contact",
}}
secondaryButton={{
text: "Our process",
href: "#services",
}}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
<CtaSection />
</>
);
}
}

View File

@@ -0,0 +1,22 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "about" section.
import React from 'react';
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="The Duality of Design"
description="We believe the most compelling experiences exist at the intersection of shadow and light—minimalist precision meets evocative storytelling."
imageSrc="http://img.b2bpic.net/free-photo/dark-smoky-room-with-concrete-floor-dramatic-lighting_84443-83704.jpg"
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "cta" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function CtaSection(): React.JSX.Element {
return (
<div id="cta" data-section="cta">
<SectionErrorBoundary name="cta">
<ContactCta
tag="Let's talk"
text="Have a project in mind? We'd love to hear about it."
primaryButton={{
text: "Get in touch",
href: "/contact",
}}
secondaryButton={{
text: "Our process",
href: "#services",
}}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,49 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Noor & Noir"
title="Noor. Noir."
description=" "
primaryButton={{
text: "View Work",
href: "#services",
}}
secondaryButton={{
text: "Contact",
href: "/contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/liquid-marbling-paint-texture-background-fluid-painting-abstract-texture-intensive-color-mix-wallpaper_1258-99503.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/3d-wooden-interior-with-spotlights-shining-down_1048-18961.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/abstract-textured-backgound_1258-30612.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/black-concrete-wall_53876-92805.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/beige-textured-fabric-background-with-design-space_53876-133356.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/monochrome-dark-gray-stucco_1194-6912.jpg",
},
]}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,53 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "services" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedCards
tag="Expertise"
title="What we do"
description="We balance clarity with depth."
items={[
{
title: "Web Design",
description: "Custom layouts and interaction design built around content, not templates.",
tags: [
"UX",
"UI",
"Creative",
],
imageSrc: "http://img.b2bpic.net/free-photo/abstract-smooth-brown-wall-background-layout-design-studio-room-web-template-business-report-with-smooth-circle-gradient-color_1258-71972.jpg",
},
{
title: "Brand & Identity",
description: "Type systems, color, and voice that define your presence.",
tags: [
"Strategy",
"Visuals",
"Voice",
],
imageSrc: "http://img.b2bpic.net/free-photo/abstract-luxury-plain-blur-grey-black-gradient-used-as-background-studio-wall-display-your-products_1258-52733.jpg",
},
{
title: "Development",
description: "Fast, accessible builds handed over clean.",
tags: [
"Code",
"Perf",
"Delivery",
],
imageSrc: "http://img.b2bpic.net/free-photo/dark-grunge-texture_1048-4055.jpg",
},
]}
textAnimation="fade"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,68 @@
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import TextAnimation from "@/components/ui/TextAnimation";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import ScrollReveal from "@/components/ui/ScrollReveal";
type TeamMember = {
name: string;
role: string;
imageSrc?: string;
};
export default function TeamSection() {
const team: TeamMember[] = [
{
name: "Alex Rivera",
role: "Principal Architect",
},
{
name: "Jordan Lee",
role: "Lead Designer",
},
{
name: "Taylor Smith",
role: "Project Manager",
},
{
name: "Casey Jones",
role: "Interior Specialist",
}
];
return (
<section id="team" aria-label="Team section" className="">
<div className="flex flex-col gap-8 w-content-width mx-auto">
<div className="flex flex-col items-center gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>Team</p>
</div>
<TextAnimation
text="Meet Our Experts"
variant="slide-up"
gradientText={true}
tag="h2"
className="text-5xl md:text-6xl font-semibold text-center text-balance"
/>
</div>
<ScrollReveal variant="slide-up">
<GridOrCarousel>
{team.map((member, i) => (
<div key={i} className="flex flex-col items-center gap-4 p-6 card rounded text-center">
{member.imageSrc && (
<div className="w-32 h-32 rounded-full overflow-hidden mb-2">
<ImageOrVideo imageSrc={member.imageSrc} className="w-full h-full object-cover" />
</div>
)}
<div className="flex flex-col gap-1">
<h3 className="text-xl font-semibold">{member.name}</h3>
<p className="text-accent">{member.role}</p>
</div>
</div>
))}
</GridOrCarousel>
</ScrollReveal>
</div>
</section>
);
}