From aea7b753b01c40b38a267247e3c0e428569c537c Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 09:36:06 +0200 Subject: [PATCH 1/6] feat: add teams page with accessible card grid Adds /teams route for all locales (es, en, ca) listing all organization teams with name, description and contact email. Includes nav menu links and WCAG-compliant markup (role="list", focus-visible, aria-label with team context, aria-labelledby on sections). Co-Authored-By: Claude Sonnet 4.6 --- src/components/TeamsPage.astro | 87 ++++++++++++++++++++++++++++++++++ src/data/teams/catering.md | 5 ++ src/data/teams/diversity.md | 5 ++ src/data/teams/merch.md | 5 ++ src/data/teams/program.md | 5 ++ src/data/teams/rrss.md | 5 ++ src/data/teams/social.md | 5 ++ src/data/teams/sponsors.md | 5 ++ src/data/teams/ticketing.md | 5 ++ src/data/teams/venue.md | 5 ++ src/data/teams/volunteers.md | 5 ++ src/data/teams/web.md | 5 ++ src/i18n/menu/ca.ts | 4 ++ src/i18n/menu/en.ts | 4 ++ src/i18n/menu/es.ts | 4 ++ src/i18n/teams/ca.ts | 5 ++ src/i18n/teams/en.ts | 5 ++ src/i18n/teams/es.ts | 5 ++ src/i18n/teams/index.ts | 9 ++++ src/pages/[lang]/teams.astro | 26 ++++++++++ 20 files changed, 204 insertions(+) create mode 100644 src/components/TeamsPage.astro create mode 100644 src/data/teams/catering.md create mode 100644 src/data/teams/diversity.md create mode 100644 src/data/teams/merch.md create mode 100644 src/data/teams/program.md create mode 100644 src/data/teams/rrss.md create mode 100644 src/data/teams/social.md create mode 100644 src/data/teams/sponsors.md create mode 100644 src/data/teams/ticketing.md create mode 100644 src/data/teams/venue.md create mode 100644 src/data/teams/volunteers.md create mode 100644 src/data/teams/web.md create mode 100644 src/i18n/teams/ca.ts create mode 100644 src/i18n/teams/en.ts create mode 100644 src/i18n/teams/es.ts create mode 100644 src/i18n/teams/index.ts create mode 100644 src/pages/[lang]/teams.astro diff --git a/src/components/TeamsPage.astro b/src/components/TeamsPage.astro new file mode 100644 index 0000000..41d6bee --- /dev/null +++ b/src/components/TeamsPage.astro @@ -0,0 +1,87 @@ +--- +import { teamsTexts } from '../i18n/teams' + +interface Props { + lang: string +} + +const { lang } = Astro.props +const t = teamsTexts[(lang || 'es') as keyof typeof teamsTexts] + +const teams = ( + Object.values(import.meta.glob('../data/teams/*.md', { eager: true })) as { + frontmatter: { name: string; description: string; contact: string } + }[] +).sort((a, b) => a.frontmatter.name.localeCompare(b.frontmatter.name)) +--- + +
+
+

+ {t.hero} +

+
+ +
+

{t.hero}

