working on hire talent banner
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { motion } from "framer-motion";
|
||||
import { color, motion } from "framer-motion";
|
||||
import {
|
||||
Activity,
|
||||
ArrowRight,
|
||||
@@ -61,7 +61,7 @@ const APIHeroWithCTA = () => {
|
||||
/>
|
||||
|
||||
{/* Canonical Link */}
|
||||
<link rel="canonical" href="https://www.wdipl.com/services/api-backend-development" />
|
||||
<link rel="canonical" href="https://www.wdipl.com/services/api-backend-development" />
|
||||
|
||||
{/* Open Graph Tags (for Facebook, LinkedIn) */}
|
||||
<meta property="og:title" content="API & Backend Development Services | Reliable Solutions by WDI" />
|
||||
@@ -637,14 +637,12 @@ const APIProcess = () => {
|
||||
whileInView={{ opacity: 1, x: 0 }}
|
||||
transition={{ duration: 0.8, delay: index * 0.2 }}
|
||||
viewport={{ once: true }}
|
||||
className={`flex items-center ${
|
||||
isEven ? "lg:flex-row" : "lg:flex-row-reverse"
|
||||
} flex-col lg:gap-16 gap-8`}
|
||||
className={`flex items-center ${isEven ? "lg:flex-row" : "lg:flex-row-reverse"
|
||||
} flex-col lg:gap-16 gap-8`}
|
||||
>
|
||||
<div
|
||||
className={`flex-1 ${
|
||||
isEven ? "lg:text-right" : "lg:text-left"
|
||||
} text-center lg:text-left`}
|
||||
className={`flex-1 ${isEven ? "lg:text-right" : "lg:text-left"
|
||||
} text-center lg:text-left`}
|
||||
>
|
||||
<div className="bg-card/20 backdrop-blur-md rounded-2xl border border-white/10 p-8 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl">
|
||||
<div className="flex items-center gap-4 mb-4 justify-center lg:justify-start">
|
||||
@@ -897,34 +895,41 @@ const APITechStack = () => {
|
||||
name: "Node.js",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg",
|
||||
category: "Runtime",
|
||||
color: "green",
|
||||
},
|
||||
{
|
||||
name: "Python",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg",
|
||||
category: "Language",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "Java",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/java/java-original.svg",
|
||||
category: "Language",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "Ruby",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/ruby/ruby-original.svg",
|
||||
category: "Language",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "Go",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/go/go-original.svg",
|
||||
category: "Language",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "PHP",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/php/php-original.svg",
|
||||
category: "Language",
|
||||
color: "blue",
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
const frameworks = [
|
||||
{
|
||||
name: "Express.js",
|
||||
@@ -953,24 +958,29 @@ const APITechStack = () => {
|
||||
name: "PostgreSQL",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/postgresql/postgresql-original.svg",
|
||||
category: "SQL",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "MySQL",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/mysql/mysql-original.svg",
|
||||
category: "SQL",
|
||||
color: "blue",
|
||||
},
|
||||
{
|
||||
name: "MongoDB",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/mongodb/mongodb-original.svg",
|
||||
category: "NoSQL",
|
||||
color: "green",
|
||||
},
|
||||
{
|
||||
name: "Redis",
|
||||
logo: "https://cdn.jsdelivr.net/gh/devicons/devicon/icons/redis/redis-original.svg",
|
||||
category: "Cache",
|
||||
color: "orange",
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
const cloudPlatforms = [
|
||||
{ name: "AWS", icon: Cloud, description: "Amazon Web Services" },
|
||||
{ name: "Azure", icon: CloudCog, description: "Microsoft Azure" },
|
||||
@@ -1022,34 +1032,47 @@ const APITechStack = () => {
|
||||
<h3 className="text-2xl font-semibold text-foreground mb-8 text-center">
|
||||
Backend Languages & Runtimes
|
||||
</h3>
|
||||
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-6">
|
||||
{backends.map((tech, index) => (
|
||||
<motion.div
|
||||
key={index}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||
viewport={{ once: true }}
|
||||
whileHover={{ y: -5, scale: 1.05 }}
|
||||
className="group"
|
||||
>
|
||||
<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 p-6 text-center">
|
||||
<div className="w-12 h-12 mx-auto mb-4 flex items-center justify-center">
|
||||
<ImageWithFallback
|
||||
src={tech.logo}
|
||||
alt={tech.name}
|
||||
className="w-10 h-10 object-contain filter brightness-0 invert dark:brightness-100 dark:invert-0 group-hover:brightness-100 group-hover:invert-0 transition-all duration-300"
|
||||
/>
|
||||
</div>
|
||||
<h4 className="font-semibold text-foreground text-sm mb-1">
|
||||
{tech.name}
|
||||
</h4>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
{tech.category}
|
||||
</p>
|
||||
</Card>
|
||||
</motion.div>
|
||||
))}
|
||||
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
|
||||
{backends.map((tech, index) => {
|
||||
// const IconComponent = tech.icon;
|
||||
const colorClasses = {
|
||||
blue: "bg-blue-500/20 text-blue-400 border-blue-500/30",
|
||||
orange: "bg-orange-500/20 text-orange-400 border-orange-500/30",
|
||||
green: "bg-green-500/20 text-green-400 border-green-500/30",
|
||||
red: "bg-red-500/20 text-red-400 border-red-500/30",
|
||||
};
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
key={index}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||
viewport={{ once: true }}
|
||||
whileHover={{ y: -5, scale: 1.05 }}
|
||||
className="group"
|
||||
>
|
||||
<Card className="bg-gray-900/50 backdrop-blur-md border-gray-800 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl rounded-2xl p-4 text-center">
|
||||
<div
|
||||
className={`w-12 h-12 rounded-lg flex items-center justify-center mx-auto mb-3 ${colorClasses[tech.color as keyof typeof colorClasses] ||
|
||||
"bg-accent/20"
|
||||
}`}
|
||||
>
|
||||
<ImageWithFallback
|
||||
src={tech.logo}
|
||||
alt={tech.name}
|
||||
className="w-8 h-8 object-contain"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<h4 className="font-semibold text-white text-sm mb-1">
|
||||
{tech.name}
|
||||
</h4>
|
||||
<p className="text-xs text-gray-400">{tech.category}</p>
|
||||
</Card>
|
||||
</motion.div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
@@ -1105,32 +1128,47 @@ const APITechStack = () => {
|
||||
<h3 className="text-2xl font-semibold text-foreground mb-8 text-center">
|
||||
Database Technologies
|
||||
</h3>
|
||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
||||
{databases.map((db, index) => (
|
||||
<motion.div
|
||||
key={index}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||
viewport={{ once: true }}
|
||||
whileHover={{ y: -5, scale: 1.05 }}
|
||||
className="group"
|
||||
>
|
||||
<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 p-4 text-center">
|
||||
<div className="w-10 h-10 mx-auto mb-3 flex items-center justify-center">
|
||||
<ImageWithFallback
|
||||
src={db.logo}
|
||||
alt={db.name}
|
||||
className="w-8 h-8 object-contain filter brightness-0 invert dark:brightness-100 dark:invert-0 group-hover:brightness-100 group-hover:invert-0 transition-all duration-300"
|
||||
/>
|
||||
</div>
|
||||
<h4 className="font-semibold text-foreground text-sm mb-1">
|
||||
{db.name}
|
||||
</h4>
|
||||
<p className="text-xs text-muted-foreground">{db.category}</p>
|
||||
</Card>
|
||||
</motion.div>
|
||||
))}
|
||||
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
|
||||
{databases.map((tech, index) => {
|
||||
// const IconComponent = tech.icon;
|
||||
const colorClasses = {
|
||||
blue: "bg-blue-500/20 text-blue-400 border-blue-500/30",
|
||||
orange: "bg-orange-500/20 text-orange-400 border-orange-500/30",
|
||||
green: "bg-green-500/20 text-green-400 border-green-500/30",
|
||||
red: "bg-red-500/20 text-red-400 border-red-500/30",
|
||||
};
|
||||
|
||||
return (
|
||||
<motion.div
|
||||
key={index}
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
whileInView={{ opacity: 1, y: 0 }}
|
||||
transition={{ duration: 0.5, delay: index * 0.01 }}
|
||||
viewport={{ once: true }}
|
||||
whileHover={{ y: -5, scale: 1.05 }}
|
||||
className="group"
|
||||
>
|
||||
<Card className="bg-gray-900/50 backdrop-blur-md border-gray-800 hover:border-accent/30 transition-all duration-300 shadow-lg hover:shadow-xl rounded-2xl p-4 text-center">
|
||||
<div
|
||||
className={`w-12 h-12 rounded-lg flex items-center justify-center mx-auto mb-3 ${colorClasses[tech.color as keyof typeof colorClasses] ||
|
||||
"bg-accent/20"
|
||||
}`}
|
||||
>
|
||||
<ImageWithFallback
|
||||
src={tech.logo}
|
||||
alt={tech.name}
|
||||
className="w-8 h-8 object-contain"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<h4 className="font-semibold text-white text-sm mb-1">
|
||||
{tech.name}
|
||||
</h4>
|
||||
<p className="text-xs text-gray-400">{tech.category}</p>
|
||||
</Card>
|
||||
</motion.div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</motion.div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user