Skip to content

Commit 11476ee

Browse files
committed
feat: add sponsors
1 parent f79d530 commit 11476ee

5 files changed

Lines changed: 188 additions & 97 deletions

File tree

src/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Footer from './Components/Footer';
99
import Home from './Components/Home';
1010
import Navbar from './Components/Navbar';
1111
import NotFound from './Components/NotFound';
12-
// import Sponsors from './Components/Sponsors';
12+
import Sponsors from './Components/Sponsors';
1313

1414
function App() {
1515
return (
@@ -36,7 +36,7 @@ function App() {
3636
<div className="relative z-10">
3737
<Navbar />
3838
<Home />
39-
{/* <Sponsors /> */}
39+
<Sponsors />
4040

4141
<AgendaAccordion />
4242
{/* <CommunitySponsors /> */}

src/Components/Home.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ const Home = () => {
8585
href="Serverless_Day_2025.ics"
8686
className="hover:underline"
8787
>
88-
October 21th, 2025
88+
October 21st, 2025
8989
</a>
9090
</span>
9191
<span className="hidden sm:inline text-white/60"></span>

src/Components/Sponsors.tsx

Lines changed: 183 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -8,116 +8,206 @@ import logoTAG from '../assets/sponsors/TAG-logo.svg';
88
import logoAmpt from '../assets/sponsors/ampt-logo.svg';
99
import logoOBN from '../assets/sponsors/off-by-none-logo.svg';
1010
import logoEleva from '../assets/sponsors/eleva-logo.svg';
11-
// import { cn } from "@/lib/utils";
12-
import { InfiniteMovingImage } from './ui/infinite-moving-cards';
11+
import logoOvernet from '../assets/sponsors/OverNet_payoff_white.svg';
12+
import { cn } from '@/lib/utils';
1313
import { Image } from '@/types/sponsors';
1414

1515
const Sponsors = () => {
1616
const sponsors: Image[] = [
1717
{
18-
image: logoBeSharp,
19-
url: 'https://www.besharp.it/',
20-
sponsorType: 'Headline',
21-
type: 'single'
22-
},
23-
{
24-
image: logoNTTData,
25-
url: 'https://www.nttdata.com/global/en/',
18+
image: logoEleva,
19+
url: 'https://eleva.it/',
2620
sponsorType: 'Headline',
27-
imageClassName: 'h-10',
28-
type: 'single'
21+
imageClassName: 'h-24 md:h-32',
22+
type: 'single',
2923
},
3024
{
31-
image: logoAWS,
32-
url: 'https://aws.amazon.com/',
25+
image: logoBeSharp,
26+
url: 'https://www.besharp.it/',
3327
sponsorType: 'Headline',
34-
imageClassName: 'w-24',
35-
type: 'single'
36-
},
37-
{
38-
image: logoServerlessGuru,
39-
url: 'https://www.serverlessguru.com/',
40-
sponsorType: 'Gold',
41-
imageClassName: '!h-20',
42-
type: 'single'
43-
},
44-
{
45-
image: logoTAG,
46-
url: 'https://talentgarden.org/en/',
47-
sponsorType: 'Gold',
48-
imageClassName: '!h-12',
49-
type: 'single'
50-
},
51-
{
52-
image: logoServerlessDark,
53-
url: 'https://www.serverless.com/',
54-
sponsorType: 'Community',
55-
type: 'single'
56-
},
57-
{
58-
image: logoCodecrafters,
59-
url: 'https://codecrafters.io//',
60-
sponsorType: 'Community',
61-
imageClassName: '!h-20',
62-
type: 'single'
28+
imageClassName: 'h-24 md:h-32',
29+
type: 'single',
6330
},
31+
// {
32+
// image: logoNTTData,
33+
// url: 'https://www.nttdata.com/global/en/',
34+
// sponsorType: 'Headline',
35+
// imageClassName: 'h-24 md:h-32',
36+
// type: 'single',
37+
// },
38+
// {
39+
// image: logoAWS,
40+
// url: 'https://aws.amazon.com/',
41+
// sponsorType: 'Headline',
42+
// imageClassName: 'h-24 md:h-32',
43+
// type: 'single',
44+
// },
45+
// {
46+
// image: logoOBN,
47+
// url: 'https://offbynone.io/',
48+
// sponsorType: 'Headline',
49+
// imageClassName: 'h-24 md:h-32',
50+
// type: 'single',
51+
// },
52+
// {
53+
// image: logoServerlessGuru,
54+
// url: 'https://www.serverlessguru.com/',
55+
// sponsorType: 'Gold',
56+
// imageClassName: 'h-16 md:h-20',
57+
// type: 'single',
58+
// },
59+
// {
60+
// image: logoTAG,
61+
// url: 'https://talentgarden.org/en/',
62+
// sponsorType: 'Gold',
63+
// imageClassName: 'h-16 md:h-20',
64+
// type: 'single',
65+
// },
6466
{
65-
image: logoAmpt,
66-
url: 'https://www.getampt.com/',
67-
sponsorType: 'Community',
68-
imageClassName: '!h-20',
69-
type: 'single'
67+
image: logoOvernet,
68+
url: 'https://overnet.education/',
69+
sponsorType: 'Partner',
70+
imageClassName: 'h-12 md:h-16',
71+
type: 'single',
7072
},
71-
{
72-
image: logoOBN,
73-
url: 'https://offbynone.io/',
74-
sponsorType: 'Community',
75-
imageClassName: '!h-20',
76-
type: 'single'
77-
},
78-
{
79-
image: logoEleva,
80-
url: 'https://eleva.it/',
81-
sponsorType: 'Community',
82-
imageClassName: '!h-20',
83-
type: 'single'
84-
}
73+
// {
74+
// image: logoServerlessDark,
75+
// url: 'https://www.serverless.com/',
76+
// sponsorType: 'Community',
77+
// imageClassName: 'h-12 md:h-16',
78+
// type: 'single',
79+
// },
80+
// {
81+
// image: logoCodecrafters,
82+
// url: 'https://codecrafters.io/',
83+
// sponsorType: 'Community',
84+
// imageClassName: 'h-12 md:h-16',
85+
// type: 'single',
86+
// },
87+
// {
88+
// image: logoAmpt,
89+
// url: 'https://www.getampt.com/',
90+
// sponsorType: 'Community',
91+
// imageClassName: 'h-12 md:h-16',
92+
// type: 'single',
93+
// },
8594
];
95+
// Group sponsors by type
96+
const sponsorsByType = {
97+
Headline: sponsors.filter((sponsor) => sponsor.sponsorType === 'Headline'),
98+
Gold: sponsors.filter((sponsor) => sponsor.sponsorType === 'Gold'),
99+
Partner: sponsors.filter((sponsor) => sponsor.sponsorType === 'Partner'),
100+
Community: sponsors.filter(
101+
(sponsor) => sponsor.sponsorType === 'Community'
102+
),
103+
};
104+
105+
const SponsorCard = ({
106+
sponsor,
107+
containerClass,
108+
}: {
109+
sponsor: Image;
110+
containerClass: string;
111+
}) => (
112+
<a
113+
href={typeof sponsor.url === 'string' ? sponsor.url : sponsor.url[0]}
114+
target="_blank"
115+
rel="noopener noreferrer"
116+
className="group block w-full transition-transform duration-300 hover:scale-105 hover:drop-shadow-2xl"
117+
>
118+
<div
119+
className={cn(
120+
'bg-white/5 backdrop-blur-sm rounded-xl border border-white/10 hover:border-white/20 transition-all duration-300 hover:bg-white/10 flex items-center justify-center p-4 md:p-6',
121+
containerClass
122+
)}
123+
>
124+
<img
125+
src={
126+
typeof sponsor.image === 'string' ? sponsor.image : sponsor.image[0]
127+
}
128+
alt="Sponsor logo"
129+
className={cn(
130+
'object-contain w-full h-full transition-all duration-300 group-hover:brightness-110',
131+
typeof sponsor.imageClassName === 'string'
132+
? sponsor.imageClassName
133+
: sponsor.imageClassName?.[0]
134+
)}
135+
/>
136+
</div>
137+
</a>
138+
);
139+
140+
const SponsorSection = ({
141+
title,
142+
sponsors,
143+
gridCols,
144+
containerClass,
145+
}: {
146+
title: string;
147+
sponsors: Image[];
148+
gridCols: string;
149+
containerClass: string;
150+
}) =>
151+
sponsors.length > 0 && (
152+
<div className="mb-12">
153+
<h3 className="text-2xl md:text-3xl font-bold text-white mb-6 bg-gradient-to-r from-pink-300 to-purple-300 bg-clip-text text-transparent">
154+
{title}
155+
</h3>
156+
<div
157+
className={cn('grid gap-6 md:gap-8 justify-items-stretch', gridCols)}
158+
>
159+
{sponsors.map((sponsor, index) => (
160+
<SponsorCard
161+
key={index}
162+
sponsor={sponsor}
163+
containerClass={containerClass}
164+
/>
165+
))}
166+
</div>
167+
</div>
168+
);
169+
86170
return (
87-
<div className="pt-3 mb-10 text-center bg-transparent lg:mb-0 ">
88-
<h5 className="mb-2 text-sm font-semibold text-gray-300">Sponsors</h5>
89-
{/* <h2 className="text-2xl font-semibold text-white ">Headline</h2> *2024 edition sponsors/}
90-
{/* <div className="flex flex-wrap justify-center ">
91-
<SponsorCard logo={logoServerlessDark} />
92-
<SponsorCard logo={logoServerlessLight} />
93-
<SponsorCard logo={logoBeSharp} imgClassName="w-60" />
94-
</div> */}
95-
{/* <hr className="my-5 border-t-2 border-gray-300" /> */}
96-
{/* <h2 className="text-xl font-semibold text-white">Gold</h2> */}
97-
<div className=" rounded-md flex flex-col antialiased dark:bg-grid-white/[0.05] items-center justify-center relative overflow-hidden">
98-
<InfiniteMovingImage items={sponsors} direction="right" speed="normal" />
171+
<div className="py-16 px-4 md:px-8 max-w-7xl mx-auto text-center">
172+
<div className="mb-12">
173+
<h2 className="text-4xl md:text-5xl font-black text-white mb-4 bg-gradient-to-r from-white via-pink-200 to-white bg-clip-text text-transparent">
174+
Our Amazing Sponsors
175+
</h2>
176+
<p className="text-lg text-white/80 max-w-2xl mx-auto">
177+
Thank you to our incredible sponsors who make ServerlessDays Milano
178+
possible! 🙏
179+
</p>
99180
</div>
100-
{/* <hr className="my-5 border-t-2 border-gray-300" />
101-
<h2 className="text-lg font-semibold text-white">Partner</h2>
102-
<h2 className="text-base font-semibold text-white">Community</h2> */}
181+
182+
<SponsorSection
183+
title="Headline Sponsors"
184+
sponsors={sponsorsByType.Headline}
185+
gridCols="grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"
186+
containerClass="h-32 md:h-40 w-full"
187+
/>
188+
189+
<SponsorSection
190+
title="Gold Sponsors"
191+
sponsors={sponsorsByType.Gold}
192+
gridCols="grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4"
193+
containerClass="h-24 md:h-32 w-full"
194+
/>
195+
196+
<SponsorSection
197+
title="Partners"
198+
sponsors={sponsorsByType.Partner}
199+
gridCols="grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5"
200+
containerClass="h-20 md:h-24 w-full"
201+
/>
202+
203+
<SponsorSection
204+
title="Community Sponsors"
205+
sponsors={sponsorsByType.Community}
206+
gridCols="grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6"
207+
containerClass="h-16 md:h-20 w-full"
208+
/>
103209
</div>
104210
);
105211
};
106212

107213
export default Sponsors;
108-
109-
// const SponsorCard = ({
110-
// logo,
111-
// cardClassName,
112-
// imgClassName,
113-
// }: {
114-
// logo: string;
115-
// cardClassName?: string;
116-
// imgClassName?: string;
117-
// }) => {
118-
// return (
119-
// <div className={cn(" p-3 rounded-xl items-center flex", cardClassName)}>
120-
// <img src={logo} alt="logo" className={cn("w-80", imgClassName)} />
121-
// </div>
122-
// );
123-
// };
Lines changed: 1 addition & 0 deletions
Loading

src/types/sponsors.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ export type Image = {
22
image: string | string[];
33
imageClassName?: string | string[];
44
url: string | string[];
5-
sponsorType: 'Gold' | 'Headline' | 'Community';
5+
sponsorType: 'Gold' | 'Headline' | 'Community' | 'Partner';
66
type: 'single' | 'multiple';
77
};

0 commit comments

Comments
 (0)