+ +
+
+ + diff --git a/src/data/teams/catering.md b/src/data/teams/catering.md new file mode 100644 index 0000000..76cd2e6 --- /dev/null +++ b/src/data/teams/catering.md @@ -0,0 +1,5 @@ +--- +name: 'Catering' +description: 'Aseguramos que nadie pase hambre en la PyConES2026, para que los asistentes puedan recargar energía entre charla y charla.' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/data/teams/diversity.md b/src/data/teams/diversity.md new file mode 100644 index 0000000..28849bc --- /dev/null +++ b/src/data/teams/diversity.md @@ -0,0 +1,5 @@ +--- +name: 'Diversidad y becas' +description: 'Hacemos que el evento sea accesible para toda la comunidad, para que nadie se quede fuera por razones económicas o de representación.' +contact: 'diversidadybecas@2026.es.pycon.org' +--- diff --git a/src/data/teams/merch.md b/src/data/teams/merch.md new file mode 100644 index 0000000..c8d0c2c --- /dev/null +++ b/src/data/teams/merch.md @@ -0,0 +1,5 @@ +--- +name: 'Merch' +description: 'Diseñamos el merchandising oficial de la PyConES 2026 para que el evento se quede contigo mucho después de que termine' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/data/teams/program.md b/src/data/teams/program.md new file mode 100644 index 0000000..d39cd69 --- /dev/null +++ b/src/data/teams/program.md @@ -0,0 +1,5 @@ +--- +name: 'Programa' +description: 'Nos encargamos de seleccionar charlas, keynotes y otras sesiones, además de la confección del horario' +contact: 'charlas@2026.es.pycon.org' +--- diff --git a/src/data/teams/rrss.md b/src/data/teams/rrss.md new file mode 100644 index 0000000..a31636c --- /dev/null +++ b/src/data/teams/rrss.md @@ -0,0 +1,5 @@ +--- +name: 'RRSS & Comms' +description: 'Gestionamos la presencia digital y la comunicación oficial de la PyConES 2026 para que nadie se pierda nada y que la comunidad Python esté siempre informada' +contact: 'comm@es.pycon.org' +--- diff --git a/src/data/teams/social.md b/src/data/teams/social.md new file mode 100644 index 0000000..cf4de31 --- /dev/null +++ b/src/data/teams/social.md @@ -0,0 +1,5 @@ +--- +name: 'Fiestas y Social' +description: 'Organizamos los momentos de conexión fuera del escenario: las fiestas y eventos sociales de la PyConES 2026 donde la comunidad Python se reúne, celebra y crea vínculos.' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/data/teams/sponsors.md b/src/data/teams/sponsors.md new file mode 100644 index 0000000..db45589 --- /dev/null +++ b/src/data/teams/sponsors.md @@ -0,0 +1,5 @@ +--- +name: 'Sponsors' +description: 'Buscamos financiación para la conferencia y aseguramos la mejor experiencia para todas las entidades patrocinadoras.' +contact: 'sponsors@2026.es.pycon.org' +--- diff --git a/src/data/teams/ticketing.md b/src/data/teams/ticketing.md new file mode 100644 index 0000000..fc4f025 --- /dev/null +++ b/src/data/teams/ticketing.md @@ -0,0 +1,5 @@ +--- +name: 'Ticketing y Acreditaciones' +description: 'Gestionamos el acceso a la PyConES 2026, desde la venta de entradas hasta la acreditación en puerta, para garantizar una experiencia ágil y sin fricciones.' +contact: 'tickets@2026.es.pycon.org' +--- diff --git a/src/data/teams/venue.md b/src/data/teams/venue.md new file mode 100644 index 0000000..53055d0 --- /dev/null +++ b/src/data/teams/venue.md @@ -0,0 +1,5 @@ +--- +name: 'Venue' +description: 'Buscamos y gestionamos el espacio perfecto para la PyConES 2026, es decir, coordinamos el lugar del evento para que todo encaje' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/data/teams/volunteers.md b/src/data/teams/volunteers.md new file mode 100644 index 0000000..b61b9b8 --- /dev/null +++ b/src/data/teams/volunteers.md @@ -0,0 +1,5 @@ +--- +name: 'Voluntarios' +description: 'Reclutamos, formamos y coordinamos al equipo de voluntarios que hace posible la PyConES 2026: las personas que están en primera línea para que todo fluya el día del evento.' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/data/teams/web.md b/src/data/teams/web.md new file mode 100644 index 0000000..b7fa0fb --- /dev/null +++ b/src/data/teams/web.md @@ -0,0 +1,5 @@ +--- +name: 'Web' +description: 'Diseñamos y mantenemos la web oficial de la PyConES 2026 para que la comunidad encuentre toda la información que necesita.' +contact: 'contacto@2026.es.pycon.org' +--- diff --git a/src/i18n/menu/ca.ts b/src/i18n/menu/ca.ts index d866503..3173a66 100644 --- a/src/i18n/menu/ca.ts +++ b/src/i18n/menu/ca.ts @@ -12,6 +12,10 @@ export const ca = { label: 'On allotjar-se', href: '/accommodation', }, + { + label: 'Equips', + href: '/teams', + }, { label: 'Diversitat i Inclusió', children: [ diff --git a/src/i18n/menu/en.ts b/src/i18n/menu/en.ts index 42e6332..f456e59 100644 --- a/src/i18n/menu/en.ts +++ b/src/i18n/menu/en.ts @@ -12,6 +12,10 @@ export const en = { label: 'Where to stay', href: '/accommodation', }, + { + label: 'Teams', + href: '/teams', + }, { label: 'Diversity and Inclusion', children: [ diff --git a/src/i18n/menu/es.ts b/src/i18n/menu/es.ts index ecd0943..9141049 100644 --- a/src/i18n/menu/es.ts +++ b/src/i18n/menu/es.ts @@ -12,6 +12,10 @@ export const es = { label: 'Dónde alojarse', href: '/accommodation', }, + { + label: 'Equipos', + href: '/teams', + }, { label: 'Diversidad e Inclusión', children: [ diff --git a/src/i18n/teams/ca.ts b/src/i18n/teams/ca.ts new file mode 100644 index 0000000..7bee452 --- /dev/null +++ b/src/i18n/teams/ca.ts @@ -0,0 +1,5 @@ +export const ca = { + title: 'Equips | PyConES 2026', + hero: 'Equips', + contact: 'Contacte', +} as const diff --git a/src/i18n/teams/en.ts b/src/i18n/teams/en.ts new file mode 100644 index 0000000..603bed1 --- /dev/null +++ b/src/i18n/teams/en.ts @@ -0,0 +1,5 @@ +export const en = { + title: 'Teams | PyConES 2026', + hero: 'Teams', + contact: 'Contact', +} as const diff --git a/src/i18n/teams/es.ts b/src/i18n/teams/es.ts new file mode 100644 index 0000000..e54fbf0 --- /dev/null +++ b/src/i18n/teams/es.ts @@ -0,0 +1,5 @@ +export const es = { + title: 'Equipos | PyConES 2026', + hero: 'Equipos', + contact: 'Contacto', +} as const diff --git a/src/i18n/teams/index.ts b/src/i18n/teams/index.ts new file mode 100644 index 0000000..e6461b7 --- /dev/null +++ b/src/i18n/teams/index.ts @@ -0,0 +1,9 @@ +import { es } from './es' +import { en } from './en' +import { ca } from './ca' + +export const teamsTexts = { + es, + en, + ca, +} as const diff --git a/src/pages/[lang]/teams.astro b/src/pages/[lang]/teams.astro new file mode 100644 index 0000000..37f141f --- /dev/null +++ b/src/pages/[lang]/teams.astro @@ -0,0 +1,26 @@ +--- +import Layout from '../../layouts/Layout.astro' +import TeamsPage from '../../components/TeamsPage.astro' + +export function getStaticPaths() { + return [{ params: { lang: 'es' } }, { params: { lang: 'en' } }, { params: { lang: 'ca' } }] +} + +const { lang } = Astro.params + +const titles = { + es: 'Equipos | PyConES 2026', + en: 'Teams | PyConES 2026', + ca: 'Equips | PyConES 2026', +} + +const title = titles[(lang || 'es') as keyof typeof titles] +--- + + +
+
+ +
+
+
From 6c90553eef5491b215cb4d4a3a84056ce60f4af4 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 09:38:22 +0200 Subject: [PATCH 2/6] fix: format code --- .gitignore | 2 ++ src/components/TeamsPage.astro | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 72e6304..deb079b 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,5 @@ dist/ .vscode/ *.local + +.claude diff --git a/src/components/TeamsPage.astro b/src/components/TeamsPage.astro index 41d6bee..fe830bc 100644 --- a/src/components/TeamsPage.astro +++ b/src/components/TeamsPage.astro @@ -17,10 +17,7 @@ const teams = (
-

+

{t.hero}

From ee76971433f52bd9d23ea3beb45b01fd01296db4 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 12:30:43 +0200 Subject: [PATCH 3/6] feat: group accommodation and teams under Information dropdown menu Co-Authored-By: Claude Sonnet 4.6 --- src/i18n/menu/ca.ts | 17 +++++++++++------ src/i18n/menu/en.ts | 17 +++++++++++------ src/i18n/menu/es.ts | 17 +++++++++++------ 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/i18n/menu/ca.ts b/src/i18n/menu/ca.ts index 3173a66..9984634 100644 --- a/src/i18n/menu/ca.ts +++ b/src/i18n/menu/ca.ts @@ -9,12 +9,17 @@ export const ca = { href: '/location', }, { - label: 'On allotjar-se', - href: '/accommodation', - }, - { - label: 'Equips', - href: '/teams', + label: 'Informació', + children: [ + { + label: 'On allotjar-se', + href: '/accommodation', + }, + { + label: 'Equips', + href: '/teams', + }, + ], }, { label: 'Diversitat i Inclusió', diff --git a/src/i18n/menu/en.ts b/src/i18n/menu/en.ts index f456e59..1cfd85a 100644 --- a/src/i18n/menu/en.ts +++ b/src/i18n/menu/en.ts @@ -9,12 +9,17 @@ export const en = { href: '/location', }, { - label: 'Where to stay', - href: '/accommodation', - }, - { - label: 'Teams', - href: '/teams', + label: 'Information', + children: [ + { + label: 'Where to stay', + href: '/accommodation', + }, + { + label: 'Teams', + href: '/teams', + }, + ], }, { label: 'Diversity and Inclusion', diff --git a/src/i18n/menu/es.ts b/src/i18n/menu/es.ts index 9141049..703c933 100644 --- a/src/i18n/menu/es.ts +++ b/src/i18n/menu/es.ts @@ -9,12 +9,17 @@ export const es = { href: '/location', }, { - label: 'Dónde alojarse', - href: '/accommodation', - }, - { - label: 'Equipos', - href: '/teams', + label: 'Información', + children: [ + { + label: 'Dónde alojarse', + href: '/accommodation', + }, + { + label: 'Equipos', + href: '/teams', + }, + ], }, { label: 'Diversidad e Inclusión', From 07a257a44fb163bb855303c6f008b62e80f30eb1 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 12:31:20 +0200 Subject: [PATCH 4/6] feat: move venue into Information dropdown menu Co-Authored-By: Claude Sonnet 4.6 --- src/i18n/menu/ca.ts | 8 ++++---- src/i18n/menu/en.ts | 8 ++++---- src/i18n/menu/es.ts | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/i18n/menu/ca.ts b/src/i18n/menu/ca.ts index 9984634..1820209 100644 --- a/src/i18n/menu/ca.ts +++ b/src/i18n/menu/ca.ts @@ -4,13 +4,13 @@ export const ca = { label: 'Inici', href: '/', }, - { - label: 'Seu', - href: '/location', - }, { label: 'Informació', children: [ + { + label: 'Seu', + href: '/location', + }, { label: 'On allotjar-se', href: '/accommodation', diff --git a/src/i18n/menu/en.ts b/src/i18n/menu/en.ts index 1cfd85a..b03e2f8 100644 --- a/src/i18n/menu/en.ts +++ b/src/i18n/menu/en.ts @@ -4,13 +4,13 @@ export const en = { label: 'Home', href: '/', }, - { - label: 'Venue', - href: '/location', - }, { label: 'Information', children: [ + { + label: 'Venue', + href: '/location', + }, { label: 'Where to stay', href: '/accommodation', diff --git a/src/i18n/menu/es.ts b/src/i18n/menu/es.ts index 703c933..f1669d7 100644 --- a/src/i18n/menu/es.ts +++ b/src/i18n/menu/es.ts @@ -4,13 +4,13 @@ export const es = { label: 'Inicio', href: '/', }, - { - label: 'Sede', - href: '/location', - }, { label: 'Información', children: [ + { + label: 'Sede', + href: '/location', + }, { label: 'Dónde alojarse', href: '/accommodation', From 5cb5a55e09740396911343abb7f3c418281d14e5 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 12:33:30 +0200 Subject: [PATCH 5/6] fix: adjust heading hierarchy in TeamsPage Co-Authored-By: Claude Sonnet 4.6 --- src/components/TeamsPage.astro | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/TeamsPage.astro b/src/components/TeamsPage.astro index fe830bc..a03552b 100644 --- a/src/components/TeamsPage.astro +++ b/src/components/TeamsPage.astro @@ -17,13 +17,12 @@ const teams = (
-

+

{t.hero} -

+
-

{t.hero}

    { teams.map(({ frontmatter: team }) => ( From 530b1cde86ea95b4d63aa1082b8b10e9b694a21e Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Sun, 10 May 2026 13:45:00 +0200 Subject: [PATCH 6/6] revert: h1 and change h3 to h2 --- src/components/TeamsPage.astro | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/TeamsPage.astro b/src/components/TeamsPage.astro index a03552b..46d359c 100644 --- a/src/components/TeamsPage.astro +++ b/src/components/TeamsPage.astro @@ -17,9 +17,9 @@ const teams = (
    -

    +

    {t.hero} -

    +
    @@ -27,7 +27,7 @@ const teams = ( { teams.map(({ frontmatter: team }) => (
  • -

    {team.name}

    +

    {team.name}

    {team.description}