Skip to content

Commit 0b72b1c

Browse files
Zeff01claude
andcommitted
feat: enhance careers page and landing work with us section
- Add category filtering to careers page with department, job type, and experience level filters - Convert Work with Us section from single column to responsive multi-column grid layout - Add new careers category card linking to /careers with "Apply as a Dev" button - Replace inappropriate internship-focused content with job-seeker appropriate sections: * Remove learning roadmap, replace with professional career growth path * Remove mission/vision focused on education, replace with tech stack showcase * Update "Who We Are" to workplace culture section * Fix hero section to focus on career advancement vs internship onboarding - Fix Supabase environment variables configuration for Edge Runtime compatibility - Remove violet background from Work with Us section and make it full width - Add smooth scroll functionality and improve user experience for job seekers - Maintain consistent theme colors (customTeal, customViolet-100, customBlue-100) throughout 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent ca9ceac commit 0b72b1c

14 files changed

Lines changed: 887 additions & 117 deletions

File tree

‎apps/codebility/app/(marketing)/_components/landing/LandingFeatures.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const Features = () => {
1919
</h2>
2020
<p className="text-gray">
2121
Our programs go beyond skill acquisition,
22-
because we believe in the trans-formative power of coding
22+
because we believe in the transformative power of coding
2323
</p>
2424
</div>
2525

‎apps/codebility/app/(marketing)/_components/landing/LandingWorkWithUs.tsx‎

Lines changed: 86 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -3,131 +3,133 @@ import Link from "next/link";
33
import { Button } from "@/components/ui/button";
44

55
import Container from "../MarketingContainer";
6-
import Section from "../MarketingSection";
76

8-
// Card data array for DRY principle - Single source of truth for card content
97
const WORK_WITH_US_CARDS = [
108
{
119
id: "portfolio",
1210
title: "Our Portfolio",
1311
image: {
1412
src: "https://codebility-cdn.pages.dev/assets/images/index/projects-large.jpg",
15-
alt: "portfolio projects"
13+
alt: "portfolio projects",
1614
},
17-
description: "Build your own website with us today and ensure a reliable, cutting-edge online presence.",
15+
description:
16+
"Build your next digital experience with a team that delivers reliable, cutting-edge work from discovery to launch.",
1817
link: {
1918
href: "/services",
20-
text: "Our Portfolio"
21-
}
19+
text: "Explore Work",
20+
},
2221
},
2322
{
24-
id: "hire-developers",
23+
id: "hire-developers",
2524
title: "Hire Developers",
2625
image: {
2726
src: "https://codebility-cdn.pages.dev/assets/images/index/codevs-large.jpg",
28-
alt: "professional developers"
27+
alt: "professional developers",
2928
},
30-
description: "Connect with the best developer to meet your needs through our top-rated professionals.",
29+
description:
30+
"Accelerate delivery with vetted engineers, designers, and strategists who integrate seamlessly with your roadmap.",
3131
link: {
3232
href: "/codevs",
33-
text: "Hire a CoDev"
34-
}
33+
text: "Meet CoDevs",
34+
},
3535
},
3636
{
3737
id: "developer-journey",
38-
title: "Developer Journey",
38+
title: "Developer Journey",
3939
image: {
4040
src: "/assets/images/index/image.png",
41-
alt: "developer learning journey phases"
41+
alt: "developer learning journey phases",
4242
},
43-
description: "Connect with our developer community and explore exciting career opportunities in tech.",
43+
description:
44+
"Join our community, sharpen your craft through real projects, and unlock career opportunities across the globe.",
4445
link: {
4546
href: "/auth/onboarding",
46-
text: "Apply as Codev"
47-
}
48-
}
47+
text: "Join the Program",
48+
},
49+
},
50+
{
51+
id: "careers",
52+
title: "Career Opportunities",
53+
image: {
54+
src: "https://codebility-cdn.pages.dev/assets/images/index/careers.jpg",
55+
alt: "career opportunities and job openings",
56+
},
57+
description:
58+
"Explore exciting career opportunities with our team. Join a dynamic environment where innovation meets collaboration.",
59+
link: {
60+
href: "/careers",
61+
text: "Apply as a Dev",
62+
},
63+
},
4964
];
5065

