File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -14,6 +14,7 @@ export default async function Home({
1414
1515 const t_home = await getTranslations ( { locale, namespace : 'Home' } ) ;
1616 const t_gallery = await getTranslations ( { locale, namespace : 'Gallery' } ) ;
17+ const t_sponsors = await getTranslations ( { locale, namespace : 'Sponsors' } ) ;
1718
1819 const copy : HomeLandingCopy = {
1920 hero : {
@@ -66,9 +67,23 @@ export default async function Home({
6667 line1 : t_gallery ( 'header.heading.line1' ) ,
6768 line2 : t_gallery ( 'header.heading.line2' ) ,
6869 } ,
70+ } ,
71+ items : t_gallery . raw ( 'items' ) as HomeLandingCopy [ 'gallery' ] [ 'items' ] ,
72+ } ,
73+ sponsors : {
74+ header : {
75+ subheading : t_sponsors ( 'header.subheading' ) ,
76+ heading : {
77+ line1 : t_sponsors ( 'header.heading.line1' ) ,
78+ line2 : t_sponsors ( 'header.heading.line2' ) ,
6979 } ,
70- items : t_gallery . raw ( 'items' ) ,
71- } ,
80+ } ,
81+ cta : {
82+ label : t_sponsors ( 'header.cta' ) ,
83+ link : t_sponsors ( 'header.cta_link' ) ,
84+ } ,
85+ tiers : t_sponsors . raw ( 'tiers' ) as HomeLandingCopy [ 'sponsors' ] [ 'tiers' ] ,
86+ } ,
7287 } ;
7388
7489 return < HomeLanding copy = { copy } /> ;
Original file line number Diff line number Diff line change @@ -4,12 +4,14 @@ type SectionHeaderProps = {
44 subheading : string ;
55 headingLine1 : string ;
66 headingLine2 : string ;
7+ headingLine2ClassName ?: string ;
78} ;
89
910export const SectionHeader = ( {
1011 subheading,
1112 headingLine1,
1213 headingLine2,
14+ headingLine2ClassName = 'text-google-blue' ,
1315} : SectionHeaderProps ) => {
1416 return (
1517 < div className = "mb-24 flex flex-col items-start justify-between gap-12 border-l-2 border-primary/10 pl-10 md:flex-row md:items-end" >
@@ -20,7 +22,7 @@ export const SectionHeader = ({
2022 < h2 className = "font-display text-4xl font-bold uppercase leading-[0.95] tracking-tighter text-on-surface sm:text-5xl md:text-7xl" >
2123 < span className = "font-light" > { headingLine1 } </ span >
2224 < br />
23- < span className = "text-google-blue" > { headingLine2 } </ span >
25+ < span className = { headingLine2ClassName } > { headingLine2 } </ span >
2426 </ h2 >
2527 </ div >
2628 </ div >
Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import { HeroContent } from './hero-content';
66import { HeroTicker } from './hero-ticker' ;
77import GalleryGrid from '../gallery/gallery-grid' ;
88import { SectionHeader } from '../common/section-header' ;
9+ import { SponsorsTiers } from '../sponsors/sponsors-tiers' ;
910import type { HomeLandingCopy } from './types' ;
1011
1112export type { HomeLandingCopy } from './types' ;
@@ -57,6 +58,20 @@ export function HomeLanding({ copy }: HomeLandingProps) {
5758 />
5859 < GalleryGrid items = { copy . gallery . items } />
5960 </ section >
61+
62+ { /* Sponsors Section */ }
63+ < section className = "mx-auto w-full max-w-[1440px] px-6 py-32 md:px-12" >
64+ < SectionHeader
65+ subheading = { copy . sponsors . header . subheading }
66+ headingLine1 = { copy . sponsors . header . heading . line1 }
67+ headingLine2 = { copy . sponsors . header . heading . line2 }
68+ headingLine2ClassName = "text-google-yellow"
69+ />
70+ < SponsorsTiers
71+ tiers = { copy . sponsors . tiers }
72+ ctaLabel = { copy . sponsors . cta . label }
73+ />
74+ </ section >
6075 </ main >
6176 </ >
6277 ) ;
Original file line number Diff line number Diff line change @@ -57,4 +57,27 @@ export type HomeLandingCopy = {
5757 height : number ;
5858 } [ ] ;
5959 } ;
60+ sponsors : {
61+ header : {
62+ subheading : string ;
63+ heading : {
64+ line1 : string ;
65+ line2 : string ;
66+ } ;
67+ } ;
68+ cta : {
69+ label : string ;
70+ link : string ;
71+ } ;
72+ tiers : {
73+ title : string ;
74+ subtitle : string ;
75+ badge : string ;
76+ items : {
77+ name : string ;
78+ logo ?: string ;
79+ link ?: string ;
80+ } [ ] ;
81+ } [ ] ;
82+ } ;
6083} ;
Original file line number Diff line number Diff line change 1+ 'use client' ;
2+
3+ import Image from 'next/image' ;
4+
5+ type SponsorTier = {
6+ title : string ;
7+ subtitle : string ;
8+ badge : string ;
9+ items : {
10+ name : string ;
11+ logo ?: string ;
12+ link ?: string ;
13+ } [ ] ;
14+ } ;
15+
16+ type SponsorsTiersProps = {
17+ tiers : SponsorTier [ ] ;
18+ ctaLabel : string ;
19+ } ;
20+
21+ export function SponsorsTiers ( { tiers, ctaLabel } : SponsorsTiersProps ) {
22+ return (
23+ < div className = "space-y-14" >
24+ { tiers . map ( ( tier ) => (
25+ < section key = { tier . title } className = "space-y-6" >
26+ < div className = "flex flex-col gap-4 border-b border-white/10 pb-4 md:flex-row md:items-end md:justify-between" >
27+ < div className = "flex items-center gap-3" >
28+ < h3 className = "font-display text-2xl uppercase tracking-tight text-white md:text-3xl" >
29+ { tier . title }
30+ </ h3 >
31+ < span className = "rounded-full border border-white/20 px-3 py-1 font-mono text-[10px] uppercase tracking-[0.2em] text-white/70" >
32+ { tier . badge }
33+ </ span >
34+ </ div >
35+ < p className = "max-w-xl font-mono text-xs uppercase tracking-[0.18em] text-white/55 md:text-right" >
36+ { tier . subtitle }
37+ </ p >
38+ </ div >
39+
40+ < div className = "flex flex-col items-center gap-12 md:flex-row md:flex-wrap md:justify-start md:gap-x-16 md:gap-y-12" >
41+ { tier . items . map ( ( sponsor ) => (
42+ < a
43+ key = { sponsor . name }
44+ href = { sponsor . link || '#' }
45+ target = "_blank"
46+ rel = "noopener noreferrer"
47+ className = "group inline-flex w-full max-w-[420px] flex-col items-center justify-center rounded-lg bg-white p-6 transition-all duration-300 hover:scale-105 md:w-auto"
48+ >
49+ { sponsor . logo && (
50+ < Image
51+ src = { sponsor . logo }
52+ alt = { sponsor . name }
53+ width = { 400 }
54+ height = { 250 }
55+ className = "block h-auto w-auto max-w-full grayscale transition-all duration-300 group-hover:grayscale-0"
56+ />
57+ ) }
58+ </ a >
59+ ) ) }
60+ </ div >
61+ </ section >
62+ ) ) }
63+
64+ < div className = "pt-2" >
65+ < div className = "inline-flex items-center border border-white/25 px-5 py-3 font-mono-tech text-xs uppercase tracking-[0.2em] text-white transition-colors hover:border-google-blue hover:text-google-blue" >
66+ { ctaLabel }
67+ </ div >
68+ </ div >
69+ </ div >
70+ ) ;
71+ }
Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ export default getRequestConfig(async ({ requestLocale }) => {
1818 const home = ( await import ( `../messages/${ locale } /home.json` ) ) . default ;
1919 const gallery = ( await import ( `../messages/${ locale } /gallery.json` ) ) . default ;
2020 const footer = ( await import ( `../messages/${ locale } /footer.json` ) ) . default ;
21+ const sponsors = ( await import ( `../messages/${ locale } /sponsors.json` ) ) . default ;
2122
2223 return {
2324 locale,
@@ -28,6 +29,7 @@ export default getRequestConfig(async ({ requestLocale }) => {
2829 Home : home ,
2930 Gallery : gallery ,
3031 Footer : footer ,
32+ Sponsors : sponsors ,
3133 } ,
3234 } ;
3335} ) ;
Original file line number Diff line number Diff line change 1+ {
2+ "header" : {
3+ "subheading" : " Sponsorship" ,
4+ "heading" : {
5+ "line1" : " Our Sponsors" ,
6+ "line2" : " Build DevFest With Us"
7+ },
8+ "cta" : " Become a Sponsor" ,
9+ "cta_link" : " https://forms.gle/xDCZe4ZuP98YoCAJ9"
10+ },
11+ "tiers" : [
12+ {
13+ "title" : " Marquee Sponsor" ,
14+ "subtitle" : " Headline partner powering DevFest Montreal 2026." ,
15+ "badge" : " Marquee" ,
16+ "items" : [
17+ {
18+ "name" : " TELUS Digital" ,
19+ "logo" : " /assets/images/sponsors/marquee_telus_digital.svg" ,
20+ "link" : " https://www.telusdigital.com/"
21+ }
22+ ]
23+ },
24+ {
25+ "title" : " Gold Sponsor" ,
26+ "subtitle" : " Strategic sponsor supporting local developer growth." ,
27+ "badge" : " Gold" ,
28+ "items" : [
29+ {
30+ "name" : " Davidson Canada" ,
31+ "logo" : " /assets/images/sponsors/gold_davidson_canada.svg" ,
32+ "link" : " https://www.davidson.group/nos-filiales/davidson-canada"
33+ }
34+ ]
35+ },
36+ {
37+ "title" : " Silver Sponsor" ,
38+ "subtitle" : " Community sponsor helping us connect builders across the city." ,
39+ "badge" : " Silver" ,
40+ "items" : [
41+ {
42+ "name" : " Transit" ,
43+ "logo" : " /assets/images/sponsors/silver_transit.svg" ,
44+ "link" : " https://manifesto.transitapp.com/fr/jobs"
45+ }
46+ ]
47+ }
48+ ]
49+ }
You can’t perform that action at this time.
0 commit comments