Skip to content

Commit 18f03c7

Browse files
chavdarohitRohit Chavdasuchit-sheth
authored
feat: sponsorship tiers, event date , tickets , hashtags , small fixes (#173)
* feat: sponsorship tiers, event date , tickets , hashtags , small fixes * feat: enhance PageHero component with dynamic hashtag rendering and update ticket contact URL --------- Co-authored-by: Rohit Chavda <rohitchavda@socialpilot.co> Co-authored-by: Suchit Sheth <suchitsheth42@gmail.com>
1 parent 619a622 commit 18f03c7

File tree

6 files changed

+278
-107
lines changed

6 files changed

+278
-107
lines changed

src/components/Hero.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const Hero = () => {
3232
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75" />
3333
<span className="relative inline-flex rounded-full h-2 w-2 bg-green-500" />
3434
</span>
35-
<span>TBA · AHMEDABAD</span>
35+
<span>04 April 2026 · AHMEDABAD</span>
3636
</div>
3737

3838
{/* Title — pb-4 prevents italic descender clipping */}

src/components/PageHero.jsx

Lines changed: 11 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,9 @@ import { useEffect, useRef } from "react";
55
* Mirrors Hero.jsx design exactly; only content differs via props.
66
* @param {{ badge: string, title: string, titleGradient: string, subtitle: string, primaryCta: { text: string, href: string, external?: boolean }, secondaryCta?: { text: string, href: string, external?: boolean } }} props
77
*/
8-
const PageHero = ({
9-
badge,
10-
title,
11-
titleGradient,
12-
subtitle,
13-
primaryCta,
14-
secondaryCta,
15-
}) => {
8+
const PageHero = ({ badge, title, titleGradient, subtitle, primaryCta, secondaryCta }) => {
169
const sectionRef = useRef(null);
17-
10+
const hashTagList = ["#OSDIn2026", "#OSDIndia2026", "#OpenSourceDay"];
1811
useEffect(() => {
1912
const section = sectionRef.current;
2013
if (!section) return;
@@ -26,11 +19,7 @@ const PageHero = ({
2619
}, []);
2720

2821
return (
29-
<div
30-
ref={sectionRef}
31-
className="relative min-h-[75vh] flex items-center justify-center bg-white"
32-
style={{ overflow: "visible" }}
33-
>
22+
<div ref={sectionRef} className="relative min-h-[75vh] flex items-center justify-center bg-white" style={{ overflow: "visible" }}>
3423
{/* Blobs — clipped so they don't spill outside */}
3524
<div className="absolute inset-0 overflow-hidden pointer-events-none">
3625
<div className="absolute top-0 -right-4 w-72 h-72 bg-emerald-300 rounded-full mix-blend-multiply filter blur-xl opacity-70 animate-blob animation-delay-2000" />
@@ -57,41 +46,25 @@ const PageHero = ({
5746
</h1>
5847

5948
{/* Subtitle */}
60-
<p className="text-lg md:text-xl text-gray-600 max-w-2xl mx-auto mb-10 leading-relaxed">
61-
{subtitle}
62-
</p>
49+
<p className="text-lg md:text-xl text-gray-600 max-w-2xl mx-auto mb-10 leading-relaxed">{subtitle}</p>
6350

6451
{/* CTAs */}
6552
<div className="flex flex-col sm:flex-row items-center justify-center gap-6">
6653
<a
6754
href={primaryCta.href}
68-
{...(primaryCta.external
69-
? { target: "_blank", rel: "noopener noreferrer" }
70-
: {})}
55+
{...(primaryCta.external ? { target: "_blank", rel: "noopener noreferrer" } : {})}
7156
className="group relative inline-flex items-center justify-center px-8 py-4 font-bold text-white bg-gray-900 hover:bg-gray-800 rounded-full hover:scale-105 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-900"
7257
>
7358
{primaryCta.text}
74-
<svg
75-
className="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform"
76-
fill="none"
77-
stroke="currentColor"
78-
viewBox="0 0 24 24"
79-
>
80-
<path
81-
strokeLinecap="round"
82-
strokeLinejoin="round"
83-
strokeWidth={2}
84-
d="M13 7l5 5m0 0l-5 5m5-5H6"
85-
/>
59+
<svg className="w-5 h-5 ml-2 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
60+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7l5 5m0 0l-5 5m5-5H6" />
8661
</svg>
8762
</a>
8863

8964
{secondaryCta && (
9065
<a
9166
href={secondaryCta.href}
92-
{...(secondaryCta.external
93-
? { target: "_blank", rel: "noopener noreferrer" }
94-
: {})}
67+
{...(secondaryCta.external ? { target: "_blank", rel: "noopener noreferrer" } : {})}
9568
className="group inline-flex items-center justify-center px-8 py-4 font-bold text-gray-900 border-2 border-gray-900 rounded-full hover:bg-gray-900 hover:text-white transition-all duration-200 hover:scale-105"
9669
>
9770
{secondaryCta.text}
@@ -102,9 +75,9 @@ const PageHero = ({
10275

10376
{/* Hashtag footer — mirrors Hero.jsx */}
10477
<div className="mt-10 pt-6 border-t border-gray-100 flex flex-wrap justify-center gap-6 opacity-40">
105-
<div className="text-xl font-bold text-gray-400">#OSD2026</div>
106-
<div className="text-xl font-bold text-gray-400">#OpenSource</div>
107-
<div className="text-xl font-bold text-gray-400">#Ahmedabad</div>
78+
{hashTagList.map((tag) => (
79+
<div className="text-xl font-bold text-gray-400">{tag}</div>
80+
))}
10881
</div>
10982
</div>
11083
</div>

src/config/config.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,14 @@ export const TICKETS = [
352352
originalPrice: 350,
353353
description: "Super Early Bird pricing with full conference access. Limited availability!",
354354
features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies", "Super Early Bird Discount"],
355-
popular: false,
355+
popular: true,
356356
available: true,
357357
alert: {
358358
text: "Most Awaited",
359359
classes: "text-white bg-green-500",
360360
},
361361
konfhubUrl: "/purchase",
362-
linkText: "Register",
362+
linkText: "Register Now",
363363
},
364364
{
365365
name: "Early Bird Ticket",
@@ -382,7 +382,7 @@ export const TICKETS = [
382382
originalPrice: 700,
383383
description: "Full conference access including lunch, keynotes, panels, and OSD goodies.",
384384
features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies"],
385-
popular: true,
385+
popular: false,
386386
available: false,
387387
alert: {
388388
text: "Most Popular",
@@ -411,7 +411,7 @@ export const TICKETS = [
411411
classes: "text-white bg-blue-500",
412412
},
413413
konfhubUrl: "/purchase",
414-
linkText: "Register",
414+
linkText: "Register Now",
415415
},
416416
{
417417
name: "Supporter Ticket",
@@ -430,7 +430,7 @@ export const TICKETS = [
430430
popular: false,
431431
available: true,
432432
konfhubUrl: "/purchase",
433-
linkText: "Register",
433+
linkText: "Register Now",
434434
},
435435
{
436436
name: "Silver Ticket",
@@ -452,7 +452,7 @@ export const TICKETS = [
452452
popular: false,
453453
available: true,
454454
konfhubUrl: "/purchase",
455-
linkText: "Register",
455+
linkText: "Register Now",
456456
extra:
457457
"We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
458458
},
@@ -475,8 +475,8 @@ export const TICKETS = [
475475
],
476476
popular: false,
477477
available: false,
478-
konfhubUrl: "",
479-
linkText: "Sold Out",
478+
konfhubUrl: "mailto:opensourceweekend@gmail.com",
479+
linkText: "Contact Organizers",
480480
extra:
481481
"We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
482482
},
@@ -502,8 +502,8 @@ export const TICKETS = [
502502
],
503503
popular: false,
504504
available: false,
505-
konfhubUrl: "",
506-
linkText: "Sold Out",
505+
konfhubUrl: "mailto:opensourceweekend@gmail.com",
506+
linkText: "Contact Organizers",
507507
extra:
508508
"We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
509509
},

src/pages/index.astro

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -145,38 +145,40 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
145145
<h2 class="text-4xl md:text-5xl font-black text-gray-900 mb-4">Building <span class="gradient-text">Impact</span> in 2026</h2>
146146
<p class="text-lg text-gray-500">What we're aiming for — bigger and better than ever</p>
147147
</div>
148-
<div class="grid grid-cols-2 md:grid-cols-4 gap-px bg-gray-100 rounded-2xl overflow-hidden border border-gray-100">
149-
{[
150-
{ value: 600, suffix: "+", label: "Expected Attendees" },
151-
{ value: 100, suffix: "+", label: "Community Partners" },
152-
{ value: 50, suffix: "+", label: "Expert Speakers" },
153-
{ value: 20, suffix: "+", label: "Technical Sessions" },
154-
{ value: 10, suffix: "+", label: "Panel Discussions" },
155-
{ value: 5, suffix: "+", label: "Workshops" },
156-
{ value: 100, suffix: "+", label: "Open Source Project Contribution" },
157-
].map(({ value, suffix, label }) => (
158-
<div class="flex flex-col items-center py-10 px-6 bg-white">
159-
<div class="text-4xl md:text-5xl font-black gradient-text mb-2">
160-
<Counter target={value} client:visible />{suffix}
148+
<div class="rounded-2xl overflow-hidden border border-gray-100">
149+
<!-- First row: 4 items -->
150+
<div class="grid grid-cols-2 md:grid-cols-4 gap-px bg-gray-100">
151+
{[
152+
{ value: 600, suffix: "+", label: "Expected Attendees" },
153+
{ value: 100, suffix: "+", label: "Community Partners" },
154+
{ value: 50, suffix: "+", label: "Expert Speakers" },
155+
{ value: 20, suffix: "+", label: "Technical Sessions" },
156+
].map(({ value, suffix, label }) => (
157+
<div class="flex flex-col items-center py-10 px-6 bg-white">
158+
<div class="text-4xl md:text-5xl font-black gradient-text mb-2">
159+
<Counter target={value} client:visible />{suffix}
160+
</div>
161+
<div class="text-sm text-gray-500 font-medium text-center">{label}</div>
161162
</div>
162-
<div class="text-sm text-gray-500 font-medium text-center">{label}</div>
163-
</div>
164-
))}
165-
</div>
166-
<div class="grid grid-cols-3 gap-px bg-gray-100 rounded-2xl overflow-hidden border border-gray-100 mt-px">
167-
<div class="flex flex-col items-center py-10 px-6 bg-white">
168-
<div class="text-4xl md:text-5xl font-black gradient-text mb-2"><Counter target={3} client:visible />+</div>
169-
<div class="text-sm text-gray-500 font-medium text-center">Panel Discussions</div>
170-
</div>
171-
<div class="flex flex-col items-center py-10 px-6 bg-white">
172-
<div class="text-4xl md:text-5xl font-black gradient-text mb-2"><Counter target={6} client:visible />+</div>
173-
<div class="text-sm text-gray-500 font-medium text-center">Workshops</div>
163+
))}
174164
</div>
175-
<div class="flex flex-col items-center py-10 px-6 bg-white">
176-
<div class="text-4xl md:text-5xl font-black gradient-text mb-2">1</div>
177-
<div class="text-sm text-gray-500 font-medium text-center">Full Day Event</div>
165+
<!-- Second row: 3 items centered -->
166+
<div class="flex flex-wrap justify-center gap-px border-t border-gray-100">
167+
{[
168+
{ value: 10, suffix: "+", label: "Panel Discussions" },
169+
{ value: 5, suffix: "+", label: "Workshops" },
170+
{ value: 100, suffix: "+", label: "Open Source Project Contribution" },
171+
].map(({ value, suffix, label }) => (
172+
<div class="flex flex-col items-center py-10 px-6 bg-white w-1/2 md:w-1/4">
173+
<div class="text-4xl md:text-5xl font-black gradient-text mb-2">
174+
<Counter target={value} client:visible />{suffix}
175+
</div>
176+
<div class="text-sm text-gray-500 font-medium text-center">{label}</div>
177+
</div>
178+
))}
178179
</div>
179180
</div>
181+
180182
</div>
181183
</section>
182184

@@ -371,7 +373,7 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
371373
<div class="text-gray-500 text-sm mb-6">{VENUE.address}</div>
372374
<div class="flex items-center gap-2 text-sm text-gray-400 mb-auto">
373375
<CalendarClock class="w-4 h-4" />
374-
TBA · Ahmedabad, Gujarat
376+
04 April 2026 · Ahmedabad, Gujarat
375377
</div>
376378
<a href="/venue" class="mt-6 block text-center bg-gray-900 hover:bg-gray-800 text-white px-6 py-3 rounded-full font-bold text-sm transition-all hover:scale-105">
377379
Venue Details
@@ -390,7 +392,7 @@ const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
390392
</div>
391393

392394
<div class="flex flex-col gap-3 mb-auto">
393-
{TICKETS.slice(0, 2).map((t) => (
395+
{TICKETS.slice(0, 3).map((t) => (
394396
<div class="flex justify-between items-center p-3 bg-gray-50 rounded-xl border border-gray-100">
395397
<div>
396398
<div class="font-semibold text-gray-900 text-sm">{t.name}</div>

0 commit comments

Comments
 (0)