Skip to content

Commit 6c41fcd

Browse files
acabellojdukebodyctrl-alt-d
authored
feat(sponsors): Update statistics using data from last year (#71)
# Summary - Update sponsors statistics with final program selection data (real percentages from last year's edition) - Expand interests from 4 aggregated categories to 7 granular topics (ML & AI 29%, Data Science 17%, Software Eng 14%, Web Dev 10%, Community 7%, DevOps & Cloud 7%, Others 16%) - Update audience profile stats (81% active professionals, 33% women & non-binary, 26% management, 13% English content) - Update seniority breakdown with real data (38% Junior, 57% Senior/Pro, 5% Expert) - Redesign interests and seniority charts as stacked color bars with legends, replacing individual horizontal bars - Fix mobile responsiveness: bars use min-w-[2rem] so small segments remain readable, legends wrap naturally # Desktop <img width="1260" height="773" alt="SCR-20260206-uahr" src="https://github.com/user-attachments/assets/935bbf11-bf6f-4286-bd9d-34e824c75b0b" /> # Mobile <img width="415" height="987" alt="SCR-20260206-uajt" src="https://github.com/user-attachments/assets/cf1d06fa-20b9-4498-a30a-22352f13e772" /> --------- Co-authored-by: dukebody <dukebody@gmail.com> Co-authored-by: Dani H <ctrl.alt.d@gmail.com>
1 parent c306c43 commit 6c41fcd

6 files changed

Lines changed: 164 additions & 57 deletions

File tree

src/components/LanguagePicker.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const getPathForLang = (lang) => {
3939
href={getPathForLang(lang)}
4040
hreflang={lang}
4141
aria-current={lang === currentLang ? 'page' : undefined}
42-
aria-label={t['labelariadesc']}
42+
aria-label={t['labelariadesc'][lang]}
4343
lang={lang}
4444
class={lang === currentLang ? 'font-bold underline underline-offset-4' : ''}
4545
>

src/i18n/components/LanguagePicker.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ export const texts = {
22
es: {
33
alttext: 'Selector de idioma',
44
label: { es: 'es', en: 'en', ca: 'ca' },
5-
labelariadesc: 'Idioma español',
5+
labelariadesc: { es: 'Idioma español', en: 'English language', ca: 'Idioma català' },
66
},
77
en: {
88
alttext: 'Language selector',
99
label: { es: 'es', en: 'en', ca: 'ca' },
10-
labelariadesc: 'English language',
10+
labelariadesc: { es: 'Idioma español', en: 'English language', ca: 'Idioma català' },
1111
},
1212
ca: {
1313
alttext: "Selector d'idioma",
1414
label: { es: 'es', en: 'en', ca: 'ca' },
15-
labelariadesc: 'Idioma català',
15+
labelariadesc: { es: 'Idioma español', en: 'English language', ca: 'Idioma català' },
1616
},
1717
} as const

src/i18n/sponsors/ca.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,41 @@ export const ca = {
5252
interests: {
5353
title: 'Interessos',
5454
items: [
55-
{ label: 'DATA & AI 🤖', pc: '40%', width: '40%' },
56-
{ label: 'WEB & BACKEND 💻', pc: '30%', width: '30%' },
57-
{ label: 'DEVOPS & CLOUD ☁️', pc: '20%', width: '20%' },
58-
{ label: 'ALTRES 🔧', pc: '10%', width: '10%' },
55+
{ label: 'ML & IA', emoji: '🤖', pc: '29%' },
56+
{ label: 'DATA SCIENCE', emoji: '📊', pc: '17%' },
57+
{ label: 'ENG. SOFTWARE', emoji: '🏗️', pc: '14%' },
58+
{ label: 'DESENV. WEB', emoji: '💻', pc: '10%' },
59+
{ label: 'COMUNITAT', emoji: '🤝', pc: '7%' },
60+
{ label: 'DEVOPS & CLOUD', emoji: '☁️', pc: '7%' },
61+
{ label: 'ALTRES', emoji: '🔧', pc: '16%' },
5962
],
6063
},
6164
audience: {
62-
title: 'Perfil d’assistents',
65+
title: 'Perfil del programa',
6366
seniority: 'Nivell de Seniority',
6467
items: [
65-
{ icon: '💼', value: '72%', label: 'Oberts a ofertes de feina' },
66-
{ icon: '🔑', value: '35%', label: 'Prenen decisions a la seva empresa' },
67-
{ icon: '💜', value: '25%', label: 'Dones i no-binaris' },
68-
{ icon: '🌍', value: '10%', label: 'Visitants internacionals' },
68+
{
69+
icon: '💼',
70+
value: '81%',
71+
label: 'Professionals en actiu',
72+
},
73+
{
74+
icon: '💜',
75+
value: '33%',
76+
label: 'Dones i persones no binàries',
77+
},
78+
{
79+
icon: '🔑',
80+
value: '26%',
81+
label: 'Direcció i Tech Leads',
82+
},
83+
{
84+
icon: '🌍',
85+
value: '13%',
86+
label: 'Contingut en anglès',
87+
},
6988
],
70-
quote: 'Una audiència madura: El 80% del contingut està enfocat a perfils intermedi-avançat.',
89+
quote: 'Immersió tècnica: el 62% de les xerrades son de nivells intermedi i avançat.',
7190
},
7291
whatis: {
7392
title: 'Què és PyConES?',

src/i18n/sponsors/en.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,41 @@ export const en = {
5252
interests: {
5353
title: 'Interests',
5454
items: [
55-
{ label: 'DATA & AI 🤖', pc: '40%', width: '40%' },
56-
{ label: 'WEB & BACKEND 💻', pc: '30%', width: '30%' },
57-
{ label: 'DEVOPS & CLOUD ☁️', pc: '20%', width: '20%' },
58-
{ label: 'OTHERS 🔧', pc: '10%', width: '10%' },
55+
{ label: 'ML & AI', emoji: '🤖', pc: '29%' },
56+
{ label: 'DATA SCIENCE', emoji: '📊', pc: '17%' },
57+
{ label: 'SOFTWARE ENG', emoji: '🏗️', pc: '14%' },
58+
{ label: 'WEB DEV', emoji: '💻', pc: '10%' },
59+
{ label: 'COMMUNITY', emoji: '🤝', pc: '7%' },
60+
{ label: 'DEVOPS & CLOUD', emoji: '☁️', pc: '7%' },
61+
{ label: 'OTHERS', emoji: '🔧', pc: '16%' },
5962
],
6063
},
6164
audience: {
62-
title: 'Attendee Profile',
65+
title: 'Program Profile',
6366
seniority: 'Seniority Level',
6467
items: [
65-
{ icon: '💼', value: '72%', label: 'Open to job offers' },
66-
{ icon: '🔑', value: '35%', label: 'Decision makers in their company' },
67-
{ icon: '💜', value: '25%', label: 'Women and non-binary' },
68-
{ icon: '🌍', value: '10%', label: 'International visitors' },
68+
{
69+
icon: '💼',
70+
value: '81%',
71+
label: 'Active Professionals',
72+
},
73+
{
74+
icon: '💜',
75+
value: '33%',
76+
label: 'Women and Non-Binary',
77+
},
78+
{
79+
icon: '🔑',
80+
value: '26%',
81+
label: 'Management & Tech Leads',
82+
},
83+
{
84+
icon: '🌍',
85+
value: '13%',
86+
label: 'English Track Content',
87+
},
6988
],
70-
quote: 'A mature audience: 80% of the content is focused on intermediate-advanced profiles.',
89+
quote: 'A technical deep-dive: 62% of the talks are for Intermediate and Advanced levels.',
7190
},
7291
whatis: {
7392
title: 'What is PyConES?',

src/i18n/sponsors/es.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,41 @@ export const es = {
5252
interests: {
5353
title: 'Intereses',
5454
items: [
55-
{ label: 'DATA & AI 🤖', pc: '40%', width: '40%' },
56-
{ label: 'WEB & BACKEND 💻', pc: '30%', width: '30%' },
57-
{ label: 'DEVOPS & CLOUD ☁️', pc: '20%', width: '20%' },
58-
{ label: 'OTROS 🔧', pc: '10%', width: '10%' },
55+
{ label: 'ML & IA', emoji: '🤖', pc: '29%' },
56+
{ label: 'DATA SCIENCE', emoji: '📊', pc: '17%' },
57+
{ label: 'ING. SOFTWARE', emoji: '🏗️', pc: '14%' },
58+
{ label: 'DESARROLLO WEB', emoji: '💻', pc: '10%' },
59+
{ label: 'COMUNIDAD', emoji: '🤝', pc: '7%' },
60+
{ label: 'DEVOPS & CLOUD', emoji: '☁️', pc: '7%' },
61+
{ label: 'OTROS', emoji: '🔧', pc: '16%' },
5962
],
6063
},
6164
audience: {
62-
title: 'Perfil de asistentes',
65+
title: 'Perfil del programa',
6366
seniority: 'Nivel de Seniority',
6467
items: [
65-
{ icon: '💼', value: '72%', label: 'Abiertos a ofertas de trabajo' },
66-
{ icon: '🔑', value: '35%', label: 'Toman decisiones en su empresa' },
67-
{ icon: '💜', value: '25%', label: 'Mujeres y no-binarios' },
68-
{ icon: '🌍', value: '10%', label: 'Visitantes internacionales' },
68+
{
69+
icon: '💼',
70+
value: '81%',
71+
label: 'Profesionales en activo',
72+
},
73+
{
74+
icon: '💜',
75+
value: '33%',
76+
label: 'Mujeres y personas no binarias',
77+
},
78+
{
79+
icon: '🔑',
80+
value: '26%',
81+
label: 'Dirección y Tech Leads',
82+
},
83+
{
84+
icon: '🌍',
85+
value: '13%',
86+
label: 'Contenido en inglés',
87+
},
6988
],
70-
quote: 'Una audiencia madura: El 80% del contenido está enfocado a perfiles intermedio-avanzado.',
89+
quote: 'Inmersión técnica: el 62% de las charlas son de niveles intermedio y avanzado.',
7190
},
7291
whatis: {
7392
title: '¿Qué es PyConES?',

src/pages/[lang]/sponsors.astro

Lines changed: 73 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,43 @@ const {
164164
<div class="bg-[#111] p-8 rounded-lg border border-[#333] mb-6">
165165
<h3 class="mb-6 font-mono text-white">{audience.seniority}</h3>
166166

167-
<div class="grid grid-cols-1 w-full rounded-md mb-4 sm:grid-cols-3">
168-
<div class="bg-gray-700 text-gray-300 text-xs font-bold rounded-tl rounded-bl flex items-center justify-center py-4">
169-
🌱 JUNIOR 20%
167+
<div
168+
role="img"
169+
aria-label=""
170+
aria-hidden="true"
171+
class="flex w-full h-12 rounded-lg overflow-hidden mb-3"
172+
>
173+
<div
174+
style="width: 38%"
175+
class="h-full min-w-[2rem] bg-gray-600 text-gray-200 text-xs font-bold flex items-center justify-center"
176+
>
177+
38%
170178
</div>
171-
<div class="bg-green-400 text-black text-sm font-bold flex items-center justify-center py-4">
172-
🚀 SENIOR / PRO 60%
179+
<div
180+
style="width: 57%"
181+
class="h-full min-w-[2rem] bg-green-400 text-black text-xs font-bold flex items-center justify-center"
182+
>
183+
57%
173184
</div>
174-
<div class="bg-gray-700 text-gray-300 text-xs font-bold rounded-tr rounded-br flex items-center justify-center py-4">
175-
🧠 EXPERT 20%
185+
<div
186+
style="width: 5%"
187+
class="h-full min-w-[2rem] bg-gray-500 text-gray-200 text-xs font-bold flex items-center justify-center"
188+
>
189+
5%
190+
</div>
191+
</div>
192+
<div class="flex flex-wrap justify-center gap-x-4 gap-y-1 mb-4">
193+
<div class="flex items-center gap-2 text-sm text-gray-300">
194+
<div class="w-3 h-3 rounded-sm flex-shrink-0 bg-gray-600"></div>
195+
<span><span aria-hidden="true">🌱</span> JUNIOR 38%</span>
196+
</div>
197+
<div class="flex items-center gap-2 text-sm text-gray-300">
198+
<div class="w-3 h-3 rounded-sm flex-shrink-0 bg-green-400"></div>
199+
<span><span aria-hidden="true">🚀</span> SENIOR / PRO 57%</span>
200+
</div>
201+
<div class="flex items-center gap-2 text-sm text-gray-300">
202+
<div class="w-3 h-3 rounded-sm flex-shrink-0 bg-gray-500"></div>
203+
<span><span aria-hidden="true">🧠</span> EXPERT 5%</span>
176204
</div>
177205
</div>
178206

@@ -195,23 +223,45 @@ const {
195223

196224
<div class="bg-[#111] p-8 rounded-lg border border-[#333]">
197225
<h3 class="mb-6 font-mono text-white">{interests.title}</h3>
198-
<div class="space-y-3">
199-
{
200-
interests.items.map((interest) => (
201-
<div class="flex items-center gap-4">
202-
<div class="w-32 text-sm text-gray-400">{interest.label}</div>
203-
<div class="flex-1 h-8 bg-[#222] rounded overflow-hidden">
204-
<div
205-
class="h-full bg-green-400 flex items-center justify-end pr-2 text-black text-sm font-bold"
206-
style={`width: ${interest.width}`}
207-
>
208-
{interest.pc}
209-
</div>
226+
{
227+
(() => {
228+
const colors = ['#4ade80', '#60a5fa', '#c084fc', '#fbbf24', '#f472b6', '#22d3ee', '#fb923c']
229+
return (
230+
<>
231+
<div class="flex w-full h-12 rounded-lg overflow-hidden" aria-hidden="true">
232+
{interests.items.map((interest, i) => (
233+
<div
234+
class="h-full min-w-[2rem] flex items-center justify-center text-black font-bold text-xs"
235+
style={`width: ${interest.pc}; background-color: ${colors[i]};`}
236+
>
237+
{interest.pc}
238+
</div>
239+
))}
210240
</div>
211-
</div>
212-
))
213-
}
214-
</div>
241+
<div class="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-x-4 gap-y-2 mt-4">
242+
{interests.items.map((interest, i) => (
243+
<div class="flex items-center gap-2 text-sm text-gray-300">
244+
<div
245+
class="w-3 h-3 rounded-sm flex-shrink-0"
246+
style={`background-color: ${colors[i]};`}
247+
aria-hidden="true"
248+
/>
249+
<span aria-hidden="true" class="truncate">
250+
{interest.label}
251+
</span>
252+
<span aria-hidden="true" class="mr-2">
253+
{interest.emoji}
254+
</span>
255+
<span class="sr-only">
256+
{interest.label} {interest.pc}
257+
</span>
258+
</div>
259+
))}
260+
</div>
261+
</>
262+
)
263+
})()
264+
}
215265
</div>
216266
</section>
217267

0 commit comments

Comments
 (0)