Skip to content

Commit 6e9de94

Browse files
authored
add why attend section (#48)
1 parent 4ce2bc9 commit 6e9de94

File tree

6 files changed

+149
-0
lines changed

6 files changed

+149
-0
lines changed

data/navItems.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ export const NAV_ITEMS = [
88
target: '_self',
99
featureFlag: 'KEYNOTE_SPEAKERS',
1010
},
11+
{
12+
name: 'Why Attend',
13+
path: '/#why-attend',
14+
target: '_self',
15+
featureFlag: 'WHY_ATTEND',
16+
},
1117
{
1218
name: 'Sponsors',
1319
path: '/#sponsors',

data/whyAttend.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
export const WHY_ATTEND_INFO = {
2+
title: 'Why Attend PyConf Hyderabad?',
3+
description:
4+
'Join hundreds of Python enthusiasts, developers, and industry leaders for an unforgettable experience.',
5+
};
6+
7+
export const WHY_ATTEND = [
8+
{
9+
id: 1,
10+
icon: 'GraduationCap',
11+
title: 'Learn from the Best',
12+
description:
13+
'Gain insights from expert keynotes and talks covering diverse Python topics.',
14+
},
15+
{
16+
id: 2,
17+
icon: 'Code',
18+
title: 'Hands-On Workshops',
19+
description:
20+
'Build skills in guided sessions on tools, frameworks, and Python best practices.',
21+
},
22+
{
23+
id: 3,
24+
icon: 'Users',
25+
title: 'Network & Connect',
26+
description:
27+
'Meet Python enthusiasts, developers, and professionals to exchange ideas.',
28+
},
29+
{
30+
id: 4,
31+
icon: 'Briefcase',
32+
title: 'Career Growth',
33+
description:
34+
'Connect with hiring companies and explore professional opportunities.',
35+
},
36+
{
37+
id: 5,
38+
icon: 'Heart',
39+
title: 'Community & Collaboration',
40+
description:
41+
'Be a part of a thriving community. Share knowledge and collaborate on ideas.',
42+
},
43+
{
44+
id: 6,
45+
icon: 'BowlFood',
46+
title: 'Complete Experience',
47+
description:
48+
'Enjoy great venues, meals, activities, and networking for a memorable event.',
49+
},
50+
];

src/app/page.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import KeynoteSpeakers from '@/components/KeynoteSpeakers';
66
import MeetOrganizers from '@/components/MeetOrganizers';
77
import SponsorsSection from '@/components/Sponsors';
88
import CommunityPartners from '@/components/CommunityPartners';
9+
import WhyAttend from '@/components/WhyAttend';
910
import { useFeatureFlag } from '@/hooks/useFeatureFlag';
1011

1112
import { SPEAKERS } from '@/speakers';
@@ -30,6 +31,7 @@ export default function Home() {
3031
const isSponsorsEnabled = useFeatureFlag('SPONSORS');
3132
const isCommunityPartnersEnabled = useFeatureFlag('COMMUNITY_PARTNERS');
3233
const isMeetOrganizersEnabled = useFeatureFlag('MEET_ORGANIZERS');
34+
const isWhyAttendEnabled = useFeatureFlag('WHY_ATTEND');
3335

3436
useEffect(() => {
3537
const hash = window.location.hash;
@@ -47,6 +49,7 @@ export default function Home() {
4749
{isKeynoteSpeakersEnabled && (
4850
<KeynoteSpeakers speakers={getKeynoteSpeakers(SPEAKERS)} />
4951
)}
52+
{isWhyAttendEnabled && <WhyAttend />}
5053
{isSponsorsEnabled && <SponsorsSection />}
5154
{isCommunityPartnersEnabled && <CommunityPartners />}
5255
{isMeetOrganizersEnabled && <MeetOrganizers />}

src/components/Icon.jsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ import {
1818
FaVolumeLow,
1919
FaTelegram,
2020
FaMeetup,
21+
FaGraduationCap,
22+
FaUsers,
23+
FaBriefcase,
24+
FaCode,
25+
FaHeart,
26+
FaBowlFood,
2127
} from 'react-icons/fa6';
2228
import { FaExternalLinkAlt, FaArrowCircleRight } from 'react-icons/fa';
2329
import { MdLightMode, MdDarkMode } from 'react-icons/md';
@@ -53,6 +59,12 @@ const icons = {
5359
Telegram: FaTelegram,
5460
Meetup: FaMeetup,
5561
Ticket: IoTicketSharp,
62+
GraduationCap: FaGraduationCap,
63+
Users: FaUsers,
64+
Briefcase: FaBriefcase,
65+
Code: FaCode,
66+
Heart: FaHeart,
67+
BowlFood: FaBowlFood,
5668
};
5769

5870
export const Icon = ({ name, size = 36, className = '', padding = 0 }) => {

src/components/WhyAttend.jsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { Heading, Paragraph } from '@/components/Typography';
2+
import { WHY_ATTEND_INFO, WHY_ATTEND } from '@/whyAttend';
3+
import Icon from '@/components/Icon';
4+
5+
const ReasonCard = ({ reason }) => {
6+
return (
7+
<div
8+
className="
9+
flex flex-col
10+
bg-white dark:bg-gray-800
11+
shadow-md
12+
hover:shadow-xl
13+
transition-shadow duration-300
14+
hover:-translate-y-1
15+
p-6
16+
border-b-2 border-transparent
17+
hover:border-primary-600 dark:hover:border-primary-400
18+
"
19+
>
20+
{/* Icon Section */}
21+
<div className="mb-3 p-3 bg-gray-100 dark:bg-gray-700 rounded-xl w-fit">
22+
<Icon
23+
name={reason.icon}
24+
size={24}
25+
className="text-primary-600 dark:text-primary-400"
26+
/>
27+
</div>
28+
29+
{/* Content Section */}
30+
<div>
31+
<Heading
32+
tagLevel={3}
33+
level={6}
34+
className="mb-3 text-gray-900 dark:text-gray-50"
35+
>
36+
{reason.title}
37+
</Heading>
38+
39+
<Paragraph level={4} className="text-gray-600 dark:text-gray-300">
40+
{reason.description}
41+
</Paragraph>
42+
</div>
43+
</div>
44+
);
45+
};
46+
47+
const WhyAttend = () => {
48+
return (
49+
<section
50+
id="why-attend"
51+
className="scroll-mt-20 flex flex-col items-center py-16 w-11/12 lg:w-5/6 mx-auto"
52+
>
53+
{/* Section Header */}
54+
<div className="text-center mb-12">
55+
<Heading
56+
tagLevel={2}
57+
level={1}
58+
className="mb-4 text-primary-600 dark:text-primary-400"
59+
>
60+
{WHY_ATTEND_INFO.title}
61+
</Heading>
62+
<Paragraph level={2} className="text-gray-600 dark:text-gray-300">
63+
{WHY_ATTEND_INFO.description}
64+
</Paragraph>
65+
</div>
66+
67+
{/* Cards Grid - 3 columns on large screens, 2 on medium, 1 on small */}
68+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 w-11/12 xl:w-3/4">
69+
{WHY_ATTEND.map((reason) => (
70+
<ReasonCard key={reason.id} reason={reason} />
71+
))}
72+
</div>
73+
</section>
74+
);
75+
};
76+
77+
export default WhyAttend;

src/config/featureFlags.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const FEATURE_FLAGS = {
1010
SPONSORS: true,
1111
COMMUNITY_PARTNERS: true,
1212
MEET_ORGANIZERS: true,
13+
WHY_ATTEND: true,
1314
SPEAKERS_PAGE: false,
1415
TICKETS: true,
1516
BLOG_POSTS: false,

0 commit comments

Comments
 (0)