2025-07-11 16:54:37 +05:30
import { motion } from "framer-motion" ;
2025-07-30 18:42:19 +05:30
import { ArrowLeft , ExternalLink , Calendar , Users , TrendingUp , BarChart3 , Smartphone , Target , CheckCircle , ArrowRight , Zap , Shield , Database , Code , RefreshCw , Activity , Award , Star , Clock , Building2 , Brain , Globe , Layers , Server , Cloud , Monitor , Cpu , Palette , Wrench , Heart , Share2 , MapPin , Filter , Bell , Gift , CreditCard } from "lucide-react" ;
2025-07-11 16:54:37 +05:30
import { Navigation } from "../components/Navigation" ;
import { Footer } from "../components/Footer" ;
import { Button } from "../components/ui/button" ;
import { GridPattern } from "../components/GridPattern" ;
import { ImageWithFallback } from "../components/figma/ImageWithFallback" ;
import { navigateTo } from "../App" ;
2025-07-30 18:42:19 +05:30
import { Badge } from "@/components/ui/badge" ;
import { Card , CardContent } from "@/components/ui/card" ;
import goodTimesLogo from "../src/images/good-times-logo.webp" ;
2025-07-11 16:54:37 +05:30
2025-07-30 18:42:19 +05:30
// Technology to icon mapping
const getTechIcon = ( tech : string ) = > {
const techIconMap : { [ key : string ] : React . ReactNode } = {
"Flutter" : < Smartphone className = "w-4 h-4" / > ,
"Laravel" : < Server className = "w-4 h-4" / > ,
"MySQL" : < Database className = "w-4 h-4" / > ,
"Firebase" : < Cloud className = "w-4 h-4" / > ,
"WebView" : < Monitor className = "w-4 h-4" / > ,
"React Native" : < Smartphone className = "w-4 h-4" / > ,
"React" : < Monitor className = "w-4 h-4" / > ,
"Node.js" : < Server className = "w-4 h-4" / > ,
"MongoDB" : < Database className = "w-4 h-4" / > ,
"WebSocket" : < Activity className = "w-4 h-4" / > ,
"Redux" : < Layers className = "w-4 h-4" / > ,
"TypeScript" : < Code className = "w-4 h-4" / > ,
"JavaScript" : < Code className = "w-4 h-4" / > ,
"AWS" : < Cloud className = "w-4 h-4" / > ,
"Google Cloud" : < Cloud className = "w-4 h-4" / > ,
"Azure" : < Cloud className = "w-4 h-4" / > ,
"PostgreSQL" : < Database className = "w-4 h-4" / > ,
"Python" : < Code className = "w-4 h-4" / > ,
"Java" : < Code className = "w-4 h-4" / > ,
"Swift" : < Smartphone className = "w-4 h-4" / > ,
"Kotlin" : < Smartphone className = "w-4 h-4" / > ,
"Docker" : < Server className = "w-4 h-4" / > ,
"Kubernetes" : < Server className = "w-4 h-4" / > ,
"GraphQL" : < Activity className = "w-4 h-4" / > ,
"REST API" : < Activity className = "w-4 h-4" / > ,
"Express" : < Server className = "w-4 h-4" / > ,
"Vue.js" : < Monitor className = "w-4 h-4" / > ,
"Angular" : < Monitor className = "w-4 h-4" / >
} ;
return techIconMap [ tech ] || < Wrench className = "w-4 h-4" / > ;
} ;
const projectDetails = {
title : "GoodTimes: Social Event Discovery & Referral Platform" ,
subtitle : "A feature-rich mobile application for discovering social events, managing event participation, and earning through referrals—developed to scale user engagement and streamline event organizer workflows." ,
technologies : [ "Flutter" , "Laravel" , "MySQL" , "Firebase" , "WebView" ] ,
industries : [ "Social Media" , "Event Management" , "Entertainment" ] ,
duration : "Ongoing (initial build completed in 4 months, enhancement phase under progress)" ,
teamSize : "5 Developers, 2 Designers, 1 PM, 1 QA, 1 Business Analyst" ,
platforms : [ "iOS" , "Android" , "Web Admin Panel" ]
} ;
const keyAchievements = [
{ label : "Early Access Users" , value : "15K+" , description : "Successfully onboarded" } ,
{ label : "RSVP Engagement" , value : "70%" , description : "Toggle interaction rate" } ,
{ label : "User Retention" , value : "78%" , description : "30-day retention rate" }
2025-07-11 16:54:37 +05:30
] ;
2025-07-30 18:42:19 +05:30
const businessObjectives = [
"Enable users to discover and RSVP to events with ease" ,
"Reward users for referrals and active engagement" ,
"Provide planners with tools to list events and track attendance" ,
"Integrate a scalable wallet and payment structure" ,
"Launch in the UK market, scale across Europe"
] ;
const coreFeatures = [
2025-07-11 16:54:37 +05:30
{
2025-07-30 18:42:19 +05:30
title : "Multi-role App Access" ,
description : "Distinct experiences for Customers and Event Planners with tailored interfaces" ,
icon : < Users className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Referral + Wallet Engine" ,
description : "Share QR/referral codes and track earnings with integrated wallet system" ,
icon : < Gift className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Event Calendar Engine" ,
description : "Advanced filtering by genre, location, date, and interest with visual calendar" ,
icon : < Calendar className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "RSVP & Reminder System" ,
description : "In-app toggle, calendar sync, fire/exclusive event labels with smart notifications" ,
icon : < Bell className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Content Management" ,
description : "Comprehensive blogs, FAQs, About, and Contact modules with CMS integration" ,
icon : < Code className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Rating & Review Engine" ,
description : "Post-event feedback system visible to all users for community trust" ,
icon : < Star className = "w-6 h-6" / >
2025-07-11 16:54:37 +05:30
}
] ;
2025-07-30 18:42:19 +05:30
const technicalChallenges = [
{
title : "Dynamic Referral Logic" ,
description : "Complex subscription rules with lockouts and wallet freeze mechanisms" ,
icon : < Activity className = "w-5 h-5" / >
} ,
2025-07-11 16:54:37 +05:30
{
2025-07-30 18:42:19 +05:30
title : "Multi-role Architecture" ,
description : "Individual logic layers for customers, planners, and admin with secure access" ,
icon : < Shield className = "w-5 h-5" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Calendar Performance" ,
description : "Optimizing calendar-level performance for large event datasets" ,
icon : < Clock className = "w-5 h-5" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
title : "Wallet System Security" ,
description : "Flexible yet secure wallet system with payment thresholds and fraud prevention" ,
icon : < CreditCard className = "w-5 h-5" / >
}
] ;
const developmentPhases = [
{
phase : "Discovery & Planning" ,
duration : "2 weeks" ,
description : "User journeys, event lifecycle modeling, tech recommendations" ,
icon : < Target className = "w-5 h-5" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
phase : "UI/UX Design" ,
duration : "3 weeks" ,
description : "Wireframing, onboarding flow mockups, calendar UX design" ,
icon : < Palette className = "w-5 h-5" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
phase : "Core Development" ,
duration : "8 weeks" ,
description : "Flutter builds, backend API, wallet logic, event management system" ,
icon : < Code className = "w-5 h-5" / >
2025-07-11 16:54:37 +05:30
} ,
{
2025-07-30 18:42:19 +05:30
phase : "Testing & QA" ,
duration : "3 weeks" ,
description : "Multi-role testing, referral validation, UI regression testing" ,
icon : < CheckCircle className = "w-5 h-5" / >
} ,
{
phase : "Deployment & Support" ,
duration : "1 week" ,
description : "App Store/Play Store submission, admin access handover, monitoring setup" ,
icon : < Zap className = "w-5 h-5" / >
}
] ;
const resultsMetrics = [
{ label : "Google Play Rating" , value : "4.7★" , description : "User satisfaction score" } ,
{ label : "API Response Time" , value : "120ms" , description : "Average response time" } ,
{ label : "Monthly Growth" , value : "+22%" , description : "User growth rate" } ,
{ label : "Referral Contribution" , value : "35%" , description : "New user acquisition" } ,
{ label : "Session Time Increase" , value : "+28%" , description : "Due to social features" } ,
{ label : "Event Attendance" , value : "2x" , description : "Planner reported increase" }
] ;
const technicalAchievements = [
"Subscription logic with freeze/forfeit tracking system" ,
"Referral engine with QR + WhatsApp API integration" ,
"Optimized Flutter app: <10MB APK with lightning UI transitions" ,
"Admin dashboard enabling full control over users and events" ,
"Gamified event discovery with engagement-driven tags" ,
"Smart calendar sync with one-tap RSVP functionality"
] ;
const lessonsLearned = {
worked : [
"Clear onboarding UX improved signup conversion by 37%" ,
"Agile iteration helped manage enhancement requests efficiently" ,
"In-app referral education improved share rates significantly"
] ,
improve : [
"Subscription billing and wallet freeze logic were complex to align" ,
"WhatsApp sharing setup needed special attention for API approvals" ,
"Multi-role testing required more comprehensive initial planning"
]
} ;
const futureRoadmap = [
{
phase : "Next 6 Months" ,
features : [ "Event media gallery integration" , "AI-powered event recommendations" , "Push analytics for social feature usage" , "Performance dashboards for event organizers" ]
} ,
{
phase : "12 Months Vision" ,
features : [ "Marketplace for ticket sales" , "User-level badges and community forums" , "Event sponsor promotions" , "Multi-language support for EU expansion" ]
2025-07-11 16:54:37 +05:30
}
] ;
export const GoodTimesProject = ( ) = > {
return (
< div className = "dark min-h-screen bg-background" >
< Navigation / >
2025-07-30 18:42:19 +05:30
{ /* Section 1: Hero with Heading, Subheading, and Image */ }
< section className = "relative pt-32 pb-24 bg-background overflow-hidden" >
2025-07-11 16:54:37 +05:30
< GridPattern strokeDasharray = "4 2" / >
2025-07-30 18:42:19 +05:30
< div className = "relative z-10 container mx-auto px-4 lg:px-6" >
2025-07-11 16:54:37 +05:30
{ /* Back Button */ }
< motion.div
initial = { { opacity : 0 , x : - 20 } }
animate = { { opacity : 1 , x : 0 } }
transition = { { duration : 0.6 } }
2025-07-30 18:42:19 +05:30
className = "mb-12"
2025-07-11 16:54:37 +05:30
>
< Button
variant = "ghost"
2025-07-30 18:42:19 +05:30
onClick = { ( ) = > navigateTo ( '/case-studies' ) }
className = "text-muted-foreground hover:text-foreground flex items-center gap-2 px-0 hover:bg-transparent"
2025-07-11 16:54:37 +05:30
>
< ArrowLeft className = "w-4 h-4" / >
2025-07-30 18:42:19 +05:30
Back to Portfolio
2025-07-11 16:54:37 +05:30
< / Button >
< / motion.div >
2025-07-30 18:42:19 +05:30
< div className = "grid lg:grid-cols-12 gap-16 items-center" >
{ /* Content - Left Aligned */ }
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 30 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
2025-07-30 18:42:19 +05:30
className = "lg:col-span-7"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< div className = "mb-6" >
< Badge variant = "secondary" className = "text-accent border-accent/20 bg-accent/10" >
Case Study
< / Badge >
< / div >
< h1 className = "text-4xl lg:text-6xl font-semibold text-foreground mb-8 leading-tight" >
{ projectDetails . title }
2025-07-11 16:54:37 +05:30
< / h1 >
2025-07-30 18:42:19 +05:30
< p className = "text-xl text-muted-foreground mb-10 leading-relaxed max-w-2xl" >
{ projectDetails . subtitle }
2025-07-11 16:54:37 +05:30
< / p >
2025-07-30 18:42:19 +05:30
< / motion.div >
2025-07-11 16:54:37 +05:30
2025-07-30 18:42:19 +05:30
{ /* Project Image */ }
< motion.div
initial = { { opacity : 0 , y : 30 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 , delay : 0.2 } }
className = "lg:col-span-5"
>
< div className = "relative aspect-[4/3] overflow-hidden bg-card/30 rounded-2xl border border-border/50 p-4" >
< ImageWithFallback
src = "https://images.unsplash.com/photo-1492684223066-81342ee5ff30?w=800&h=600&fit=crop&crop=center"
alt = "GoodTimes social event discovery platform showcasing event calendar, referral system, and community features"
className = "w-full h-full object-contain object-center rounded-xl"
/ >
2025-07-11 16:54:37 +05:30
< / div >
< / motion.div >
2025-07-30 18:42:19 +05:30
< / div >
< / div >
< / section >
2025-07-11 16:54:37 +05:30
2025-07-30 18:42:19 +05:30
{ /* Section 2: Project Details */ }
< section className = "py-24 bg-card/30 relative overflow-hidden" >
{ /* Background Elements */ }
< div className = "absolute inset-0 bg-gradient-to-br from-accent/5 via-transparent to-blue-500/5" / >
< div className = "absolute top-20 right-20 w-64 h-64 bg-accent/10 rounded-full blur-3xl opacity-20" / >
< div className = "absolute bottom-20 left-20 w-48 h-48 bg-blue-500/10 rounded-full blur-3xl opacity-20" / >
< div className = "container mx-auto px-4 lg:px-6 relative z-10" >
< div className = "max-w-7xl mx-auto" >
{ /* Section Header */ }
< motion.div
initial = { { opacity : 0 , y : 30 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
className = "text-center mb-16"
>
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Project Details
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Comprehensive overview of technologies , timeline , and key achievements that drove this social platform ' s success
< / p >
< / motion.div >
{ /* Project Meta Information Grid */ }
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 30 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 , delay : 0.2 } }
2025-07-30 18:42:19 +05:30
className = "grid lg:grid-cols-2 gap-8 mb-20"
>
{ /* Technologies & Industries Card */ }
< div className = "bg-background/40 backdrop-blur-xl rounded-2xl p-8 border border-border/30 hover:border-accent/20 transition-all duration-500 group" >
< div className = "space-y-8" >
{ /* Technologies */ }
< div >
< div className = "flex items-center gap-3 mb-6" >
< div className = "w-12 h-12 bg-accent/10 backdrop-blur-sm rounded-xl border border-accent/20 flex items-center justify-center group-hover:bg-accent/20 transition-all duration-300" >
< Code className = "w-6 h-6 text-accent" / >
< / div >
< h3 className = "text-xl font-semibold text-foreground" > Technologies < / h3 >
< / div >
< div className = "flex flex-wrap gap-3" >
{ projectDetails . technologies . map ( ( tech ) = > (
< Badge
key = { tech }
variant = "outline"
className = "text-base border-border/40 bg-background/30 hover:bg-accent/10 hover:border-accent/40 flex items-center gap-2 px-4 py-2 transition-all duration-300"
>
< span className = "text-accent" > { getTechIcon ( tech ) } < / span >
{ tech }
< / Badge >
) ) }
< / div >
< / div >
{ /* Industries */ }
< div >
< div className = "flex items-center gap-3 mb-6" >
< div className = "w-12 h-12 bg-blue-500/10 backdrop-blur-sm rounded-xl border border-blue-500/20 flex items-center justify-center group-hover:bg-blue-500/20 transition-all duration-300" >
< Building2 className = "w-6 h-6 text-blue-400" / >
< / div >
< h3 className = "text-xl font-semibold text-foreground" > Industries < / h3 >
< / div >
< div className = "flex flex-wrap gap-3" >
{ projectDetails . industries . map ( ( industry ) = > (
< Badge
key = { industry }
variant = "secondary"
className = "text-base bg-blue-500/10 border-blue-500/20 text-blue-100 hover:bg-blue-500/20 px-4 py-2 transition-all duration-300"
>
{ industry }
< / Badge >
) ) }
< / div >
< / div >
< / div >
< / div >
{ /* Timeline & Team Card */ }
< div className = "bg-background/40 backdrop-blur-xl rounded-2xl p-8 border border-border/30 hover:border-green-400/20 transition-all duration-500 group" >
< div className = "space-y-8" >
{ /* Duration */ }
< div >
< div className = "flex items-center gap-3 mb-6" >
< div className = "w-12 h-12 bg-green-400/10 backdrop-blur-sm rounded-xl border border-green-400/20 flex items-center justify-center group-hover:bg-green-400/20 transition-all duration-300" >
< Calendar className = "w-6 h-6 text-green-400" / >
< / div >
< h3 className = "text-xl font-semibold text-foreground" > Project Timeline < / h3 >
< / div >
< p className = "text-lg text-muted-foreground pl-15" > { projectDetails . duration } < / p >
< / div >
{ /* Team */ }
< div >
< div className = "flex items-center gap-3 mb-6" >
< div className = "w-12 h-12 bg-purple-500/10 backdrop-blur-sm rounded-xl border border-purple-500/20 flex items-center justify-center group-hover:bg-purple-500/20 transition-all duration-300" >
< Users className = "w-6 h-6 text-purple-400" / >
< / div >
< h3 className = "text-xl font-semibold text-foreground" > Team Composition < / h3 >
< / div >
< p className = "text-lg text-muted-foreground pl-15" > { projectDetails . teamSize } < / p >
< / div >
{ /* Platforms */ }
< div >
< div className = "flex items-center gap-3 mb-6" >
< div className = "w-12 h-12 bg-orange-500/10 backdrop-blur-sm rounded-xl border border-orange-500/20 flex items-center justify-center group-hover:bg-orange-500/20 transition-all duration-300" >
< Smartphone className = "w-6 h-6 text-orange-400" / >
< / div >
< h3 className = "text-xl font-semibold text-foreground" > Target Platforms < / h3 >
< / div >
< div className = "flex gap-3 pl-15" >
{ projectDetails . platforms . map ( ( platform ) = > (
< Badge
key = { platform }
variant = "outline"
className = "text-base border-orange-400/40 bg-orange-500/10 text-orange-100 hover:bg-orange-500/20 px-3 py-1"
>
{ platform }
< / Badge >
) ) }
< / div >
< / div >
< / div >
< / div >
< / motion.div >
{ /* Key Achievements Section */ }
< motion.div
initial = { { opacity : 0 , y : 30 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 , delay : 0.4 } }
className = "mb-16"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< div className = "text-center mb-12" >
< h2 className = "text-3xl lg:text-4xl font-semibold text-foreground mb-6" >
Key Impact & Results
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Measurable outcomes that demonstrate the platform ' s success in social event discovery and engagement
< / p >
< / div >
< div className = "grid grid-cols-1 md:grid-cols-3 gap-8" >
{ keyAchievements . map ( ( achievement , index ) = > (
< motion.div
key = { achievement . label }
initial = { { opacity : 0 , y : 20 } }
animate = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : 0.6 + index * 0.1 } }
whileHover = { {
scale : 1.02 ,
y : - 4 ,
transition : { duration : 0.3 , ease : "easeOut" }
} }
className = "bg-background/50 backdrop-blur-xl rounded-2xl p-8 border border-border/40 hover:border-accent/30 hover:bg-background/60 transition-all duration-500 group cursor-pointer relative overflow-hidden"
>
{ /* Card Background Gradient */ }
< div className = "absolute inset-0 bg-gradient-to-br from-accent/5 via-transparent to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-500" / >
{ /* Content */ }
< div className = "relative z-10 text-center" >
{ /* Value */ }
< div className = "text-3xl lg:text-4xl font-bold text-accent mb-4 group-hover:text-accent transition-colors duration-300" >
{ achievement . value }
< / div >
{ /* Label */ }
< div className = "text-xl font-semibold text-foreground mb-3 group-hover:text-foreground transition-colors duration-300" >
{ achievement . label }
< / div >
{ /* Description */ }
< div className = "text-base text-muted-foreground leading-relaxed group-hover:text-muted-foreground transition-colors duration-300" >
{ achievement . description }
< / div >
< / div >
{ /* Hover Effect Line */ }
< div className = "absolute bottom-0 left-0 w-full h-1 bg-gradient-to-r from-accent to-accent/50 transform scale-x-0 group-hover:scale-x-100 transition-transform duration-500 origin-left" / >
< / motion.div >
) ) }
< / div >
2025-07-11 16:54:37 +05:30
< / motion.div >
< / div >
< / div >
< / section >
2025-07-30 18:42:19 +05:30
{ /* Executive Summary */ }
< section className = "py-24 bg-card/30" >
< div className = "container mx-auto px-4 lg:px-6" >
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "max-w-4xl mx-auto text-center"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-8" >
Executive Summary
< / h2 >
< p className = "text-xl text-muted-foreground leading-relaxed" >
GoodTimes is a comprehensive social event discovery platform that bridges the gap between event - seekers and organizers through innovative referral systems , gamified engagement , and seamless event management . Built with scalability and user experience at its core , the platform transforms how people discover , attend , and organize social events while creating sustainable revenue streams through viral referral mechanisms .
< / p >
< / motion.div >
< / div >
< / section >
{ /* Project Overview */ }
< section className = "py-24 bg-background" >
< div className = "container mx-auto px-4 lg:px-6" >
< div className = "max-w-6xl mx-auto" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "text-center mb-16"
>
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Project Overview
< / h2 >
< / motion.div >
< div className = "grid lg:grid-cols-3 gap-12" >
{ /* Background & Context */ }
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
2025-07-30 18:42:19 +05:30
whileHover = { {
scale : 1.05 ,
y : - 4 ,
transition : { duration : 0.3 , ease : "easeOut" }
} }
transition = { { duration : 0.6 } }
2025-07-11 16:54:37 +05:30
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "bg-card/30 rounded-2xl p-8 border-2 border-accent/20 cursor-pointer group hover:border-accent/40 hover:bg-card/40 hover:shadow-lg hover:shadow-accent/10 transition-all duration-300 ease-out"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
{ /* Glassmorphism Icon Container */ }
< motion.div
initial = { { opacity : 0 , scale : 0.8 } }
whileInView = { { opacity : 1 , scale : 1 } }
transition = { { duration : 0.6 , delay : 0.2 } }
viewport = { { once : true } }
className = "flex justify-start mb-6"
>
< div className = "w-16 h-16 bg-background/20 backdrop-blur-sm rounded-full border border-border/30 flex items-center justify-center group-hover:border-accent/50 group-hover:bg-accent/10 transition-all duration-300 ease-out" >
< Globe className = "w-8 h-8 text-accent group-hover:scale-110 transition-transform duration-300 ease-out" / >
< / div >
< / motion.div >
< h3 className = "text-2xl font-semibold text-foreground mb-6" > Background & Context < / h3 >
< p className = "text-muted-foreground leading-relaxed" >
Social event discovery and networking apps have grown significantly , especially among Gen - Z and millennials . GoodTimes aims to tap into this momentum by adding gamification ( referrals , ratings , exclusive tags ) and simplifying how users discover and commit to social events .
< / p >
< / motion.div >
{ /* Target Audience */ }
< motion.div
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
whileHover = { {
scale : 1.05 ,
y : - 4 ,
transition : { duration : 0.3 , ease : "easeOut" }
} }
transition = { { duration : 0.6 , delay : 0.1 } }
viewport = { { once : true } }
className = "bg-card/30 rounded-2xl p-8 border-2 border-blue-400/20 cursor-pointer group hover:border-blue-400/40 hover:bg-card/40 hover:shadow-lg hover:shadow-blue-400/10 transition-all duration-300 ease-out"
>
{ /* Glassmorphism Icon Container */ }
< motion.div
initial = { { opacity : 0 , scale : 0.8 } }
whileInView = { { opacity : 1 , scale : 1 } }
transition = { { duration : 0.6 , delay : 0.3 } }
viewport = { { once : true } }
className = "flex justify-start mb-6"
>
< div className = "w-16 h-16 bg-background/20 backdrop-blur-sm rounded-full border border-border/30 flex items-center justify-center group-hover:border-blue-400/50 group-hover:bg-blue-400/10 transition-all duration-300 ease-out" >
< Users className = "w-8 h-8 text-blue-400 group-hover:scale-110 transition-transform duration-300 ease-out" / >
< / div >
< / motion.div >
< h3 className = "text-2xl font-semibold text-foreground mb-6" > Target Audience < / h3 >
< p className = "text-muted-foreground leading-relaxed" >
Socially active individuals aged 18 – 35 interested in networking , music , fitness , and local events . Event planners and venues are the second audience , seeking efficient tools to reach new audiences and manage registrations .
< / p >
< / motion.div >
{ /* Business Objectives */ }
< motion.div
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
whileHover = { {
scale : 1.05 ,
y : - 4 ,
transition : { duration : 0.3 , ease : "easeOut" }
} }
transition = { { duration : 0.6 , delay : 0.2 } }
viewport = { { once : true } }
className = "bg-card/30 rounded-2xl p-8 border-2 border-green-400/20 cursor-pointer group hover:border-green-400/40 hover:bg-card/40 hover:shadow-lg hover:shadow-green-400/10 transition-all duration-300 ease-out"
>
{ /* Glassmorphism Icon Container */ }
< motion.div
initial = { { opacity : 0 , scale : 0.8 } }
whileInView = { { opacity : 1 , scale : 1 } }
transition = { { duration : 0.6 , delay : 0.4 } }
viewport = { { once : true } }
className = "flex justify-start mb-6"
>
< div className = "w-16 h-16 bg-background/20 backdrop-blur-sm rounded-full border border-border/30 flex items-center justify-center group-hover:border-green-400/50 group-hover:bg-green-400/10 transition-all duration-300 ease-out" >
< Target className = "w-8 h-8 text-green-400 group-hover:scale-110 transition-transform duration-300 ease-out" / >
< / div >
< / motion.div >
< h3 className = "text-2xl font-semibold text-foreground mb-6" > Business Objectives < / h3 >
< div className = "space-y-3" >
{ businessObjectives . map ( ( objective , index ) = > (
< div key = { index } className = "flex items-start gap-3" >
< CheckCircle className = "w-5 h-5 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground text-base" > { objective } < / span >
< / div >
) ) }
2025-07-11 16:54:37 +05:30
< / div >
2025-07-30 18:42:19 +05:30
< / motion.div >
< / div >
< / div >
< / div >
< / section >
{ /* Core Features */ }
< section className = "py-24 bg-card/30" >
< div className = "container mx-auto px-4 lg:px-6" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "max-w-6xl mx-auto"
>
< div className = "text-center mb-16" >
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Core Features & Functionality
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
A comprehensive suite of tools designed to revolutionize social event discovery with gamification and seamless organizer workflows .
< / p >
< / div >
< div className = "grid md:grid-cols-2 lg:grid-cols-3 gap-8" >
{ coreFeatures . map ( ( feature , index ) = > (
< motion.div
key = { feature . title }
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : index * 0.1 } }
viewport = { { once : true } }
>
< Card className = "h-full bg-card/50 border-border/50 hover:border-accent/30 transition-all duration-300 group" >
< CardContent className = "p-8" >
< div className = "text-accent mb-4 group-hover:scale-110 transition-transform duration-300" >
{ feature . icon }
< / div >
< h3 className = "text-xl font-semibold text-foreground mb-4" >
{ feature . title }
< / h3 >
< p className = "text-muted-foreground leading-relaxed" >
{ feature . description }
< / p >
< / CardContent >
< / Card >
< / motion.div >
) ) }
< / div >
< / motion.div >
< / div >
< / section >
{ /* Challenges & Solution Architecture */ }
< section className = "py-24 bg-background" >
< div className = "container mx-auto px-4 lg:px-6" >
< div className = "max-w-6xl mx-auto" >
< div className = "grid lg:grid-cols-2 gap-20" >
{ /* Challenges */ }
< motion.div
initial = { { opacity : 0 , x : - 30 } }
whileInView = { { opacity : 1 , x : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
>
< h2 className = "text-3xl lg:text-4xl font-semibold text-foreground mb-12" >
Challenges & Constraints
< / h2 >
< div className = "space-y-6" >
{ technicalChallenges . map ( ( challenge , index ) = > (
< motion.div
key = { challenge . title }
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : index * 0.1 } }
viewport = { { once : true } }
className = "bg-background/50 rounded-xl p-6 border border-border/50 hover:border-accent/20 transition-colors duration-300"
>
< div className = "flex items-start gap-4" >
< div className = "text-accent mt-1" >
{ challenge . icon }
< / div >
< div >
< h3 className = "text-lg font-semibold text-foreground mb-2" >
{ challenge . title }
< / h3 >
< p className = "text-muted-foreground leading-relaxed" >
{ challenge . description }
< / p >
< / div >
< / div >
< / motion.div >
) ) }
2025-07-11 16:54:37 +05:30
< / div >
2025-07-30 18:42:19 +05:30
< / motion.div >
{ /* Solution Architecture */ }
< motion.div
initial = { { opacity : 0 , x : 30 } }
whileInView = { { opacity : 1 , x : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
>
< h2 className = "text-3xl lg:text-4xl font-semibold text-foreground mb-12" >
Solution Architecture
< / h2 >
< div className = "bg-background/50 rounded-2xl p-8 border border-border/50" >
< div className = "space-y-8" >
< div >
< h3 className = "text-xl font-semibold text-foreground mb-6" > Technology Stack < / h3 >
< div className = "space-y-4" >
< div className = "flex items-center gap-3" >
< Smartphone className = "w-5 h-5 text-accent" / >
< span className = "text-muted-foreground" > Frontend : Flutter ( iOS / Android ) < / span >
< / div >
< div className = "flex items-center gap-3" >
< Server className = "w-5 h-5 text-accent" / >
< span className = "text-muted-foreground" > Backend : Laravel ( PHP ) < / span >
< / div >
< div className = "flex items-center gap-3" >
< Database className = "w-5 h-5 text-accent" / >
< span className = "text-muted-foreground" > Database : MySQL < / span >
< / div >
< div className = "flex items-center gap-3" >
< Cloud className = "w-5 h-5 text-accent" / >
< span className = "text-muted-foreground" > Notifications : Firebase & Analytics < / span >
< / div >
< div className = "flex items-center gap-3" >
< CreditCard className = "w-5 h-5 text-accent" / >
< span className = "text-muted-foreground" > Payment : WebView - based integration < / span >
< / div >
< / div >
< / div >
< div >
< h3 className = "text-xl font-semibold text-foreground mb-6" > Architecture Highlights < / h3 >
< div className = "space-y-3" >
< div className = "flex items-start gap-3" >
< CheckCircle className = "w-4 h-4 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground text-base" > Modular architecture with independent APIs per role < / span >
< / div >
< div className = "flex items-start gap-3" >
< CheckCircle className = "w-4 h-4 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground text-base" > Event - based notification triggers < / span >
< / div >
< div className = "flex items-start gap-3" >
< CheckCircle className = "w-4 h-4 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground text-base" > Wallet referral logic separate from transaction layer < / span >
< / div >
< div className = "flex items-start gap-3" >
< CheckCircle className = "w-4 h-4 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground text-base" > Multi - tenancy admin view for role - based control < / span >
< / div >
< / div >
< / div >
< / div >
2025-07-11 16:54:37 +05:30
< / div >
< / motion.div >
2025-07-30 18:42:19 +05:30
< / div >
< / div >
< / div >
< / section >
{ /* Development Process */ }
< section className = "py-24 bg-card/30" >
< div className = "container mx-auto px-4 lg:px-6" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "max-w-6xl mx-auto"
>
< div className = "text-center mb-16" >
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Development Process & Methodology
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Agile sprints ( 2 - week cycles ) with enhancement backlog tracking , ensuring quality delivery and continuous improvement .
< / p >
< / div >
< div className = "grid lg:grid-cols-5 gap-8" >
{ developmentPhases . map ( ( phase , index ) = > (
< motion.div
key = { phase . phase }
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : index * 0.1 } }
viewport = { { once : true } }
className = "relative"
>
< div className = "bg-card/50 rounded-xl p-6 border border-border/50 hover:border-accent/30 transition-all duration-300 h-full" >
< div className = "text-accent mb-4" >
{ phase . icon }
< / div >
< h3 className = "text-lg font-semibold text-foreground mb-2" >
{ phase . phase }
< / h3 >
< div className = "text-accent font-medium mb-3" >
{ phase . duration }
< / div >
< p className = "text-muted-foreground text-sm leading-relaxed" >
{ phase . description }
< / p >
< / div >
{ /* Connector Line */ }
{ index < developmentPhases . length - 1 && (
< div className = "hidden lg:block absolute top-1/2 -right-4 w-8 h-0.5 bg-border transform -translate-y-1/2" / >
) }
< / motion.div >
) ) }
< / div >
2025-07-11 16:54:37 +05:30
< / motion.div >
< / div >
< / section >
2025-07-30 18:42:19 +05:30
{ /* Results & Impact */ }
< section className = "py-24 bg-background" >
< div className = "container mx-auto px-4 lg:px-6" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "max-w-6xl mx-auto"
>
< div className = "text-center mb-16" >
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Results & Impact
2025-07-11 16:54:37 +05:30
< / h2 >
2025-07-30 18:42:19 +05:30
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Comprehensive performance metrics demonstrating GoodTimes ' success in social event discovery and community engagement .
2025-07-11 16:54:37 +05:30
< / p >
2025-07-30 18:42:19 +05:30
< / div >
< div className = "grid md:grid-cols-2 lg:grid-cols-3 gap-8 mb-16" >
{ resultsMetrics . map ( ( metric , index ) = > (
< motion.div
key = { metric . label }
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : index * 0.1 } }
viewport = { { once : true } }
className = "bg-background/50 rounded-xl p-6 border border-border/50 hover:border-accent/30 transition-all duration-300 text-center"
>
< div className = "text-3xl font-bold text-accent mb-2" >
{ metric . value }
< / div >
< div className = "text-lg font-semibold text-foreground mb-2" >
{ metric . label }
< / div >
< div className = "text-muted-foreground text-sm" >
{ metric . description }
< / div >
< / motion.div >
) ) }
< / div >
2025-07-11 16:54:37 +05:30
< motion.div
2025-07-30 18:42:19 +05:30
initial = { { opacity : 0 , y : 20 } }
2025-07-11 16:54:37 +05:30
whileInView = { { opacity : 1 , y : 0 } }
2025-07-30 18:42:19 +05:30
transition = { { duration : 0.8 , delay : 0.3 } }
2025-07-11 16:54:37 +05:30
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "bg-background/50 rounded-2xl p-8 border border-border/50"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< h3 className = "text-2xl font-semibold text-foreground mb-6" >
Technical Achievements
2025-07-11 16:54:37 +05:30
< / h3 >
2025-07-30 18:42:19 +05:30
< div className = "grid md:grid-cols-2 gap-4" >
{ technicalAchievements . map ( ( achievement , index ) = > (
< div key = { index } className = "flex items-start gap-3" >
< CheckCircle className = "w-5 h-5 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground" > { achievement } < / span >
< / div >
2025-07-11 16:54:37 +05:30
) ) }
< / div >
< / motion.div >
2025-07-30 18:42:19 +05:30
< / motion.div >
< / div >
< / section >
2025-07-11 16:54:37 +05:30
2025-07-30 18:42:19 +05:30
{ /* Lessons Learned */ }
< section className = "py-24 bg-card/30" >
< div className = "container mx-auto px-4 lg:px-6" >
< div className = "max-w-6xl mx-auto" >
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
2025-07-30 18:42:19 +05:30
transition = { { duration : 0.8 } }
2025-07-11 16:54:37 +05:30
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "text-center mb-16"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Lessons Learned
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Key insights and learnings from the GoodTimes development journey that shaped our approach to social platform development .
< / p >
< / motion.div >
< div className = "grid lg:grid-cols-2 gap-12" >
{ /* What Worked */ }
< motion.div
initial = { { opacity : 0 , x : - 30 } }
whileInView = { { opacity : 1 , x : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "bg-green-500/5 rounded-2xl p-8 border border-green-500/20"
>
< h3 className = "text-2xl font-semibold text-foreground mb-8 flex items-center gap-3" >
< CheckCircle className = "w-6 h-6 text-green-400" / >
What Worked Well
< / h3 >
< div className = "space-y-4" >
{ lessonsLearned . worked . map ( ( lesson , index ) = > (
< div key = { index } className = "flex items-start gap-3" >
< div className = "w-2 h-2 bg-green-400 rounded-full mt-2 flex-shrink-0" / >
< span className = "text-muted-foreground" > { lesson } < / span >
< / div >
) ) }
< / div >
< / motion.div >
{ /* What Could Improve */ }
< motion.div
initial = { { opacity : 0 , x : 30 } }
whileInView = { { opacity : 1 , x : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "bg-yellow-500/5 rounded-2xl p-8 border border-yellow-500/20"
>
< h3 className = "text-2xl font-semibold text-foreground mb-8 flex items-center gap-3" >
< ArrowRight className = "w-6 h-6 text-yellow-400" / >
Areas for Improvement
< / h3 >
< div className = "space-y-4" >
{ lessonsLearned . improve . map ( ( lesson , index ) = > (
< div key = { index } className = "flex items-start gap-3" >
< div className = "w-2 h-2 bg-yellow-400 rounded-full mt-2 flex-shrink-0" / >
< span className = "text-muted-foreground" > { lesson } < / span >
< / div >
) ) }
< / div >
< / motion.div >
< / div >
< / div >
< / div >
< / section >
{ /* Future Roadmap */ }
< section className = "py-24 bg-background" >
< div className = "container mx-auto px-4 lg:px-6" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "max-w-6xl mx-auto"
>
< div className = "text-center mb-16" >
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-6" >
Future Roadmap
< / h2 >
< p className = "text-xl text-muted-foreground max-w-3xl mx-auto" >
Planned enhancements and features to build a vibrant event discovery ecosystem powered by AI , gamification , and community .
< / p >
< / div >
< div className = "grid lg:grid-cols-2 gap-12" >
{ futureRoadmap . map ( ( roadmap , index ) = > (
< motion.div
key = { roadmap . phase }
initial = { { opacity : 0 , y : 20 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.6 , delay : index * 0.2 } }
2025-07-11 16:54:37 +05:30
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "bg-background/50 rounded-2xl p-8 border border-border/50 hover:border-accent/30 transition-all duration-300"
>
< h3 className = "text-2xl font-semibold text-foreground mb-6" >
{ roadmap . phase }
< / h3 >
< div className = "space-y-4" >
{ roadmap . features . map ( ( feature , featureIndex ) = > (
< div key = { featureIndex } className = "flex items-start gap-3" >
< ArrowRight className = "w-5 h-5 text-accent mt-0.5 flex-shrink-0" / >
< span className = "text-muted-foreground" > { feature } < / span >
2025-07-11 16:54:37 +05:30
< / div >
2025-07-30 18:42:19 +05:30
) ) }
< / div >
< / motion.div >
) ) }
< / div >
< / motion.div >
< / div >
< / section >
{ /* Client Testimonial */ }
< section className = "py-24 bg-card/30" >
< div className = "container mx-auto px-4 lg:px-6" >
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
className = "max-w-4xl mx-auto text-center"
>
< div className = "bg-card/50 rounded-2xl p-12 border border-border/50" >
< div className = "flex justify-center mb-8" >
< ImageWithFallback
src = { goodTimesLogo }
alt = "GoodTimes - Social Event Discovery Platform Logo"
className = "h-12 w-auto object-contain"
/ >
< / div >
< div className = "flex justify-center mb-8" >
< div className = "flex text-yellow-400" >
{ [ . . . Array ( 5 ) ] . map ( ( _ , i ) = > (
< Star key = { i } className = "w-6 h-6 fill-current" / >
2025-07-11 16:54:37 +05:30
) ) }
< / div >
< / div >
2025-07-30 18:42:19 +05:30
< blockquote className = "text-2xl lg:text-3xl text-foreground mb-8 leading-relaxed italic" >
"GoodTimes wouldn't be what it is without WDI's intuitive tech and top-notch planning. Their dedication to building for scale while also supporting daily product improvements is unmatched."
< / blockquote >
< div className = "flex flex-col items-center" >
< div className = "text-lg font-semibold text-foreground" >
Matthew Weightman
< / div >
< div className = "text-muted-foreground" >
Founder , GoodTimes
< / div >
< / div >
< / div >
< / motion.div >
2025-07-11 16:54:37 +05:30
< / div >
< / section >
{ /* CTA Section */ }
2025-07-30 18:42:19 +05:30
< section className = "py-24 bg-background" >
< div className = "container mx-auto px-4 lg:px-6" >
2025-07-11 16:54:37 +05:30
< motion.div
initial = { { opacity : 0 , y : 30 } }
whileInView = { { opacity : 1 , y : 0 } }
transition = { { duration : 0.8 } }
viewport = { { once : true } }
2025-07-30 18:42:19 +05:30
className = "max-w-4xl mx-auto text-center"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
< h2 className = "text-3xl lg:text-5xl font-semibold text-foreground mb-8" >
Want to Build the Next Big Social Platform ?
< / h2 >
< p className = "text-xl text-muted-foreground mb-12 max-w-3xl mx-auto" >
Let WDI help you turn your vision into an app that people love to use , with gamification , community features , and scalable architecture .
2025-07-11 16:54:37 +05:30
< / p >
2025-07-30 18:42:19 +05:30
2025-07-11 16:54:37 +05:30
< div className = "flex flex-col sm:flex-row gap-4 justify-center" >
2025-07-30 18:42:19 +05:30
< Button
size = "lg"
onClick = { ( ) = > navigateTo ( '/contact-us' ) }
className = "bg-accent hover:bg-accent/90 text-accent-foreground"
2025-07-11 16:54:37 +05:30
>
2025-07-30 18:42:19 +05:30
Contact Our Team
< ArrowRight className = "w-5 h-5 ml-2" / >
2025-07-11 16:54:37 +05:30
< / Button >
2025-07-30 18:42:19 +05:30
< Button
size = "lg"
2025-07-11 16:54:37 +05:30
variant = "outline"
onClick = { ( ) = > navigateTo ( '/case-studies' ) }
2025-07-30 18:42:19 +05:30
className = "border-accent/30 text-accent hover:bg-accent/10"
2025-07-11 16:54:37 +05:30
>
View More Case Studies
2025-07-30 18:42:19 +05:30
< ExternalLink className = "w-5 h-5 ml-2" / >
2025-07-11 16:54:37 +05:30
< / Button >
< / div >
< / motion.div >
< / div >
< / section >
< Footer / >
< / div >
) ;
} ;