diff --git a/public/images/press/andresospina-pycon-2026.webp b/public/images/press/andresospina-pycon-2026.webp new file mode 100644 index 0000000..5756b3e Binary files /dev/null and b/public/images/press/andresospina-pycon-2026.webp differ diff --git a/public/images/press/enter-pycon-2026.webp b/public/images/press/enter-pycon-2026.webp new file mode 100644 index 0000000..741bd0f Binary files /dev/null and b/public/images/press/enter-pycon-2026.webp differ diff --git a/public/images/press/guapacho-pycon-2026.webp b/public/images/press/guapacho-pycon-2026.webp new file mode 100644 index 0000000..2cfd836 Binary files /dev/null and b/public/images/press/guapacho-pycon-2026.webp differ diff --git a/public/images/speakers/andres-vasquez-restrepo.jpg b/public/images/speakers/andres-vasquez-restrepo.jpg new file mode 100644 index 0000000..c071a90 Binary files /dev/null and b/public/images/speakers/andres-vasquez-restrepo.jpg differ diff --git a/public/images/speakers/biviana-marcela-suarez-sierra.png b/public/images/speakers/biviana-marcela-suarez-sierra.png new file mode 100644 index 0000000..c43a640 Binary files /dev/null and b/public/images/speakers/biviana-marcela-suarez-sierra.png differ diff --git a/public/images/speakers/carlos-alberto-riveros-varela.jpg b/public/images/speakers/carlos-alberto-riveros-varela.jpg new file mode 100644 index 0000000..bae26b4 Binary files /dev/null and b/public/images/speakers/carlos-alberto-riveros-varela.jpg differ diff --git a/public/images/speakers/carlos-andres-osorio-alcalde.jpg b/public/images/speakers/carlos-andres-osorio-alcalde.jpg new file mode 100644 index 0000000..5feab98 Binary files /dev/null and b/public/images/speakers/carlos-andres-osorio-alcalde.jpg differ diff --git a/public/images/speakers/cesar-mateo-gonzalez-rodriguez.jpg b/public/images/speakers/cesar-mateo-gonzalez-rodriguez.jpg new file mode 100644 index 0000000..f9811a9 Binary files /dev/null and b/public/images/speakers/cesar-mateo-gonzalez-rodriguez.jpg differ diff --git a/public/images/speakers/daniel-galvis.jpg b/public/images/speakers/daniel-galvis.jpg new file mode 100644 index 0000000..49fe96c Binary files /dev/null and b/public/images/speakers/daniel-galvis.jpg differ diff --git a/public/images/speakers/daniel-sabogal.jpg b/public/images/speakers/daniel-sabogal.jpg new file mode 100644 index 0000000..083ddd3 Binary files /dev/null and b/public/images/speakers/daniel-sabogal.jpg differ diff --git a/public/images/speakers/dario-jesus-guzman-duran.png b/public/images/speakers/dario-jesus-guzman-duran.png new file mode 100644 index 0000000..2771a1b Binary files /dev/null and b/public/images/speakers/dario-jesus-guzman-duran.png differ diff --git a/public/images/speakers/david-felipe-vanegas-ramirez.jpg b/public/images/speakers/david-felipe-vanegas-ramirez.jpg new file mode 100644 index 0000000..1376df1 Binary files /dev/null and b/public/images/speakers/david-felipe-vanegas-ramirez.jpg differ diff --git a/public/images/speakers/dora-cecilia-alzate-gallo.jpg b/public/images/speakers/dora-cecilia-alzate-gallo.jpg new file mode 100644 index 0000000..a125def Binary files /dev/null and b/public/images/speakers/dora-cecilia-alzate-gallo.jpg differ diff --git a/public/images/speakers/emanuel-zapata-querubin.png b/public/images/speakers/emanuel-zapata-querubin.png new file mode 100644 index 0000000..33631fb Binary files /dev/null and b/public/images/speakers/emanuel-zapata-querubin.png differ diff --git a/public/images/speakers/esneider-bravo-benitez.jpg b/public/images/speakers/esneider-bravo-benitez.jpg new file mode 100644 index 0000000..f471d62 Binary files /dev/null and b/public/images/speakers/esneider-bravo-benitez.jpg differ diff --git a/public/images/speakers/felipe-sanchez.jpg b/public/images/speakers/felipe-sanchez.jpg new file mode 100644 index 0000000..49481ca Binary files /dev/null and b/public/images/speakers/felipe-sanchez.jpg differ diff --git a/public/images/speakers/felix-mino.png b/public/images/speakers/felix-mino.png new file mode 100644 index 0000000..86be4b1 Binary files /dev/null and b/public/images/speakers/felix-mino.png differ diff --git a/public/images/speakers/francisco-javier-moya-ortiz.jpg b/public/images/speakers/francisco-javier-moya-ortiz.jpg new file mode 100644 index 0000000..91a759b Binary files /dev/null and b/public/images/speakers/francisco-javier-moya-ortiz.jpg differ diff --git a/public/images/speakers/hazel-saenz.jpg b/public/images/speakers/hazel-saenz.jpg new file mode 100644 index 0000000..df69e10 Binary files /dev/null and b/public/images/speakers/hazel-saenz.jpg differ diff --git a/public/images/speakers/isabel-mora-2.jpg b/public/images/speakers/isabel-mora-2.jpg new file mode 100644 index 0000000..f0295bc Binary files /dev/null and b/public/images/speakers/isabel-mora-2.jpg differ diff --git a/public/images/speakers/isabel-mora.jpg b/public/images/speakers/isabel-mora.jpg new file mode 100644 index 0000000..f0295bc Binary files /dev/null and b/public/images/speakers/isabel-mora.jpg differ diff --git a/public/images/speakers/jeronimo-lopez-gomez.jpg b/public/images/speakers/jeronimo-lopez-gomez.jpg new file mode 100644 index 0000000..c8b0bd3 Binary files /dev/null and b/public/images/speakers/jeronimo-lopez-gomez.jpg differ diff --git a/public/images/speakers/jesus-alfredo-reyes-vargas.jpg b/public/images/speakers/jesus-alfredo-reyes-vargas.jpg new file mode 100644 index 0000000..1ed66c3 Binary files /dev/null and b/public/images/speakers/jesus-alfredo-reyes-vargas.jpg differ diff --git a/public/images/speakers/johnny-montoya.jpg b/public/images/speakers/johnny-montoya.jpg new file mode 100644 index 0000000..a777fe7 Binary files /dev/null and b/public/images/speakers/johnny-montoya.jpg differ diff --git a/public/images/speakers/jonathan-vallejo-munoz.jpg b/public/images/speakers/jonathan-vallejo-munoz.jpg new file mode 100644 index 0000000..097ae42 Binary files /dev/null and b/public/images/speakers/jonathan-vallejo-munoz.jpg differ diff --git a/public/images/speakers/jose-arturo-osorio-londono.jpg b/public/images/speakers/jose-arturo-osorio-londono.jpg new file mode 100644 index 0000000..54b94cb Binary files /dev/null and b/public/images/speakers/jose-arturo-osorio-londono.jpg differ diff --git a/public/images/speakers/jose-hernan-ortiz-ocampo-2.jpg b/public/images/speakers/jose-hernan-ortiz-ocampo-2.jpg new file mode 100644 index 0000000..7395f82 Binary files /dev/null and b/public/images/speakers/jose-hernan-ortiz-ocampo-2.jpg differ diff --git a/public/images/speakers/jose-hernan-ortiz-ocampo.jpg b/public/images/speakers/jose-hernan-ortiz-ocampo.jpg new file mode 100644 index 0000000..7395f82 Binary files /dev/null and b/public/images/speakers/jose-hernan-ortiz-ocampo.jpg differ diff --git a/public/images/speakers/juan-guillermo-gomez.jpg b/public/images/speakers/juan-guillermo-gomez.jpg new file mode 100644 index 0000000..e638dff Binary files /dev/null and b/public/images/speakers/juan-guillermo-gomez.jpg differ diff --git a/public/images/speakers/juan-jose-barrientos-salazar.jpg b/public/images/speakers/juan-jose-barrientos-salazar.jpg new file mode 100644 index 0000000..0dc4532 Binary files /dev/null and b/public/images/speakers/juan-jose-barrientos-salazar.jpg differ diff --git a/public/images/speakers/marcela-hoyos-cano.jpg b/public/images/speakers/marcela-hoyos-cano.jpg new file mode 100644 index 0000000..6a8600b Binary files /dev/null and b/public/images/speakers/marcela-hoyos-cano.jpg differ diff --git a/public/images/speakers/maria-fernanda-rojas-castro.png b/public/images/speakers/maria-fernanda-rojas-castro.png new file mode 100644 index 0000000..e54ca1b Binary files /dev/null and b/public/images/speakers/maria-fernanda-rojas-castro.png differ diff --git a/public/images/speakers/maris-botero.png b/public/images/speakers/maris-botero.png new file mode 100644 index 0000000..92dee05 Binary files /dev/null and b/public/images/speakers/maris-botero.png differ diff --git a/public/images/speakers/mauricio-repetto-ferrero.jpg b/public/images/speakers/mauricio-repetto-ferrero.jpg new file mode 100644 index 0000000..2605f3c Binary files /dev/null and b/public/images/speakers/mauricio-repetto-ferrero.jpg differ diff --git a/public/images/speakers/natalia-echeverri-duran.jpg b/public/images/speakers/natalia-echeverri-duran.jpg new file mode 100644 index 0000000..f7b3396 Binary files /dev/null and b/public/images/speakers/natalia-echeverri-duran.jpg differ diff --git a/public/images/speakers/nicolas-roldan-fajardo.jpg b/public/images/speakers/nicolas-roldan-fajardo.jpg new file mode 100644 index 0000000..0f1fdd7 Binary files /dev/null and b/public/images/speakers/nicolas-roldan-fajardo.jpg differ diff --git a/public/images/speakers/raul-rodriguez.png b/public/images/speakers/raul-rodriguez.png new file mode 100644 index 0000000..dda51cb Binary files /dev/null and b/public/images/speakers/raul-rodriguez.png differ diff --git a/public/images/speakers/roberto-bedoya-garcia.jpg b/public/images/speakers/roberto-bedoya-garcia.jpg new file mode 100644 index 0000000..cca0117 Binary files /dev/null and b/public/images/speakers/roberto-bedoya-garcia.jpg differ diff --git a/public/images/speakers/sankalp-gilda.jpg b/public/images/speakers/sankalp-gilda.jpg new file mode 100644 index 0000000..52107c4 Binary files /dev/null and b/public/images/speakers/sankalp-gilda.jpg differ diff --git a/public/images/speakers/santiago-suarez-sampayo.png b/public/images/speakers/santiago-suarez-sampayo.png new file mode 100644 index 0000000..6004a7f Binary files /dev/null and b/public/images/speakers/santiago-suarez-sampayo.png differ diff --git a/public/images/speakers/sebastian-gomez-ahumada.jpg b/public/images/speakers/sebastian-gomez-ahumada.jpg new file mode 100644 index 0000000..e85daf5 Binary files /dev/null and b/public/images/speakers/sebastian-gomez-ahumada.jpg differ diff --git a/public/images/sponsors/enter-co.svg b/public/images/sponsors/enter-co.svg new file mode 100644 index 0000000..c40ef3b --- /dev/null +++ b/public/images/sponsors/enter-co.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + diff --git a/public/images/sponsors/guapacho.svg b/public/images/sponsors/guapacho.svg new file mode 100644 index 0000000..4b946c7 --- /dev/null +++ b/public/images/sponsors/guapacho.svg @@ -0,0 +1,750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/(pages)/keynotes/[slug]/page.tsx b/src/app/(pages)/keynotes/[slug]/page.tsx new file mode 100644 index 0000000..7decbad --- /dev/null +++ b/src/app/(pages)/keynotes/[slug]/page.tsx @@ -0,0 +1,106 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import CTASection from "@/components/blocks/cta/cta"; +import KeynoteDetail from "@/components/blocks/keynotes/keynote-detail"; +import SectionSeparator from "@/components/section-separator"; +import { + buildKeynoteJsonLd, + buildKeynotePageMetadata, + getKeynoteShareImageUrl, +} from "@/lib/keynote-seo"; +import { getAllKeynoteSlugs, getLocalizedKeynote } from "@/lib/keynotes"; +import { STATIC_PRERENDER_LOCALE } from "@/lib/site-locale-constants"; +import { siteMessages } from "@/lib/site-messages"; +import { getSiteUrl, webPageJsonLd, websiteJsonLd } from "@/lib/site-seo"; + +export async function generateStaticParams() { + return getAllKeynoteSlugs().map((slug) => ({ slug })); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string }>; +}): Promise { + const { slug } = await params; + + return buildKeynotePageMetadata(slug, STATIC_PRERENDER_LOCALE); +} + +export const dynamicParams = false; + +const KeynoteSlugPage = async ({ + params, +}: { + params: Promise<{ slug: string }>; +}) => { + const { slug } = await params; + + const keynote = getLocalizedKeynote(slug, STATIC_PRERENDER_LOCALE); + + if (!keynote) { + notFound(); + } + + const messages = siteMessages[STATIC_PRERENDER_LOCALE]; + const keynoteUrl = `${getSiteUrl()}/keynotes/${slug}`; + const shareImageUrl = getKeynoteShareImageUrl(slug); + + const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + websiteJsonLd(), + webPageJsonLd({ + name: `${keynote.name} — PyCon Colombia 2026 Keynote`, + description: keynote.description, + url: keynoteUrl, + image: shareImageUrl, + }), + buildKeynoteJsonLd(keynote, STATIC_PRERENDER_LOCALE, keynoteUrl), + { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + itemListElement: [ + { + "@type": "ListItem", + position: 1, + name: messages.nav.home, + item: `${getSiteUrl()}/`, + }, + { + "@type": "ListItem", + position: 2, + name: messages.nav.keynotes, + item: `${getSiteUrl()}/#benefits`, + }, + { + "@type": "ListItem", + position: 3, + name: keynote.name, + item: keynoteUrl, + }, + ], + }, + ], + }; + + return ( + <> + + + + + + +