From 2b556e5a48eb685f7a2a2897f8937b08577aab72 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Wed, 24 Jun 2026 20:25:12 +0200 Subject: [PATCH 01/10] refactor(data): consolidate speakers and jobs markdown per locale Replace per-locale folders (ca/, es/, en/) with a single markdown file per entry holding translations inline. Only the description (and location, for jobs) were actually multi-locale; everything else (name, company, links, salary, skills, tier, etc.) was duplicated noise and a desync hazard. - src/data/speakers/diego.md: single file with descriptions: { ca, es, en } - src/data/jobs/*.md: 5 consolidated files with location and description as Record - src/data/{speakers,jobs}/{ca,es,en}/: removed (18 .md + 6 dirs) - src/types/locale.ts: shared TLocale type - src/types/jobs.ts: new IJob + TJobTier, extracted from inline JobFrontmatter in JobsPage.astro - src/types/speakers.ts: ISpeaker.descriptions replaces description - SectionSpeakers.astro, SpeakerCard.astro, JobsPage.astro: single import.meta.glob per data dir, removed allSpeakersMap and allJobsMap, fields resolved by lang at render time Template _plantilla-oferta.md is preserved and excluded from the jobs glob via the !(_*).md pattern. Bonus: fever-senior-dev/es description was left in English (masked by draft:true), translated to Spanish. Missing ca translation for fever-senior-dev added. --- src/components/JobsPage.astro | 190 ++++++++---------- src/components/home/SectionSpeakers.astro | 18 +- src/components/home/SpeakerCard.astro | 2 +- src/data/jobs/ca/jetbrains-python-dev.md | 12 -- src/data/jobs/ca/rover-lead-engineer.md | 11 - .../jobs/ca/rover-senior-product-engineer.md | 11 - src/data/jobs/ca/rover-software-engineer.md | 11 - src/data/jobs/en/fever-senior-dev.md | 12 -- src/data/jobs/en/jetbrains-python-dev.md | 12 -- src/data/jobs/en/rover-lead-engineer.md | 11 - .../jobs/en/rover-senior-product-engineer.md | 11 - src/data/jobs/en/rover-software-engineer.md | 11 - src/data/jobs/es/fever-senior-dev.md | 12 -- src/data/jobs/es/jetbrains-python-dev.md | 12 -- src/data/jobs/es/rover-lead-engineer.md | 11 - .../jobs/es/rover-senior-product-engineer.md | 11 - src/data/jobs/es/rover-software-engineer.md | 11 - src/data/jobs/fever-senior-dev.md | 18 ++ src/data/jobs/jetbrains-python-dev.md | 18 ++ src/data/jobs/rover-lead-engineer.md | 17 ++ .../jobs/rover-senior-product-engineer.md | 17 ++ src/data/jobs/rover-software-engineer.md | 17 ++ src/data/speakers/ca/diego.md | 21 -- src/data/speakers/diego.md | 32 +++ src/data/speakers/en/diego.md | 21 -- src/data/speakers/es/diego.md | 21 -- src/types/jobs.ts | 16 ++ src/types/locale.ts | 1 + src/types/speakers.ts | 4 +- 29 files changed, 230 insertions(+), 342 deletions(-) delete mode 100644 src/data/jobs/ca/jetbrains-python-dev.md delete mode 100644 src/data/jobs/ca/rover-lead-engineer.md delete mode 100644 src/data/jobs/ca/rover-senior-product-engineer.md delete mode 100644 src/data/jobs/ca/rover-software-engineer.md delete mode 100644 src/data/jobs/en/fever-senior-dev.md delete mode 100644 src/data/jobs/en/jetbrains-python-dev.md delete mode 100644 src/data/jobs/en/rover-lead-engineer.md delete mode 100644 src/data/jobs/en/rover-senior-product-engineer.md delete mode 100644 src/data/jobs/en/rover-software-engineer.md delete mode 100644 src/data/jobs/es/fever-senior-dev.md delete mode 100644 src/data/jobs/es/jetbrains-python-dev.md delete mode 100644 src/data/jobs/es/rover-lead-engineer.md delete mode 100644 src/data/jobs/es/rover-senior-product-engineer.md delete mode 100644 src/data/jobs/es/rover-software-engineer.md create mode 100644 src/data/jobs/fever-senior-dev.md create mode 100644 src/data/jobs/jetbrains-python-dev.md create mode 100644 src/data/jobs/rover-lead-engineer.md create mode 100644 src/data/jobs/rover-senior-product-engineer.md create mode 100644 src/data/jobs/rover-software-engineer.md delete mode 100644 src/data/speakers/ca/diego.md create mode 100644 src/data/speakers/diego.md delete mode 100644 src/data/speakers/en/diego.md delete mode 100644 src/data/speakers/es/diego.md create mode 100644 src/types/jobs.ts create mode 100644 src/types/locale.ts diff --git a/src/components/JobsPage.astro b/src/components/JobsPage.astro index c18b0b4..28c4acb 100644 --- a/src/components/JobsPage.astro +++ b/src/components/JobsPage.astro @@ -1,57 +1,32 @@ --- import { jobsTexts } from '../i18n/jobs' import { menuTexts } from '../i18n/menu' +import type { IJob, TLocale, TJobTier } from '../types/jobs' interface Props { lang: string } -interface JobFrontmatter { - title: string - company: string - location: string - type: string - description: string - skills?: string[] - salary?: string - apply_url: string - tier?: string - draft?: boolean -} - const { lang } = Astro.props const t = jobsTexts[(lang || 'es') as keyof typeof jobsTexts] const menuT = menuTexts[(lang || 'es') as keyof typeof menuTexts] +const locale = (lang || 'es') as TLocale -const esJobs = Object.values(import.meta.glob('../data/jobs/es/*.md', { eager: true })) as { - frontmatter: JobFrontmatter -}[] -const enJobs = Object.values(import.meta.glob('../data/jobs/en/*.md', { eager: true })) as { - frontmatter: JobFrontmatter +const jobModules = Object.values(import.meta.glob('../data/jobs/!(_*).md', { eager: true })) as { + frontmatter: IJob }[] -const caJobs = Object.values(import.meta.glob('../data/jobs/ca/*.md', { eager: true })) as { - frontmatter: JobFrontmatter -}[] - -const allJobsMap: Record = { - es: esJobs, - en: enJobs, - ca: caJobs, -} -const allJobs = allJobsMap[lang] || [] +const tierOrder: Record = { platinum: 0, gold: 1, silver: 2, bronze: 3 } -const jobs = allJobs +const jobs = jobModules .filter((job) => job.frontmatter.draft !== true) .sort((a, b) => { - const tierOrder = { platinum: 0, gold: 1, silver: 2, bronze: 3 } - const aTier = tierOrder[a.frontmatter.tier as keyof typeof tierOrder] ?? 4 - const bTier = tierOrder[b.frontmatter.tier as keyof typeof tierOrder] ?? 4 - if (aTier !== bTier) return aTier - bTier - return 0 + const aTier = tierOrder[a.frontmatter.tier as TJobTier] ?? 4 + const bTier = tierOrder[b.frontmatter.tier as TJobTier] ?? 4 + return aTier - bTier }) -const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum' +const isFeatured = (tier?: TJobTier) => tier === 'gold' || tier === 'platinum' ---
@@ -67,46 +42,84 @@ const isFeatured = (tier?: string) => tier === 'gold' || tier === 'platinum'

{t.no_jobs}

) : (
    - {jobs.map(({ frontmatter: job }) => ( -
  • -
    -
    -

    {job.title}

    -

    {job.company}

    + {jobs.map(({ frontmatter: job }) => { + const jobLocation = job.location[locale] + return ( +
  • +
    +
    +

    {job.title}

    +

    {job.company}

    +
    + {isFeatured(job.tier) && ( + + {t.featured} + + )}
    - {isFeatured(job.tier) && ( - - {t.featured} - - )} -
- -
-

{job.description}

-
- {job.skills && job.skills.length > 0 && ( -
-

{t.skills}

-
    - {job.skills.map((skill) => ( -
  • - - {skill} - -
  • - ))} -
+
+

+ {job.description[locale]} +

- )} -
-
-
+ {job.skills && job.skills.length > 0 && ( +
+

{t.skills}

+
    + {job.skills.map((skill) => ( +
  • + + {skill} + +
  • + ))} +
+
+ )} + + - {job.type} - {job.salary && {job.salary}} +
- - - {t.apply} - - -
- - ))} + + ) + })} ) } diff --git a/src/components/home/SectionSpeakers.astro b/src/components/home/SectionSpeakers.astro index 4f32db0..fc325ff 100644 --- a/src/components/home/SectionSpeakers.astro +++ b/src/components/home/SectionSpeakers.astro @@ -12,25 +12,11 @@ interface Props { const { lang } = Astro.props const t = texts[lang as keyof typeof texts] -const esSpeakers = Object.values(import.meta.glob('../../data/speakers/es/*.md', { eager: true })) as { +const speakerModules = Object.values(import.meta.glob('../../data/speakers/*.md', { eager: true })) as { frontmatter: ISpeaker }[] -const enSpeakers = Object.values(import.meta.glob('../../data/speakers/en/*.md', { eager: true })) as { - frontmatter: ISpeaker -}[] -const caSpeakers = Object.values(import.meta.glob('../../data/speakers/ca/*.md', { eager: true })) as { - frontmatter: ISpeaker -}[] - -const allSpeakersMap: Record = { - es: esSpeakers, - en: enSpeakers, - ca: caSpeakers, -} - -const speakers = allSpeakersMap[lang] || [] -const sortedSpeakers = speakers.map((s) => s.frontmatter).sort((a, b) => a.order - b.order) +const sortedSpeakers = speakerModules.map((s) => s.frontmatter).sort((a, b) => a.order - b.order) const count = sortedSpeakers.length const gridByCount: Record = { diff --git a/src/components/home/SpeakerCard.astro b/src/components/home/SpeakerCard.astro index 5861bd6..412a631 100644 --- a/src/components/home/SpeakerCard.astro +++ b/src/components/home/SpeakerCard.astro @@ -78,6 +78,6 @@ const linkClasses =

- {speaker.description} + {speaker.descriptions[lang as keyof typeof speaker.descriptions]}

diff --git a/src/data/jobs/ca/jetbrains-python-dev.md b/src/data/jobs/ca/jetbrains-python-dev.md deleted file mode 100644 index f85d7f7..0000000 --- a/src/data/jobs/ca/jetbrains-python-dev.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Senior Python Developer' -company: 'JetBrains' -location: 'Remot' -type: 'Full-time' -description: "Uneix-te al nostre equip per treballar en eines de desenvolupament d'última generació. Formaràs part d'un equip que crea productes utilitzats per milions de desenvolupadors a tot el món." -skills: [Python, Django, PostgreSQL, AWS] -salary: '60k-80k' -apply_url: 'https://www.jetbrains.com/careers/' -tier: 'gold' -draft: true ---- diff --git a/src/data/jobs/ca/rover-lead-engineer.md b/src/data/jobs/ca/rover-lead-engineer.md deleted file mode 100644 index 81ad9b1..0000000 --- a/src/data/jobs/ca/rover-lead-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Lead Engineer' -company: 'Rover' -location: 'Híbrid, Barcelona' -type: 'Full-time' -description: "Ets un apassionat Lead Engineer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostra plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/a825940e-3c09-408a-bfe8-a4f14c9f2c9a' -tier: 'gold' ---- diff --git a/src/data/jobs/ca/rover-senior-product-engineer.md b/src/data/jobs/ca/rover-senior-product-engineer.md deleted file mode 100644 index ea858b6..0000000 --- a/src/data/jobs/ca/rover-senior-product-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Senior Product Engineer' -company: 'Rover' -location: 'Híbrid, Barcelona' -type: 'Full-time' -description: "Ets un apassionat enginyer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostra plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/7b645600-5d9f-4bda-9bc2-fb770d0e86dc' -tier: 'gold' ---- diff --git a/src/data/jobs/ca/rover-software-engineer.md b/src/data/jobs/ca/rover-software-engineer.md deleted file mode 100644 index 19e93ef..0000000 --- a/src/data/jobs/ca/rover-software-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Software Engineer' -company: 'Rover' -location: 'Híbrid, Barcelona' -type: 'Full-time' -description: "Ets un apassionat Software Engineer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostra plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." -skills: [Python, React, 'React Native'] -salary: '55k-65k' -apply_url: 'https://jobs.lever.co/rover/21376cdb-4a9c-4ba9-b6d1-ee350d09cc0f' -tier: 'gold' ---- diff --git a/src/data/jobs/en/fever-senior-dev.md b/src/data/jobs/en/fever-senior-dev.md deleted file mode 100644 index 6fda4af..0000000 --- a/src/data/jobs/en/fever-senior-dev.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Senior Backend Engineer' -company: 'Fever' -location: 'Madrid - Hybrid' -type: 'Full-time' -description: "We're looking for a Senior Backend Engineer to join our backend team, with outstanding software development talent." -skills: [Python, Django, PostgreSQL, Redis, AWS, Docker, Kubernetes] -salary: '50k-70k + 10% + stock options' -apply_url: 'https://careers.feverup.com/' -tier: 'gold' -draft: true ---- diff --git a/src/data/jobs/en/jetbrains-python-dev.md b/src/data/jobs/en/jetbrains-python-dev.md deleted file mode 100644 index b27081d..0000000 --- a/src/data/jobs/en/jetbrains-python-dev.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Senior Python Developer' -company: 'JetBrains' -location: 'Remote' -type: 'Full-time' -description: "Join our team to work on cutting-edge developer tools. You'll be part of a team that creates products used by millions of developers worldwide." -skills: [Python, Django, PostgreSQL, AWS] -salary: '60k-80k' -apply_url: 'https://www.jetbrains.com/careers/' -tier: 'gold' -draft: true ---- diff --git a/src/data/jobs/en/rover-lead-engineer.md b/src/data/jobs/en/rover-lead-engineer.md deleted file mode 100644 index 2c81fcd..0000000 --- a/src/data/jobs/en/rover-lead-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Lead Engineer' -company: 'Rover' -location: 'Hybrid, Barcelona' -type: 'Full-time' -description: "Are you a passionate Lead Engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/a825940e-3c09-408a-bfe8-a4f14c9f2c9a' -tier: 'gold' ---- diff --git a/src/data/jobs/en/rover-senior-product-engineer.md b/src/data/jobs/en/rover-senior-product-engineer.md deleted file mode 100644 index 1f11f87..0000000 --- a/src/data/jobs/en/rover-senior-product-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Senior Product Engineer' -company: 'Rover' -location: 'Hybrid, Barcelona' -type: 'Full-time' -description: "Are you a passionate engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/7b645600-5d9f-4bda-9bc2-fb770d0e86dc' -tier: 'gold' ---- diff --git a/src/data/jobs/en/rover-software-engineer.md b/src/data/jobs/en/rover-software-engineer.md deleted file mode 100644 index b4656d4..0000000 --- a/src/data/jobs/en/rover-software-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Software Engineer' -company: 'Rover' -location: 'Hybrid, Barcelona' -type: 'Full-time' -description: "Are you a passionate Software Engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." -skills: [Python, React, 'React Native'] -salary: '55k-65k' -apply_url: 'https://jobs.lever.co/rover/21376cdb-4a9c-4ba9-b6d1-ee350d09cc0f' -tier: 'gold' ---- diff --git a/src/data/jobs/es/fever-senior-dev.md b/src/data/jobs/es/fever-senior-dev.md deleted file mode 100644 index 2dff39d..0000000 --- a/src/data/jobs/es/fever-senior-dev.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Senior Backend Engineer' -company: 'Fever' -location: 'Madrid - Hybrid' -type: 'Full-time' -description: "We're looking for a Senior Backend Engineer to join our backend team, with outstanding software development talent demonstrated by great work results and experience." -skills: [Python, Django, PostgreSQL, Redis, AWS, Docker, Kubernetes] -salary: '50k-70k + 10% + stock options' -apply_url: 'https://careers.feverup.com/' -tier: 'gold' -draft: true ---- diff --git a/src/data/jobs/es/jetbrains-python-dev.md b/src/data/jobs/es/jetbrains-python-dev.md deleted file mode 100644 index ca100c4..0000000 --- a/src/data/jobs/es/jetbrains-python-dev.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: 'Senior Python Developer' -company: 'JetBrains' -location: 'Remoto' -type: 'Full-time' -description: "Join our team to work on cutting-edge developer tools. You'll be part of a team that creates products used by millions of developers worldwide." -skills: [Python, Django, PostgreSQL, AWS] -salary: '60k-80k' -apply_url: 'https://www.jetbrains.com/careers/' -tier: 'gold' -draft: true ---- diff --git a/src/data/jobs/es/rover-lead-engineer.md b/src/data/jobs/es/rover-lead-engineer.md deleted file mode 100644 index c5bf011..0000000 --- a/src/data/jobs/es/rover-lead-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Lead Engineer' -company: 'Rover' -location: 'Híbrido, Barcelona' -type: 'Full-time' -description: '¿Eres un apasionado Lead Engineer listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/a825940e-3c09-408a-bfe8-a4f14c9f2c9a' -tier: 'gold' ---- diff --git a/src/data/jobs/es/rover-senior-product-engineer.md b/src/data/jobs/es/rover-senior-product-engineer.md deleted file mode 100644 index 646fbeb..0000000 --- a/src/data/jobs/es/rover-senior-product-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Senior Product Engineer' -company: 'Rover' -location: 'Híbrido, Barcelona' -type: 'Full-time' -description: '¿Eres un apasionado ingeniero listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' -skills: [Python, React, 'React Native'] -salary: '65k-80k' -apply_url: 'https://jobs.lever.co/rover/7b645600-5d9f-4bda-9bc2-fb770d0e86dc' -tier: 'gold' ---- diff --git a/src/data/jobs/es/rover-software-engineer.md b/src/data/jobs/es/rover-software-engineer.md deleted file mode 100644 index 81233ba..0000000 --- a/src/data/jobs/es/rover-software-engineer.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 'Software Engineer' -company: 'Rover' -location: 'Híbrido, Barcelona' -type: 'Full-time' -description: '¿Eres un apasionado Software Engineer listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' -skills: [Python, React, 'React Native'] -salary: '55k-65k' -apply_url: 'https://jobs.lever.co/rover/21376cdb-4a9c-4ba9-b6d1-ee350d09cc0f' -tier: 'gold' ---- diff --git a/src/data/jobs/fever-senior-dev.md b/src/data/jobs/fever-senior-dev.md new file mode 100644 index 0000000..ad1032c --- /dev/null +++ b/src/data/jobs/fever-senior-dev.md @@ -0,0 +1,18 @@ +--- +title: 'Senior Backend Engineer' +company: 'Fever' +type: 'Full-time' +skills: [Python, Django, PostgreSQL, Redis, AWS, Docker, Kubernetes] +salary: '50k-70k + 10% + stock options' +apply_url: 'https://careers.feverup.com/' +tier: 'gold' +draft: true +location: + ca: 'Madrid - Híbrid' + es: 'Madrid - Híbrido' + en: 'Madrid - Hybrid' +description: + ca: 'Busquem un Senior Backend Engineer per incorporar-se al nostre equip de backend, amb un talent destacat en desenvolupament de programari.' + es: 'Buscamos un Senior Backend Engineer para unirse a nuestro equipo de backend, con un talento destacado en desarrollo de software.' + en: "We're looking for a Senior Backend Engineer to join our backend team, with outstanding software development talent." +--- diff --git a/src/data/jobs/jetbrains-python-dev.md b/src/data/jobs/jetbrains-python-dev.md new file mode 100644 index 0000000..0e6786d --- /dev/null +++ b/src/data/jobs/jetbrains-python-dev.md @@ -0,0 +1,18 @@ +--- +title: 'Senior Python Developer' +company: 'JetBrains' +type: 'Full-time' +skills: [Python, Django, PostgreSQL, AWS] +salary: '60k-80k' +apply_url: 'https://www.jetbrains.com/careers/' +tier: 'gold' +draft: true +location: + ca: 'Remot' + es: 'Remoto' + en: 'Remote' +description: + ca: "Uneix-te al nostre equip per treballar en eines de desenvolupament d'última generació. Formaràs part d'un equip que crea productes utilitzats per milions de desenvolupadors a tot el món." + es: "Join our team to work on cutting-edge developer tools. You'll be part of a team that creates products used by millions of developers worldwide." + en: "Join our team to work on cutting-edge developer tools. You'll be part of a team that creates products used by millions of developers worldwide." +--- diff --git a/src/data/jobs/rover-lead-engineer.md b/src/data/jobs/rover-lead-engineer.md new file mode 100644 index 0000000..2ffa0ce --- /dev/null +++ b/src/data/jobs/rover-lead-engineer.md @@ -0,0 +1,17 @@ +--- +title: 'Lead Engineer' +company: 'Rover' +type: 'Full-time' +skills: [Python, React, 'React Native'] +salary: '65k-80k' +apply_url: 'https://jobs.lever.co/rover/a825940e-3c09-408a-bfe8-a4f14c9f2c9a' +tier: 'gold' +location: + ca: 'Híbrid, Barcelona' + es: 'Híbrido, Barcelona' + en: 'Hybrid, Barcelona' +description: + ca: "Ets un apassionat Lead Engineer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostra plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." + es: '¿Eres un apasionado Lead Engineer listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' + en: "Are you a passionate Lead Engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." +--- diff --git a/src/data/jobs/rover-senior-product-engineer.md b/src/data/jobs/rover-senior-product-engineer.md new file mode 100644 index 0000000..b73fbc5 --- /dev/null +++ b/src/data/jobs/rover-senior-product-engineer.md @@ -0,0 +1,17 @@ +--- +title: 'Senior Product Engineer' +company: 'Rover' +type: 'Full-time' +skills: [Python, React, 'React Native'] +salary: '65k-80k' +apply_url: 'https://jobs.lever.co/rover/7b645600-5d9f-4bda-9bc2-fb770d0e86dc' +tier: 'gold' +location: + ca: 'Híbrid, Barcelona' + es: 'Híbrido, Barcelona' + en: 'Hybrid, Barcelona' +description: + ca: "Ets un apassionat enginyer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostra plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." + es: '¿Eres un apasionado ingeniero listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' + en: "Are you a passionate engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." +--- diff --git a/src/data/jobs/rover-software-engineer.md b/src/data/jobs/rover-software-engineer.md new file mode 100644 index 0000000..29cca32 --- /dev/null +++ b/src/data/jobs/rover-software-engineer.md @@ -0,0 +1,17 @@ +--- +title: 'Software Engineer' +company: 'Rover' +type: 'Full-time' +skills: [Python, React, 'React Native'] +salary: '55k-65k' +apply_url: 'https://jobs.lever.co/rover/21376cdb-4a9c-4ba9-b6d1-ee350d09cc0f' +tier: 'gold' +location: + ca: 'Híbrid, Barcelona' + es: 'Híbrido, Barcelona' + en: 'Hybrid, Barcelona' +description: + ca: "Ets un apassionat Software Engineer preparat per crear productes orientats al client que millorin la vida de les persones i les seves mascotes? Busquem un enginyer entusiasta per unir-se al nostre equip a Barcelona. En aquest rol, seràs un col·laborador clau de la nostre plataforma, treballant amb equips multifuncionals per resoldre reptes tècnics i lliurar solucions d'alta qualitat." + es: '¿Eres un apasionado Software Engineer listo para crear productos de cara al cliente que mejoren la vida de las personas y sus mascotas? Buscamos un ingeniero entusiasta para unirse a nuestro equipo en Barcelona. En este rol, serás un colaborador clave en nuestra plataforma, trabajando con equipos multifuncionales para resolver retos técnicos y entregar soluciones de alta calidad.' + en: "Are you a passionate Software Engineer ready to build customer-facing products that improve the lives of people and their pets? We're looking for an enthusiastic engineer to join our team in Barcelona. In this role, you'll be a core contributor to our platform, collaborating with cross-functional teams to tackle technical challenges and deliver high-quality solutions." +--- diff --git a/src/data/speakers/ca/diego.md b/src/data/speakers/ca/diego.md deleted file mode 100644 index 4f7eb02..0000000 --- a/src/data/speakers/ca/diego.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: 'Diego Russo' -order: 1 -photo: '/speakers/diego.jpg' -links: - - type: 'github' - url: 'https://github.com/diegorusso' - - type: 'linkedin' - url: 'https://www.linkedin.com/in/diegor/' - - type: 'bluesky' - url: 'https://bsky.app/profile/diegor.it' - - type: 'twitter' - url: 'https://x.com/diegor' - - type: 'instagram' - url: 'https://www.instagram.com/diegor.it' -description: | - Diego Russo és desenvolupador core de CPython i enginyer cap de software de l'equip de Runtimes d'Arm, amb seu a Cambridge (Regne Unit). - Fa servir Python des del 2006 i contribueix a CPython des del 2023, centrant-se en el rendiment de l'intèrpret, el treball relacionat amb JIT, la infraestructura d'integració contínua i en garantir que CPython i el seu ecosistema funcionin de manera fiable i eficient a les plataformes Arm. - El seu treball es troba a la intersecció entre el temps d'execució, l'enginyeria de rendiment i la col·laboració de codi obert a gran escala. - Diego és també organitzador d'EuroPython i dirigeix l'Arm Python Guild, una comunitat interna de més de 1.400 desenvolupadors de Python que treballen a tota l'empresa. ---- diff --git a/src/data/speakers/diego.md b/src/data/speakers/diego.md new file mode 100644 index 0000000..f5a9192 --- /dev/null +++ b/src/data/speakers/diego.md @@ -0,0 +1,32 @@ +--- +name: 'Diego Russo' +order: 1 +photo: '/speakers/diego.jpg' +links: + - type: 'github' + url: 'https://github.com/diegorusso' + - type: 'linkedin' + url: 'https://www.linkedin.com/in/diegor/' + - type: 'bluesky' + url: 'https://bsky.app/profile/diegor.it' + - type: 'twitter' + url: 'https://x.com/diegor' + - type: 'instagram' + url: 'https://www.instagram.com/diegor.it' +descriptions: + ca: | + Diego Russo és desenvolupador core de CPython i enginyer cap de software de l'equip de Runtimes d'Arm, amb seu a Cambridge (Regne Unit). + Fa servir Python des del 2006 i contribueix a CPython des del 2023, centrant-se en el rendiment de l'intèrpret, el treball relacionat amb JIT, la infraestructura d'integració contínua i en garantir que CPython i el seu ecosistema funcionin de manera fiable i eficient a les plataformes Arm. + El seu treball es troba a la intersecció entre el temps d'execució, l'enginyeria de rendiment i la col·laboració de codi obert a gran escala. + Diego és també organitzador d'EuroPython i dirigeix l'Arm Python Guild, una comunitat interna de més de 1.400 desenvolupadors de Python que treballen a tota l'empresa. + es: | + Diego Russo es core developer de CPython e ingeniero jefe de software en el equipo de Runtimes de Arm, con sede en Cambridge (Reino Unido). + Lleva utilizando Python desde 2006 y contribuyendo a CPython desde 2023, centrándose en el rendimiento del intérprete, el trabajo relacionado con JIT, la infraestructura de integración continua y en garantizar que CPython y su ecosistema funcionen de forma fiable y eficiente en las plataformas Arm. + Su trabajo se sitúa en la intersección entre el tiempo de ejecución, la ingeniería de rendimiento y la colaboración de código abierto a gran escala. + Diego es también organizador de EuroPython y dirige el Arm Python Guild, una comunidad interna de más de 1.400 desarrolladores de Python que trabajan en toda la empresa. + en: | + Diego Russo is a CPython core developer and Head of Software Engineering on Arm's Runtimes team, based in Cambridge (United Kingdom). + He has been using Python since 2006 and contributing to CPython since 2023, focusing on interpreter performance, JIT-related work, continuous integration infrastructure, and ensuring that CPython and its ecosystem run reliably and efficiently on Arm platforms. + His work sits at the intersection of runtime engineering, performance engineering, and large-scale open source collaboration. + Diego is also an EuroPython organizer and leads the Arm Python Guild, an internal community of over 1,400 Python developers working across the company. +--- diff --git a/src/data/speakers/en/diego.md b/src/data/speakers/en/diego.md deleted file mode 100644 index d561ad9..0000000 --- a/src/data/speakers/en/diego.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: 'Diego Russo' -order: 1 -photo: '/speakers/diego.jpg' -links: - - type: 'github' - url: 'https://github.com/diegorusso' - - type: 'linkedin' - url: 'https://www.linkedin.com/in/diegor/' - - type: 'bluesky' - url: 'https://bsky.app/profile/diegor.it' - - type: 'twitter' - url: 'https://x.com/diegor' - - type: 'instagram' - url: 'https://www.instagram.com/diegor.it' -description: | - Diego Russo is a CPython core developer and Head of Software Engineering on Arm's Runtimes team, based in Cambridge (United Kingdom). - He has been using Python since 2006 and contributing to CPython since 2023, focusing on interpreter performance, JIT-related work, continuous integration infrastructure, and ensuring that CPython and its ecosystem run reliably and efficiently on Arm platforms. - His work sits at the intersection of runtime engineering, performance engineering, and large-scale open source collaboration. - Diego is also an EuroPython organizer and leads the Arm Python Guild, an internal community of over 1,400 Python developers working across the company. ---- diff --git a/src/data/speakers/es/diego.md b/src/data/speakers/es/diego.md deleted file mode 100644 index be68f61..0000000 --- a/src/data/speakers/es/diego.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: 'Diego Russo' -order: 1 -photo: '/speakers/diego.jpg' -links: - - type: 'github' - url: 'https://github.com/diegorusso' - - type: 'linkedin' - url: 'https://www.linkedin.com/in/diegor/' - - type: 'bluesky' - url: 'https://bsky.app/profile/diegor.it' - - type: 'twitter' - url: 'https://x.com/diegor' - - type: 'instagram' - url: 'https://www.instagram.com/diegor.it' -description: | - Diego Russo es core developer de CPython e ingeniero jefe de software en el equipo de Runtimes de Arm, con sede en Cambridge (Reino Unido). - Lleva utilizando Python desde 2006 y contribuyendo a CPython desde 2023, centrándose en el rendimiento del intérprete, el trabajo relacionado con JIT, la infraestructura de integración continua y en garantizar que CPython y su ecosistema funcionen de forma fiable y eficiente en las plataformas Arm. - Su trabajo se sitúa en la intersección entre el tiempo de ejecución, la ingeniería de rendimiento y la colaboración de código abierto a gran escala. - Diego es también organizador de EuroPython y dirige el Arm Python Guild, una comunidad interna de más de 1.400 desarrolladores de Python que trabajan en toda la empresa. ---- diff --git a/src/types/jobs.ts b/src/types/jobs.ts new file mode 100644 index 0000000..88f8fd3 --- /dev/null +++ b/src/types/jobs.ts @@ -0,0 +1,16 @@ +import type { TLocale } from './locale' + +export type TJobTier = 'platinum' | 'gold' | 'silver' | 'bronze' + +export interface IJob { + title: string + company: string + type: string + skills?: string[] + salary?: string + apply_url: string + tier?: TJobTier + draft?: boolean + location: Record + description: Record +} diff --git a/src/types/locale.ts b/src/types/locale.ts new file mode 100644 index 0000000..10ca1db --- /dev/null +++ b/src/types/locale.ts @@ -0,0 +1 @@ +export type TLocale = 'ca' | 'es' | 'en' diff --git a/src/types/speakers.ts b/src/types/speakers.ts index f488ed4..9b6b515 100644 --- a/src/types/speakers.ts +++ b/src/types/speakers.ts @@ -5,10 +5,12 @@ export interface ISpeakerLink { url: string } +import type { TLocale } from './locale' + export interface ISpeaker { name: string order: number photo: string links: ISpeakerLink[] - description: string + descriptions: Record } From 646dcbd05172afb0b098540be24dadcb8a96d23e Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Wed, 24 Jun 2026 20:37:30 +0200 Subject: [PATCH 02/10] feat(speakers): add Mia and support 6 new social platforms Add mia.md as the second plenary speaker with 8 social links. Extend the icon system to support the new link types she uses: youtube, spotify, applepodcasts, rss. Also fix the silent mismatch in TSpeakerLinkType and SocialIconName that already omitted bluesky and twitter (used in diego.md and rendered through duck-typing without an aria-label fallback). - src/types/speakers.ts: TSpeakerLinkType grows from 4 to 10 - src/lib/icons/types.ts: SocialIconName grows to match - src/lib/icons/mappings/social.ts: 4 new mappings - youtube -> Youtube + play emoji fallback - spotify -> Headphones (no Lucide native) + headphones emoji - applepodcasts -> Podcast (no Lucide native) + mic emoji - rss -> Rss + antenna emoji - src/i18n/home.ts: 6 new aria_* keys per language (es, en, ca) - src/components/home/SpeakerCard.astro: ariaForLink switch cast extended - src/components/home/SpeakerCard.astro: social