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
new file mode 100644
index 0000000..46d359c
--- /dev/null
+++ b/src/components/TeamsPage.astro
@@ -0,0 +1,83 @@
+---
+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))
+---
+
+
+
+
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..1820209 100644
--- a/src/i18n/menu/ca.ts
+++ b/src/i18n/menu/ca.ts
@@ -5,12 +5,21 @@ export const ca = {
href: '/',
},
{
- label: 'Seu',
- href: '/location',
- },
- {
- label: 'On allotjar-se',
- href: '/accommodation',
+ label: 'Informació',
+ children: [
+ {
+ label: 'Seu',
+ href: '/location',
+ },
+ {
+ 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 42e6332..b03e2f8 100644
--- a/src/i18n/menu/en.ts
+++ b/src/i18n/menu/en.ts
@@ -5,12 +5,21 @@ export const en = {
href: '/',
},
{
- label: 'Venue',
- href: '/location',
- },
- {
- label: 'Where to stay',
- href: '/accommodation',
+ label: 'Information',
+ children: [
+ {
+ label: 'Venue',
+ href: '/location',
+ },
+ {
+ 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 ecd0943..f1669d7 100644
--- a/src/i18n/menu/es.ts
+++ b/src/i18n/menu/es.ts
@@ -5,12 +5,21 @@ export const es = {
href: '/',
},
{
- label: 'Sede',
- href: '/location',
- },
- {
- label: 'Dónde alojarse',
- href: '/accommodation',
+ label: 'Información',
+ children: [
+ {
+ label: 'Sede',
+ href: '/location',
+ },
+ {
+ label: 'Dónde alojarse',
+ href: '/accommodation',
+ },
+ {
+ label: 'Equipos',
+ href: '/teams',
+ },
+ ],
},
{
label: 'Diversidad e Inclusión',
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]
+---
+
+
+
+