51-
// Reusable card component following Single Responsibility Principle
52-
const WorkWithUsCard = ({ card }: { card: typeof WORK_WITH_US_CARDS[0] }) => (
53-
<Container className="relative z-10 mx-auto max-w-[600px] px-4 text-white">
54-
<div className="border-light-900/5 bg-light-700/10 flex h-full flex-col gap-4 rounded-lg border-2 p-6 md:p-8">
55-
{/* Image section with consistent aspect ratio */}
56-
<div className="aspect-[500/359] w-full overflow-hidden rounded-xl">
57-
<Image
58-
src={card.image.src}
59-
alt={card.image.alt}
60-
width={500}
61-
height={359}
62-
className="h-full w-full object-cover"
63-
priority={card.id === "portfolio"} // Prioritize first image loading
64-
/>
66+
const WorkWithUsCard = ({ card, index }: { card: (typeof WORK_WITH_US_CARDS)[number]; index: number }) => (
67+
<div className="group relative w-full">
68+
<div className="absolute inset-0 rounded-3xl bg-gradient-to-br from-purple-500/60 via-purple-400/40 to-purple-900/20 opacity-80 blur-2xl transition-all duration-500 group-hover:opacity-100" />
69+
<div className="relative flex h-full flex-col overflow-hidden rounded-3xl border border-white/10 bg-white/5 bg-gradient-to-br from-white/10 via-white/5 to-purple-950/20 p-6 shadow-xl backdrop-blur-md transition-all duration-300 hover:-translate-y-1 hover:border-purple-300/60 hover:shadow-purple-500/20 md:p-8">
70+
<div className="relative overflow-hidden rounded-2xl">
71+
<div className="relative aspect-[16/9] w-full">
72+
<Image
73+
src={card.image.src}
74+
alt={card.image.alt}
75+
fill
76+
sizes="(max-width: 768px) 100vw, 70vw"
77+
className="object-cover transition-transform duration-500 group-hover:scale-105"
78+
priority={index === 0}
79+
/>
80+
</div>
81+
<div className="pointer-events-none absolute inset-0 bg-gradient-to-t from-purple-950/70 via-transparent to-transparent" />
82+
<span className="absolute left-4 top-4 inline-flex items-center gap-2 rounded-full border border-white/20 bg-white/10 px-3 py-1 text-xs font-semibold uppercase tracking-[0.2em] text-white/80 backdrop-blur">
83+
{String(index + 1).padStart(2, "0")}
84+
</span>
6585
</div>
66-
67-
{/* Content section with consistent spacing */}
68-
<div className="flex flex-col gap-6">
69-
<p className="text-center text-sm leading-relaxed md:text-base">
70-
{card.description}
71-
</p>
72-
73-
{/* Button section - centered for single section layout */}
74-
<div className="flex justify-center">
75-
<Link href={card.link.href}>
76-
<Button variant="purple" size="lg" rounded="full">
86+
87+
<div className="mt-8 flex flex-col gap-6 text-white md:mt-10">
88+
<h3 className="text-2xl font-semibold md:text-3xl">{card.title}</h3>
89+
<p className="text-base leading-relaxed text-white/75 md:text-lg">{card.description}</p>
90+
<div className="pt-2">
91+
<Link href={card.link.href} className="inline-block">
92+
<Button variant="purple" size="lg" rounded="full" className="shadow-lg shadow-purple-500/20">
7793
{card.link.text}
7894
</Button>
7995
</Link>
8096
</div>
8197
</div>
8298
</div>
83-
</Container>
84-
);
85-
86-
// Background decoration component for DRY principle
87-
const BackgroundDecoration = () => (
88-
<div
89-
aria-hidden="true"
90-
className="pointer-events-none absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 transform overflow-hidden blur-3xl"
91-
>
92-
<div
93-
style={{
94-
clipPath: "polygon(22.1% 28.3%, 6% 40.5%, 0.8% 63.5%, 9.3% 84.8%, 23.6% 88.5%, 48.9% 88.8%, 77.2% 88.5%, 92.4% 71.5%, 93.9% 51.5%, 85.9% 36.8%, 70% 29.5%, 46.1% 29%)",
95-
}}
96-
className="relative aspect-[855/678] w-[40rem] bg-gradient-to-r from-[#00738B] via-[#0C3FDB] to-[#9707DD] opacity-20 sm:w-[72.1875rem]"
97-
/>
9899
</div>
99100
);
100101

101102
const WorkWithUs = () => {
102103
return (
103-
<>
104-
{/* Main title section */}
105-
<Section
106-
id="workwithus"
107-
className="border-light-900/5 bg-light-900/5 relative w-full border-t-4"
108-
>
109-
<Container className="relative z-10 mx-auto max-w-[1100px] px-4 text-white">
110-
<h2 className="text-center text-xl md:text-3xl pt-1 pb-0 mb-0 -mb-16">Work With Us</h2>
111-
</Container>
112-
<BackgroundDecoration />
113-
</Section>
104+
<section
105+
id="workwithus"
106+
className="relative flex min-h-[90vh] w-full items-center overflow-hidden py-16 md:py-24"
107+
>
108+
<div className="pointer-events-none absolute -left-32 top-16 hidden h-64 w-64 rounded-full bg-purple-600/30 blur-3xl md:block" aria-hidden="true" />
109+
<div className="pointer-events-none absolute -bottom-24 right-12 h-72 w-72 rounded-full bg-blue-500/20 blur-3xl" aria-hidden="true" />
114110

115-
{/* Three separate sections - each card gets its own section */}
116-
{WORK_WITH_US_CARDS.map((card, index) => (
117-
<Section
118-
key={card.id}
119-
className={`border-light-900/5 bg-light-900/5 relative w-full ${
120-
index === WORK_WITH_US_CARDS.length - 1 ? 'border-b-4' : ''
121-
}`}
122-
>
123-
<div className="pt-0 pb-0 -mt-20">
124-
<WorkWithUsCard card={card} />
125-
</div>
126-
<BackgroundDecoration />
127-
</Section>
128-
))}
129-
</>
111+
<div className="relative z-10 mx-auto flex w-full max-w-6xl flex-1 flex-col items-center px-4 text-white md:px-6 lg:px-8">
112+
<div className="flex w-full max-w-4xl flex-col items-center gap-6 text-center md:gap-8">
113+
<span className="inline-flex items-center gap-2 rounded-full border border-purple-400/40 bg-purple-500/10 px-4 py-1 text-xs font-medium uppercase tracking-[0.3em] text-purple-200">
114+
Work With Us
115+
</span>
116+
<h2 className="text-3xl font-semibold leading-tight md:text-4xl">
117+
Build meaningful products with a partner that keeps momentum high.
118+
</h2>
119+
<p className="max-w-3xl text-sm leading-relaxed text-white/70 md:text-base">
120+
Whether you need a seasoned project team, specialist talent, or a launchpad for your own journey, Codebility brings
121+
world-class execution, mentorship, and community to every collaboration.
122+
</p>
123+
</div>
124+
125+
<div className="mt-14 grid w-full grid-cols-1 gap-8 md:mt-20 md:grid-cols-2 md:gap-10 lg:gap-12">
126+
{WORK_WITH_US_CARDS.map((card, index) => (
127+
<WorkWithUsCard key={card.id} card={card} index={index} />
128+
))}
129+
</div>
130+
</div>
131+
</section>
130132
);
131133
};
132134

133-
export default WorkWithUs;
135+
export default WorkWithUs;

0 commit comments

Comments
 (0)