@@ -3,131 +3,133 @@ import Link from "next/link";
33import { Button } from "@/components/ui/button" ;
44
55import Container from "../MarketingContainer" ;
6- import Section from "../MarketingSection" ;
76
8- // Card data array for DRY principle - Single source of truth for card content
97const 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
101102const 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