@@ -8,116 +8,206 @@ import logoTAG from '../assets/sponsors/TAG-logo.svg';
88import logoAmpt from '../assets/sponsors/ampt-logo.svg' ;
99import logoOBN from '../assets/sponsors/off-by-none-logo.svg' ;
1010import 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 ' ;
1313import { Image } from '@/types/sponsors' ;
1414
1515const 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
107213export 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- // };
0 commit comments