diff --git a/src/app/page.tsx b/src/app/page.tsx index 59754f3..0a86059 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,51 +5,51 @@ import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloating import HeroLogo from '@/components/sections/hero/HeroLogo'; import MetricSplitMediaAbout from '@/components/sections/about/MetricSplitMediaAbout'; import ProductCardThree from '@/components/sections/product/ProductCardThree'; +import TeamCardSix from '@/components/sections/team/TeamCardSix'; import TestimonialCardTwelve from '@/components/sections/testimonial/TestimonialCardTwelve'; import MetricCardEleven from '@/components/sections/metrics/MetricCardEleven'; import SocialProofOne from '@/components/sections/socialProof/SocialProofOne'; import FooterBase from '@/components/sections/footer/FooterBase'; -import { Zap, Users, Award, Handshake, Github, Linkedin, Twitter } from "lucide-react"; +import { Zap, Users, Award, Handshake } from "lucide-react"; import { useState } from 'react'; export default function LandingPage() { - const [flippedCards, setFlippedCards] = useState<{[key: string]: boolean}>({}); + const [flipped, setFlipped] = useState<{ [key: string]: boolean }>({}); const toggleFlip = (memberId: string) => { - setFlippedCards(prev => ({ + setFlipped(prev => ({ ...prev, [memberId]: !prev[memberId] })); }; - // Team members with social links const teamMembers = [ { id: "1", name: "Alex Johnson", role: "Club President", imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-smiling-camera_1163-4660.jpg?_wi=1", imageAlt: "Alex Johnson, Club President", socials: [ - { icon: Github, href: "https://github.com/alexjohnson", label: "GitHub" }, - { icon: Linkedin, href: "https://linkedin.com/in/alexjohnson", label: "LinkedIn" }, - { icon: Twitter, href: "https://twitter.com/alexjohnson", label: "Twitter" } + { icon: "linkedin", url: "https://linkedin.com/in/alexjohnson" }, + { icon: "github", url: "https://github.com/alexjohnson" }, + { icon: "twitter", url: "https://twitter.com/alexjohnson" } ] }, { id: "2", name: "Sarah Chen", role: "VP of Projects", imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-smiling-camera_1163-4660.jpg?_wi=2", imageAlt: "Sarah Chen, VP of Projects", socials: [ - { icon: Github, href: "https://github.com/sarahchen", label: "GitHub" }, - { icon: Linkedin, href: "https://linkedin.com/in/sarahchen", label: "LinkedIn" }, - { icon: Twitter, href: "https://twitter.com/sarahchen", label: "Twitter" } + { icon: "linkedin", url: "https://linkedin.com/in/sarahchen" }, + { icon: "github", url: "https://github.com/sarahchen" }, + { icon: "twitter", url: "https://twitter.com/sarahchen" } ] }, { id: "3", name: "Marcus Williams", role: "Tech Lead", imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-smiling-camera_1163-4660.jpg?_wi=3", imageAlt: "Marcus Williams, Tech Lead", socials: [ - { icon: Github, href: "https://github.com/marcuswilliams", label: "GitHub" }, - { icon: Linkedin, href: "https://linkedin.com/in/marcuswilliams", label: "LinkedIn" }, - { icon: Twitter, href: "https://twitter.com/marcuswilliams", label: "Twitter" } + { icon: "linkedin", url: "https://linkedin.com/in/marcuswilliams" }, + { icon: "github", url: "https://github.com/marcuswilliams" }, + { icon: "twitter", url: "https://twitter.com/marcuswilliams" } ] }, { id: "4", name: "Emily Rodriguez", role: "Community Manager", imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-smiling-camera_1163-4660.jpg?_wi=4", imageAlt: "Emily Rodriguez, Community Manager", socials: [ - { icon: Github, href: "https://github.com/emilyrodriguez", label: "GitHub" }, - { icon: Linkedin, href: "https://linkedin.com/in/emilyrodriguez", label: "LinkedIn" }, - { icon: Twitter, href: "https://twitter.com/emilyrodriguez", label: "Twitter" } + { icon: "linkedin", url: "https://linkedin.com/in/emilyrodriguez" }, + { icon: "github", url: "https://github.com/emilyrodriguez" }, + { icon: "twitter", url: "https://twitter.com/emilyrodriguez" } ] } ]; @@ -137,85 +137,75 @@ export default function LandingPage() {
-
-
-
-
-
- - Leadership -
-

Meet Our Team

-

The passionate individuals driving innovation and mentorship within CodeClub.

+
+
+
+
+ + Leadership
+

Meet Our Team

+

The passionate individuals driving innovation and mentorship within CodeClub.

- {teamMembers.map((member) => { - const isFlipped = flippedCards[member.id]; - return ( -
+ {teamMembers.map((member) => ( +
toggleFlip(member.id)} + > +
+ {/* Front side - Image */}
toggleFlip(member.id)} + className="absolute w-full h-full bg-white rounded-lg shadow-lg p-4 flex flex-col items-center justify-center" + style={{ backfaceVisibility: 'hidden' }} > - {/* Front side - Profile */} -
+
{member.imageAlt} -
-
-

{member.name}

-

{member.role}

-
+

{member.name}

+

{member.role}

+

Click to view social links

+
- {/* Back side - Social Links */} -
-
-

Connect

-
-
- {member.socials.map((social) => { - const Icon = social.icon; - return ( - - - {social.label} - - ); - })} -
+ {/* Back side - Social Links */} +
+

{member.name}

+
+ {member.socials.map((social, idx) => ( + + {social.icon} + + ))}
+

Click to flip back

- ); - })} +
+ ))}
diff --git a/src/components/ServiceWrapper.tsx b/src/components/ServiceWrapper.tsx index c47eafe..349ce21 100644 --- a/src/components/ServiceWrapper.tsx +++ b/src/components/ServiceWrapper.tsx @@ -8,7 +8,7 @@ interface ServiceWrapperProps { export function ServiceWrapper({ children }: ServiceWrapperProps) { return ( -
+
{children}
); diff --git a/src/providers/themeProvider/ThemeProvider.tsx b/src/providers/themeProvider/ThemeProvider.tsx index 07747ee..4eeebcb 100644 --- a/src/providers/themeProvider/ThemeProvider.tsx +++ b/src/providers/themeProvider/ThemeProvider.tsx @@ -1,23 +1,19 @@ 'use client'; -import React, { createContext, useContext, useState } from 'react'; +import React, { createContext, useContext, ReactNode } from 'react'; -interface SocialLink { - platform: string; - url: string; - icon: string; -} - -interface TeamMember { - id: string; - name: string; - role: string; - image: string; - socialLinks: SocialLink[]; -} - -interface TeamCardProps { - member: TeamMember; +interface ThemeProviderProps { + children: ReactNode; + defaultButtonVariant?: string; + defaultTextAnimation?: string; + borderRadius?: 'soft' | 'medium' | 'sharp'; + contentWidth?: 'small' | 'medium' | 'large'; + sizing?: string; + background?: string; + cardStyle?: string; + primaryButtonStyle?: string; + secondaryButtonStyle?: string; + headingFontWeight?: string; } interface ThemeContextType { @@ -35,141 +31,19 @@ interface ThemeContextType { const ThemeContext = createContext(undefined); -export function useTheme(): ThemeContextType { - const context = useContext(ThemeContext); - if (context === undefined) { - return { - defaultButtonVariant: 'text-stagger', - defaultTextAnimation: 'entrance-slide', - borderRadius: 'rounded', - contentWidth: 'medium', - sizing: 'medium', - background: 'circleGradient', - cardStyle: 'glass-elevated', - primaryButtonStyle: 'gradient', - secondaryButtonStyle: 'glass', - headingFontWeight: 'normal' - }; - } - return context; -} - -function TeamCard({ member }: TeamCardProps) { - const [isFlipped, setIsFlipped] = useState(false); - - return ( -
setIsFlipped(true)} - onMouseLeave={() => setIsFlipped(false)} - > -
- {/* Front Side */} -
-
- {member.name} -
-

- {member.name} -

-

- {member.role} -

-
- - {/* Back Side */} -
-

- Connect -

-
- {member.socialLinks.map((link) => ( - - {link.icon} - - ))} -
-
-
-
- ); -} - -interface ThemeProviderProps { - children: React.ReactNode; - defaultButtonVariant?: string; - defaultTextAnimation?: string; - borderRadius?: string; - contentWidth?: string; - sizing?: string; - background?: string; - cardStyle?: string; - primaryButtonStyle?: string; - secondaryButtonStyle?: string; - headingFontWeight?: string; -} - export function ThemeProvider({ children, - defaultButtonVariant, - defaultTextAnimation, - borderRadius, - contentWidth, - sizing, - background, - cardStyle, - primaryButtonStyle, - secondaryButtonStyle, - headingFontWeight, + defaultButtonVariant = 'default', + defaultTextAnimation = 'none', + borderRadius = 'medium', + contentWidth = 'medium', + sizing = 'medium', + background = 'light', + cardStyle = 'solid', + primaryButtonStyle = 'solid', + secondaryButtonStyle = 'outline', + headingFontWeight = 'bold', }: ThemeProviderProps) { - const backgroundClasses = { - aurora: 'bg-gradient-to-br from-slate-950 via-purple-900 to-slate-950', - light: 'bg-white', - dark: 'bg-slate-900', - }; - - const borderRadiusClasses = { - soft: 'rounded-lg', - sharp: 'rounded-none', - smooth: 'rounded-2xl', - }; - - const contentWidthClasses = { - small: 'max-w-2xl', - medium: 'max-w-6xl', - large: 'max-w-7xl', - }; - - const bgClass = backgroundClasses[background as keyof typeof backgroundClasses] || backgroundClasses.aurora; - const radiusClass = borderRadiusClasses[borderRadius as keyof typeof borderRadiusClasses] || borderRadiusClasses.soft; - const widthClass = contentWidthClasses[contentWidth as keyof typeof contentWidthClasses] || contentWidthClasses.medium; - const themeValue: ThemeContextType = { defaultButtonVariant, defaultTextAnimation, @@ -183,20 +57,30 @@ export function ThemeProvider({ headingFontWeight, }; + const borderRadiusClass = { + soft: 'rounded-2xl', + medium: 'rounded-lg', + sharp: 'rounded-none', + }[borderRadius] || 'rounded-lg'; + + const contentWidthClass = { + small: 'max-w-2xl', + medium: 'max-w-4xl', + large: 'max-w-6xl', + }[contentWidth] || 'max-w-4xl'; + + const backgroundClass = { + aurora: 'bg-gradient-to-br from-purple-900 via-blue-900 to-indigo-900', + light: 'bg-white', + dark: 'bg-gray-900', + }[background] || 'bg-white'; + return (
-
+
{children}
@@ -204,12 +88,10 @@ export function ThemeProvider({ ); } -export function TeamCardGrid({ members }: { members: TeamMember[] }) { - return ( -
- {members.map((member) => ( - - ))} -
- ); +export function useTheme(): ThemeContextType { + const context = useContext(ThemeContext); + if (context === undefined) { + throw new Error('useTheme must be used within a ThemeProvider'); + } + return context; } \ No newline at end of file diff --git a/src/tag/Tag.tsx b/src/tag/Tag.tsx index ca5f500..87dfd11 100644 --- a/src/tag/Tag.tsx +++ b/src/tag/Tag.tsx @@ -1,6 +1,6 @@ -"use client"; +'use client'; -import { useState } from "react"; +import { useState } from 'react'; interface TeamMember { id: string; @@ -39,25 +39,26 @@ export default function Tag({ members = defaultMembers }: TagProps) { {members.map((member) => (
toggleFlip(member.id)} >
{/* Front Side */}
-
+
{member.name}

{member.role}

-

Hover to see links

+

+ Hover to see social links +

{/* Back Side */}

- {member.name} + Connect

{member.social.twitter && ( @@ -89,8 +93,14 @@ export default function Tag({ members = defaultMembers }: TagProps) { rel="noopener noreferrer" className="flex items-center justify-center gap-2 bg-white bg-opacity-20 hover:bg-opacity-30 text-white py-2 px-4 rounded-lg transition-all duration-200" > - 𝕏 - Twitter + + + + Twitter )} {member.social.linkedin && ( @@ -100,8 +110,15 @@ export default function Tag({ members = defaultMembers }: TagProps) { rel="noopener noreferrer" className="flex items-center justify-center gap-2 bg-white bg-opacity-20 hover:bg-opacity-30 text-white py-2 px-4 rounded-lg transition-all duration-200" > - in - LinkedIn + + + + + LinkedIn )} {member.social.github && ( @@ -111,8 +128,14 @@ export default function Tag({ members = defaultMembers }: TagProps) { rel="noopener noreferrer" className="flex items-center justify-center gap-2 bg-white bg-opacity-20 hover:bg-opacity-30 text-white py-2 px-4 rounded-lg transition-all duration-200" > - - GitHub + + + + GitHub )} {member.social.email && ( @@ -120,8 +143,20 @@ export default function Tag({ members = defaultMembers }: TagProps) { href={`mailto:${member.social.email}`} className="flex items-center justify-center gap-2 bg-white bg-opacity-20 hover:bg-opacity-30 text-white py-2 px-4 rounded-lg transition-all duration-200" > - - Email + + + + Email )}
@@ -137,21 +172,39 @@ export default function Tag({ members = defaultMembers }: TagProps) { const defaultMembers: TeamMember[] = [ { - id: "1", name: "Sarah Johnson", role: "Lead Designer", image: - "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&fit=crop", social: { - twitter: "https://twitter.com", linkedin: "https://linkedin.com", email: "sarah@example.com" + id: '1', + name: 'Sarah Johnson', + role: 'Lead Designer', + image: + 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400&h=400&fit=crop', + social: { + twitter: 'https://twitter.com', + linkedin: 'https://linkedin.com', + email: 'sarah@example.com', }, }, { - id: "2", name: "Michael Chen", role: "Full Stack Developer", image: - "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400&h=400&fit=crop", social: { - github: "https://github.com", linkedin: "https://linkedin.com", email: "michael@example.com" + id: '2', + name: 'Michael Chen', + role: 'Full Stack Developer', + image: + 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400&h=400&fit=crop', + social: { + github: 'https://github.com', + linkedin: 'https://linkedin.com', + email: 'michael@example.com', }, }, { - id: "3", name: "Emma Rodriguez", role: "Product Manager", image: - "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400&h=400&fit=crop", social: { - twitter: "https://twitter.com", linkedin: "https://linkedin.com", email: "emma@example.com" + id: '3', + name: 'Emma Rodriguez', + role: 'Product Manager', + image: + 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400&h=400&fit=crop', + social: { + twitter: 'https://twitter.com', + linkedin: 'https://linkedin.com', + email: 'emma@example.com', }, }, ]; \ No newline at end of file