2025-07-28 19:57:37 +05:30
|
|
|
import { motion } from "framer-motion";
|
|
|
|
|
import { Badge } from "@/components/ui/badge";
|
|
|
|
|
import { Card, CardContent } from "@/components/ui/card";
|
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
|
|
|
import { UserPlus, ArrowRight } from "lucide-react";
|
|
|
|
|
import { navigateTo } from "@/App";
|
|
|
|
|
import { ShimmerButton } from "./ui/shimmer-button";
|
|
|
|
|
|
|
|
|
|
const HireDeveloperSection = ({
|
|
|
|
|
title,
|
|
|
|
|
description,
|
|
|
|
|
developerTypes,
|
|
|
|
|
buttonText,
|
|
|
|
|
buttonLink,
|
|
|
|
|
}) => {
|
|
|
|
|
return (
|
|
|
|
|
<section className="py-32 bg-black">
|
|
|
|
|
<div className="container mx-auto px-6 lg:px-8">
|
|
|
|
|
{/* Header */}
|
|
|
|
|
<motion.div
|
|
|
|
|
initial={{ opacity: 0, y: 30 }}
|
|
|
|
|
whileInView={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8 }}
|
|
|
|
|
viewport={{ once: true }}
|
|
|
|
|
className="text-center mb-20"
|
|
|
|
|
>
|
|
|
|
|
<h2 className="text-4xl lg:text-5xl font-semibold text-foreground mb-8">
|
|
|
|
|
{title}
|
|
|
|
|
</h2>
|
|
|
|
|
<p className="text-xl text-muted-foreground max-w-3xl mx-auto leading-relaxed">
|
|
|
|
|
{description}
|
|
|
|
|
</p>
|
|
|
|
|
</motion.div>
|
|
|
|
|
|
|
|
|
|
{/* Developer Cards */}
|
|
|
|
|
<motion.div
|
|
|
|
|
initial={{ opacity: 0, y: 40 }}
|
|
|
|
|
whileInView={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.2 }}
|
|
|
|
|
viewport={{ once: true }}
|
|
|
|
|
className="grid md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12"
|
|
|
|
|
>
|
|
|
|
|
{developerTypes.map((dev, index) => (
|
|
|
|
|
<motion.div
|
|
|
|
|
key={index}
|
|
|
|
|
initial={{ opacity: 0, y: 20 }}
|
|
|
|
|
whileInView={{ opacity: 1, y: 0 }}
|
2025-07-29 14:36:54 +05:30
|
|
|
transition={{ duration: 0.5, delay: index * 0.01 }}
|
2025-07-28 19:57:37 +05:30
|
|
|
viewport={{ once: true }}
|
|
|
|
|
whileHover={{ y: -8, scale: 1.02 }}
|
|
|
|
|
className="group cursor-pointer"
|
|
|
|
|
>
|
|
|
|
|
<Card className="bg-card/20 backdrop-blur-md border-white/10 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl rounded-2xl h-full">
|
|
|
|
|
<CardContent className="p-8">
|
|
|
|
|
<div className="flex items-center gap-4 mb-6">
|
|
|
|
|
<div className="w-12 h-12 bg-accent/20 rounded-xl flex items-center justify-center">
|
|
|
|
|
{/* Sample SVG or icon can be customized */}
|
|
|
|
|
<svg
|
|
|
|
|
className="w-6 h-6 text-accent"
|
|
|
|
|
viewBox="0 0 24 24"
|
|
|
|
|
fill="currentColor"
|
|
|
|
|
>
|
|
|
|
|
<path d="M17.523 15.3414c-.5665-.0085-1.2274-.1111-2.0032-.2551.7758-.1511 1.4368-.2551 2.0032-.2551.5665 0 1.2274.1111 2.0032.2551-.7758.1511-1.4368.2551-2.0032.2551zM12 2C13.1046 2 14 2.8954 14 4s-.8954 2-2 2-2-.8954-2-2 .8954-2 2-2zm6 18c1.1046 0 2-.8954 2-2s-.8954-2-2-2-2 .8954-2 2 .8954 2 2 2zM6 20c1.1046 0 2-.8954 2-2s-.8954-2-2-2-2 .8954-2 2 .8954 2 2 2z" />
|
|
|
|
|
</svg>
|
|
|
|
|
</div>
|
|
|
|
|
<Badge
|
|
|
|
|
variant="secondary"
|
|
|
|
|
className="text-xs bg-accent/20 text-accent border-accent/30"
|
|
|
|
|
>
|
|
|
|
|
{dev.experience}
|
|
|
|
|
</Badge>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<h3 className="text-xl font-semibold text-foreground mb-4">
|
|
|
|
|
{dev.title}
|
|
|
|
|
</h3>
|
|
|
|
|
|
|
|
|
|
<p className="text-muted-foreground text-sm mb-4">
|
|
|
|
|
{dev.specialties}
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<div className="flex flex-wrap gap-2">
|
|
|
|
|
{dev.skills.map((skill) => (
|
|
|
|
|
<Badge
|
|
|
|
|
key={skill}
|
|
|
|
|
variant="secondary"
|
|
|
|
|
className="text-xs bg-white/10 text-foreground"
|
|
|
|
|
>
|
|
|
|
|
{skill}
|
|
|
|
|
</Badge>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</CardContent>
|
|
|
|
|
</Card>
|
|
|
|
|
</motion.div>
|
|
|
|
|
))}
|
|
|
|
|
</motion.div>
|
|
|
|
|
|
|
|
|
|
{/* Call-to-action */}
|
|
|
|
|
<motion.div
|
|
|
|
|
initial={{ opacity: 0, y: 30 }}
|
|
|
|
|
whileInView={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{ duration: 0.8, delay: 0.4 }}
|
|
|
|
|
viewport={{ once: true }}
|
|
|
|
|
className="flex flex-col sm:flex-row gap-4 justify-center"
|
|
|
|
|
>
|
|
|
|
|
<ShimmerButton className="px-8 py-4" onClick={() => navigateTo(buttonLink)}>
|
|
|
|
|
<div className="inline-flex items-center gap-2">
|
|
|
|
|
<UserPlus className="w-5 h-5 flex-shrink-0" />
|
|
|
|
|
<span>{buttonText}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</ShimmerButton>
|
|
|
|
|
<Button
|
|
|
|
|
variant="outline"
|
|
|
|
|
className="border-white/20 text-foreground hover:bg-white/10 px-8 py-4 h-auto rounded-lg transition-all duration-300"
|
|
|
|
|
>
|
|
|
|
|
<span>Request Profiles</span>
|
|
|
|
|
<ArrowRight className="ml-2 w-4 h-4" />
|
|
|
|
|
</Button>
|
|
|
|
|
</motion.div>
|
|
|
|
|
</div>
|
|
|
|
|
</section>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default HireDeveloperSection;
|