Files
Wdipl-react/pages/CaseStudies.tsx

491 lines
17 KiB
TypeScript
Raw Normal View History

2025-07-11 16:54:37 +05:30
import { motion } from "framer-motion";
2025-09-01 18:16:11 +05:30
import {
Activity,
ArrowRight,
ArrowUpRight,
Award,
Building2,
FlaskConical,
Globe,
Heart,
Package,
PartyPopper,
Search,
ShoppingCart,
Star,
Tractor,
TrendingUp,
Trophy,
Tv,
Users,
Utensils
} from "lucide-react";
import { useState } from "react";
import { Helmet } from "react-helmet-async";
import { ImageWithFallback } from "../components/figma/ImageWithFallback";
2025-07-11 16:54:37 +05:30
import { Footer } from "../components/Footer";
2025-09-01 18:16:11 +05:30
import { Navigation } from "../components/Navigation";
2025-07-11 16:54:37 +05:30
import { Badge } from "../components/ui/badge";
2025-09-01 18:16:11 +05:30
import { Button } from "../components/ui/button";
import { Card, CardContent } from "../components/ui/card";
2025-07-11 16:54:37 +05:30
import { Input } from "../components/ui/input";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../components/ui/select";
2025-09-01 18:16:11 +05:30
import ambleCase from "../src/images/amble-case.webp";
import ranoutofCase from "../src/images/ranoutof-case.webp";
import seezunCase from "../src/images/seezun-case.webp";
import tcCase from "../src/images/tc-case.webp";
import wokaCase from "../src/images/woka-case.webp";
import gtCase from "../src/images/gt-case.webp";
import RrCase from "../src/images/resturant-reward-case.webp";
import dkCase from "../src/images/dkCase.webp";
import vib360Case from "../src/images/vib360Case.webp";
import niftyCase from "../src/images/niftyCase.webp";
import prospertyCase from "../src/images/prospertyCase.webp";
import simplitendCase from "../src/images/simplitendCase.webp";
import amozCase from "../src/images/amozCase.webp";
import farmCase from "../src/images/farmCase.webp";
import leanCase from "../src/images/leanCase.webp";
import { useNavigate } from "react-router-dom";
2025-07-21 20:16:17 +05:30
2025-07-11 16:54:37 +05:30
const caseStudies = [
{
id: 1,
title: "RanOutOf",
2025-09-01 18:16:11 +05:30
image: ranoutofCase,
2025-07-11 16:54:37 +05:30
category: "Lifestyle",
industry: "Consumer",
featured: true,
link: "/projects/ranoutof",
2025-09-01 18:16:11 +05:30
icon: Package
2025-07-11 16:54:37 +05:30
},
{
id: 2,
title: "Seezun",
2025-09-01 18:16:11 +05:30
image: seezunCase,
2025-07-11 16:54:37 +05:30
category: "E-commerce",
industry: "Retail",
featured: true,
link: "/projects/seezun",
icon: ShoppingCart
},
{
id: 3,
title: "Woka",
2025-09-01 18:16:11 +05:30
image: wokaCase,
2025-07-11 16:54:37 +05:30
category: "Health & Fitness",
industry: "Healthcare",
featured: true,
link: "/projects/woka",
2025-09-01 18:16:11 +05:30
icon: Tv
2025-07-11 16:54:37 +05:30
},
{
id: 6,
title: "Traders Circuit",
2025-09-01 18:16:11 +05:30
image: tcCase,
2025-07-11 16:54:37 +05:30
category: "FinTech",
industry: "Finance",
2025-09-01 18:16:11 +05:30
featured: true,
2025-07-11 16:54:37 +05:30
link: "/projects/traderscircuit",
icon: TrendingUp
},
{
id: 7,
title: "Good Times",
2025-09-01 18:16:11 +05:30
image: gtCase,
2025-07-11 16:54:37 +05:30
category: "Events",
industry: "Entertainment",
2025-09-01 18:16:11 +05:30
featured: true,
2025-07-11 16:54:37 +05:30
link: "/projects/goodtimes",
2025-09-01 18:16:11 +05:30
icon: PartyPopper
2025-07-11 16:54:37 +05:30
},
{
id: 8,
2025-09-01 18:16:11 +05:30
title: "Resturant Reward App",
image: RrCase,
category: "Loyalty & Rewards",
industry: "Hospitality",
featured: false,
link: "/comming-soon",
icon: Utensils
},
{
id: 9,
title: "Amble",
image: ambleCase,
category: "Social",
industry: "Heritage",
featured: false,
link: "/projects/amble",
icon: Users
},
{
id: 10,
title: "Amoz",
image: amozCase,
category: "Lifestyle",
industry: "Consumer",
featured: false,
link: "/projects/amoz",
icon: Heart
},
{
id: 11,
title: "Dorf Ketal",
image: dkCase,
category: "Lifestyle",
industry: "Chemicals",
featured: false,
link: "/comming-soon",
icon: FlaskConical
},
{
id: 12,
title: "VIB360",
image: vib360Case,
category: "Lifestyle",
industry: "Consumer",
featured: false,
link: "/projects/vib360",
icon: Activity
},
{
id: 13,
title: "Nifty 11",
image: niftyCase,
category: "Lifestyle",
industry: "Consumer",
featured: false,
link: "/comming-soon",
icon: Trophy
},
{
id: 13,
2025-07-11 16:54:37 +05:30
title: "Prosperty",
2025-09-01 18:16:11 +05:30
image: prospertyCase,
category: "Lifestyle",
2025-07-11 16:54:37 +05:30
industry: "Real Estate",
featured: false,
link: "/projects/prosperty",
icon: Building2
2025-09-01 18:16:11 +05:30
},
{
id: 14,
title: "Simpletend",
image: simplitendCase,
category: "Health & Fitness",
industry: "Healthcare",
featured: false,
link: "/projects/simpletend",
icon: Activity
},
{
id: 15,
title: "Farm Feeder",
image: farmCase,
category: "AgriTech",
industry: "Agriculture",
featured: false,
2025-09-01 18:23:25 +05:30
link: "/comming-soon",
2025-09-01 18:16:11 +05:30
icon: Tractor
},
{
id: 16,
title: "Lean In World",
image: leanCase,
category: "AgriTech",
industry: "Agriculture",
featured: false,
2025-09-01 18:23:25 +05:30
link: "/comming-soon",
2025-09-01 18:16:11 +05:30
icon: Globe
},
2025-07-11 16:54:37 +05:30
];
2025-09-01 18:16:11 +05:30
const industries = ["All Industries", "Consumer", "Retail", "Healthcare", "Technology", "Agriculture", "Finance", "Entertainment", "Real Estate","Heritage","Chemicals","Hospitality"];
const categories = ["All Categories", "Lifestyle", "E-commerce", "Health & Fitness", "Social", "AgriTech", "FinTech", "Events", "PropTech","Loyalty & Rewards"];
2025-07-11 16:54:37 +05:30
export const CaseStudies = () => {
const [searchTerm, setSearchTerm] = useState("");
const [selectedIndustry, setSelectedIndustry] = useState("All Industries");
const [selectedCategory, setSelectedCategory] = useState("All Categories");
const [showFeaturedOnly, setShowFeaturedOnly] = useState(false);
// Filter case studies based on search and filters
2025-09-01 18:16:11 +05:30
const filteredCaseStudies = caseStudies.filter((study) => {
const search = searchTerm.toLowerCase();
// Now we only check against `title`, `category`, and `industry`
const matchesSearch =
study.title.toLowerCase().includes(search) ||
study.category.toLowerCase().includes(search) ||
study.industry.toLowerCase().includes(search);
const matchesIndustry =
selectedIndustry === "All Industries" || study.industry === selectedIndustry;
const matchesCategory =
selectedCategory === "All Categories" || study.category === selectedCategory;
2025-07-23 18:53:54 +05:30
2025-07-11 16:54:37 +05:30
const matchesFeatured = !showFeaturedOnly || study.featured;
return matchesSearch && matchesIndustry && matchesCategory && matchesFeatured;
});
const navigate = useNavigate();
2025-07-11 16:54:37 +05:30
return (
<div className="dark min-h-screen bg-background">
{/* <Navigation /> */}
2025-07-23 18:53:54 +05:30
2025-07-11 16:54:37 +05:30
{/* Hero Section */}
<section className="relative pt-24 pb-20 overflow-hidden bg-black">
2025-07-23 18:53:54 +05:30
<Helmet>
{/* Page Title and Meta Description */}
<title>Case Studies | AI Web Development Projects by WDI</title>
<meta
name="description"
content="Explore real-world AI web development case studies from WDI. See how we help enterprises and startups create scalable, smart digital solutions."
/>
{/* Canonical Link */}
<link rel="canonical" href="https://www.wdipl.com/case-studies" />
2025-07-23 18:53:54 +05:30
{/* Open Graph Tags (for Facebook, LinkedIn) */}
<meta property="og:title" content="Case Studies | AI Web Development Projects by WDI" />
<meta
property="og:description"
content="Explore real-world AI web development case studies from WDI. See how we help enterprises and startups create scalable, smart digital solutions."
/>
<meta property="og:url" content="https://www.wdipl.com/services" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://www.wdipl.com/your-preview-image.jpg" />
{/* Twitter Card Tags */}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Case Studies | AI Web Development Projects by WDI" />
<meta
name="twitter:description"
content="Explore real-world AI web development case studies from WDI. See how we help enterprises and startups create scalable, smart digital solutions."
/>
<meta name="twitter:image" content="https://www.wdipl.com/your-preview-image.jpg" />
{/* Social Profiles (using JSON-LD Schema) */}
<script type="application/ld+json">
{`
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "WDI",
"url": "https://www.wdipl.com",
"sameAs": [
"https://www.facebook.com/wdideas",
"https://www.linkedin.com/in/website-developers-india/",
"https://www.instagram.com/wdipl/"
]
}
`}
</script>
</Helmet>
2025-07-11 16:54:37 +05:30
<div className="absolute inset-0 bg-gradient-to-br from-accent/5 via-background to-background" />
2025-07-23 18:53:54 +05:30
<motion.div
2025-07-11 16:54:37 +05:30
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }}
className="relative container mx-auto px-6 lg:px-8"
>
<div className="max-w-4xl mx-auto text-center">
<Badge variant="outline" className="mb-6 border-accent/20 text-accent">
Our Success Stories
</Badge>
<h1 className="text-4xl md:text-6xl lg:text-7xl font-semibold leading-tight mb-6">
<span className="text-white">Portfolios That </span>
2025-07-11 16:54:37 +05:30
<span className="text-accent">Define Excellence</span>
</h1>
<p className="text-xl text-gray-300 leading-relaxed max-w-3xl mx-auto">
Explore our portfolio of award-winning projects that have transformed businesses and delighted millions of users across diverse industries.
</p>
</div>
</motion.div>
</section>
{/* Filters Section */}
<section className="py-12 bg-background border-b border-white/10">
<div className="container mx-auto px-6 lg:px-8">
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, delay: 0.2 }}
className="max-w-6xl mx-auto"
>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 items-end">
{/* Search */}
<div className="relative">
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground w-4 h-4" />
<Input
2025-08-07 19:49:37 +05:30
placeholder="Search portfolios..."
2025-07-11 16:54:37 +05:30
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
className="pl-10 bg-card/50 border-white/10"
/>
</div>
{/* Industry Filter */}
<Select value={selectedIndustry} onValueChange={setSelectedIndustry}>
<SelectTrigger className="bg-card/50 border-white/10">
<SelectValue placeholder="Select Industry" />
</SelectTrigger>
<SelectContent>
{industries.map((industry) => (
<SelectItem key={industry} value={industry}>
{industry}
</SelectItem>
))}
</SelectContent>
</Select>
{/* Category Filter */}
<Select value={selectedCategory} onValueChange={setSelectedCategory}>
<SelectTrigger className="bg-card/50 border-white/10">
<SelectValue placeholder="Select Category" />
</SelectTrigger>
<SelectContent>
{categories.map((category) => (
<SelectItem key={category} value={category}>
{category}
</SelectItem>
))}
</SelectContent>
</Select>
{/* Featured Toggle */}
<Button
variant={showFeaturedOnly ? "default" : "outline"}
onClick={() => setShowFeaturedOnly(!showFeaturedOnly)}
2025-09-01 18:16:11 +05:30
className="justify-center h-9"
2025-07-11 16:54:37 +05:30
>
<Award className="w-4 h-4 mr-2" />
Featured Only
</Button>
</div>
{/* Results Count */}
<div className="mt-6 text-center">
<p className="text-muted-foreground">
2025-08-07 19:49:37 +05:30
Showing {filteredCaseStudies.length} of {caseStudies.length} portfolios
2025-07-11 16:54:37 +05:30
</p>
</div>
</motion.div>
</div>
</section>
{/* Case Studies Grid */}
<section className="py-20 bg-background">
<div className="container mx-auto px-6 lg:px-8">
<div className="max-w-7xl mx-auto">
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{filteredCaseStudies.map((study, index) => {
const IconComponent = study.icon;
return (
<motion.div
key={study.id}
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6, delay: index * 0.01 }}
2025-07-11 16:54:37 +05:30
viewport={{ once: true }}
whileHover={{ y: -8, scale: 1.02 }}
className="group cursor-pointer"
onClick={() => navigate(study.link)}
2025-07-11 16:54:37 +05:30
>
2025-09-01 18:16:11 +05:30
<Card className="bg-card/50 backdrop-blur-md border-white/10 hover:border-accent/30 transition-all duration-500 shadow-lg hover:shadow-2xl hover:shadow-accent/10 rounded-2xl overflow-hidden h-full"
onClick={(e) => {
e.stopPropagation();
navigate(study.link);
2025-09-01 18:16:11 +05:30
}}
>
<CardContent className="CardContentOverride p-0 pb-0 h-full">
2025-07-11 16:54:37 +05:30
{/* Image Header */}
<div className="relative overflow-hidden">
<ImageWithFallback
src={study.image}
alt={study.title}
2025-09-01 18:16:11 +05:30
className="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110"
2025-07-11 16:54:37 +05:30
/>
<div className="absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent" />
2025-07-23 18:53:54 +05:30
2025-07-11 16:54:37 +05:30
{/* Category Badge */}
2025-09-01 18:16:11 +05:30
<div className="absolute top-2 left-4">
2025-07-11 16:54:37 +05:30
<Badge className="bg-accent/90 text-white border-0">
{study.category}
</Badge>
</div>
{/* Featured Badge */}
{study.featured && (
2025-09-01 18:16:11 +05:30
<div className="absolute top-2 right-4">
2025-07-11 16:54:37 +05:30
<div className="bg-amber-500/90 text-white px-3 py-1 rounded-full text-xs font-medium flex items-center gap-1">
<Star className="w-3 h-3 fill-current" />
Featured
</div>
</div>
)}
{/* Icon Overlay */}
<div className="absolute bottom-4 left-4">
<div className="w-12 h-12 bg-white/20 backdrop-blur-md rounded-full flex items-center justify-center">
<IconComponent className="w-6 h-6 text-white" />
</div>
</div>
</div>
</CardContent>
</Card>
</motion.div>
);
})}
</div>
</div>
</div>
</section>
{/* CTA Section */}
<section className="py-20 bg-black">
<div className="container mx-auto px-6 lg:px-8">
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8 }}
viewport={{ once: true }}
className="text-center max-w-4xl mx-auto"
>
<h2 className="text-3xl lg:text-4xl font-semibold text-white mb-6">
Ready to Create Your Own Success Story?
</h2>
<p className="text-xl text-gray-300 leading-relaxed mb-8">
Join the ranks of industry leaders who have transformed their businesses with our innovative solutions.
</p>
<div className="flex flex-col sm:flex-row gap-4 justify-center">
2025-07-23 18:53:54 +05:30
<Button
2025-07-11 16:54:37 +05:30
size="lg"
className="bg-accent hover:bg-accent/90 text-white"
onClick={() => navigate("/start-a-project")}
2025-07-11 16:54:37 +05:30
>
Start Your Project
<ArrowUpRight className="w-4 h-4 ml-2" />
</Button>
2025-07-23 18:53:54 +05:30
<Button
2025-07-11 16:54:37 +05:30
size="lg"
variant="outline"
onClick={() => navigate("/contact-us")}
2025-07-11 16:54:37 +05:30
>
Schedule Consultation
<ArrowRight className="w-4 h-4 ml-2" />
</Button>
</div>
</motion.div>
</div>
</section>
{/* <Footer /> */}
2025-07-11 16:54:37 +05:30
</div>
);
};