Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "2026.es.pycon.org",
"version": "1.0.0",
"version": "1.0.1",
"description": "",
"main": "index.js",
"scripts": {
Expand Down
107 changes: 107 additions & 0 deletions src/components/home/SectionCTAs.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
---
import { texts } from '@/i18n/home'
import Button from '../Button.astro'

interface Props {
lang: string
}

const { lang } = Astro.props
const t = texts[lang as keyof typeof texts]

const ctas = [
{
emoji: '🗣️',
title: t['cfp.title'],
description: t['cfp.description'],
buttonText: t['cfp.button'],
href: 'https://pretalx.com/pycones-2026/cfp',
variant: 'primary' as const,
accent: 'orange',
external: true,
},
{
emoji: '🔍',
title: t['cta.reviewers.title'],
description: t['cta.reviewers.description'],
buttonText: t['cta.reviewers.button'],
href: 'https://docs.google.com/forms/d/e/1FAIpQLScuG-J1A4xNmC249RkK2VCZDCjxw0uDE7hpL3A5Vj8yu3Ls5g/viewform',
variant: 'outline' as const,
accent: 'red',
external: true,
},
{
emoji: '🤝',
title: t['cta.sponsors.title'],
description: t['cta.sponsors.description'],
buttonText: t['cta.sponsors.button'],
href: `/${lang}/sponsors`,
variant: 'secondary' as const,
accent: 'amber',
external: false,
},

]
---

<section aria-labelledby="ctas-heading" class="flex flex-col gap-8">
<h2 id="ctas-heading" class="sr-only">Llamadas a la participación</h2>

<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
{
ctas.map((cta) => (
<article
class:list={[
'group relative flex flex-col gap-6 p-8 rounded-2xl border transition-all duration-300 shadow-xl',
'bg-white/5 backdrop-blur-md hover:bg-white/10',
cta.accent === 'orange' && 'border-white/10 hover:border-pycon-orange/60',
cta.accent === 'amber' && 'border-white/10 hover:border-amber-400/60',
cta.accent === 'red' && 'border-white/10 hover:border-pycon-red-50/60',
]}
>
{/* Subtle glow on hover */}
<div
class:list={[
'absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none',
cta.accent === 'orange' && 'shadow-[inset_0_0_60px_rgba(234,88,12,0.06)]',
cta.accent === 'amber' && 'shadow-[inset_0_0_60px_rgba(251,191,36,0.06)]',
cta.accent === 'red' && 'shadow-[inset_0_0_60px_rgba(239,68,68,0.06)]',
]}
aria-hidden="true"
/>

<div class="flex flex-col gap-3 flex-1">
<div class="flex items-center gap-3">
<span class="text-3xl" aria-hidden="true">{cta.emoji}</span>
<h3
class:list={[
'text-xl font-bold leading-snug',
cta.accent === 'orange' && 'text-pycon-orange',
cta.accent === 'amber' && 'text-amber-400',
cta.accent === 'red' && 'text-pycon-red-50',
]}
>
{cta.title}
</h3>
</div>

<p class="text-pycon-gray-25 leading-relaxed text-sm flex-1">{cta.description}</p>
</div>

<div class="mt-auto">
<Button
variant={cta.variant}
size="md"
href={cta.href}
target={cta.external ? '_blank' : undefined}
rel={cta.external ? 'noopener noreferrer' : undefined}
class="w-full"
>
{cta.buttonText}
</Button>
</div>
</article>
))
}
</div>
</section>
4 changes: 2 additions & 2 deletions src/components/index.astro
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
import Layout from '@/layouts/Layout.astro'
import SectionMain from './home/SectionMain.astro'
import SectionCallForProposals from './home/SectionCallForProposals.astro'
import SectionCTAs from './home/SectionCTAs.astro'
import SectionSponsors from './home/SectionSponsors.astro'

interface Props {
Expand All @@ -14,7 +14,7 @@ const { lang } = Astro.props
<Layout title="PyConES 2026">
<div class="flex flex-col gap-20">
<SectionMain lang={lang} />
<SectionCallForProposals lang={lang} />
<SectionCTAs lang={lang} />
<SectionSponsors lang={lang} />
</div>
</Layout>
24 changes: 24 additions & 0 deletions src/i18n/home.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ export const texts = {
'cfp.description':
'¡Ya está abierta la llamada a propuestas! Mándanos tu charla o taller antes del 3 de mayo a las 23:59h (hora peninsular). Si te estás preguntando si puedes hacer esto, la respuesta es que sí. Si tienes un tema que te interesa, ¡nos interesa!',
'cfp.button': 'Envía tu propuesta',
'cta.sponsors.title': '¡Buscamos Patrocinadores!',
'cta.sponsors.description':
'Ser patrocinador de la PyConES es una oportunidad para apoyar a la comunidad Python, conectar con talento técnico de alto nivel y ganar visibilidad en un entorno ligado al software libre y la innovación. Si formás parte o conocés a alguien de una empresa interesada en apoyar la comunidad Python, ¡ayudanos a llegar a ella!',
'cta.sponsors.button': 'Más información sobre patrocinios',
'cta.reviewers.title': 'Llamada a Revisores/as',
'cta.reviewers.description':
'Buscamos personas que nos ayuden a revisar las propuestas que recibamos. Tu experiencia y criterio son clave para garantizar la calidad del programa. Si querés colaborar con la organización y ayudar a seleccionar las mejores charlas y talleres, ¡necesitamos tu ayuda!',
'cta.reviewers.button': 'Quiero ser revisor/a',
},
en: {
'index.initializing': 'Initialising system...',
Expand All @@ -38,6 +46,14 @@ export const texts = {
'cfp.description':
"The call for proposals is now open! Send us your talk or workshop before May 3rd at 23:59 (CET). If you're wondering whether you can do this, the answer is yes. If you have a topic that interests you, it interests us!",
'cfp.button': 'Submit your proposal',
'cta.sponsors.title': 'We Are Looking for Sponsors!',
'cta.sponsors.description':
'Sponsoring PyConES is an opportunity to support the Python community, connect with high-level technical talent, and gain visibility in an environment linked to free software and innovation. If you are or know someone at a company interested in supporting the Python community, help us reach them!',
'cta.sponsors.button': 'More info about sponsorships',
'cta.reviewers.title': 'Call for Reviewers',
'cta.reviewers.description':
'We are looking for people to help us review the proposals we receive. Your experience and judgement are key to ensuring the quality of the programme. If you want to collaborate with the organisation and help select the best talks and workshops, we need your help!',
'cta.reviewers.button': 'I want to be a reviewer',
},
ca: {
'index.initializing': 'Inicialitzant sistema...',
Expand All @@ -58,5 +74,13 @@ export const texts = {
'cfp.description':
"Ja està oberta la crida a propostes! Envia'ns la teva xerrada o taller abans del 3 de maig a les 23:59h (hora peninsular). Si t'estàs preguntant si pots fer això, la resposta és que sí. Si tens un tema que t'interessa, ens interessa!",
'cfp.button': 'Envia la teva proposta',
'cta.sponsors.title': 'Busquem Patrocinadors!',
'cta.sponsors.description':
"Ser patrocinador de la PyConES és una oportunitat per donar suport a la comunitat Python, connectar amb talent tècnic d'alt nivell i guanyar visibilitat en un entorn lligat al programari lliure i la innovació. Si formes part o coneixes algú d'una empresa interessada en donar suport a la comunitat Python, ajuda'ns a arribar-hi!",
'cta.sponsors.button': 'Més informació sobre patrocinis',
'cta.reviewers.title': 'Crida a Revisors/es',
'cta.reviewers.description':
"Busquem persones que ens ajudin a revisar les propostes que rebem. La teva experiència i criteri són clau per garantir la qualitat del programa. Si vols col·laborar amb l'organització i ajudar a seleccionar les millors xerrades i tallers, necessitem la teva ajuda!",
'cta.reviewers.button': 'Vull ser revisor/a',
},
} as const
Loading