Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
67 changes: 67 additions & 0 deletions content/blog/schedule-available.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
title: "Schedule for PyCon Ireland 2026"
date: 2026-10-20
description: "The sessions, speakers, and workshops for PyCon Ireland 2026 are now available. Buy a ticket and join us in Dublin on 21 November."
draft: false
---

We are delighted to announce the [schedule](/grid/) for PyCon Ireland 2026,
to be held at [Chartered Accountants House](/venue/) in Dublin on Saturday 21 November.
You can choose from
more than thirty talks across three tracks,
at least four workshops,
and two panels,
as well as keynotes and lightning talks,
given by dozens of [speakers](/speakers/).

We'll have lots of [sessions](/schedule/) on **AI** and Machine Learning, including
- agentic AI, coding agents, multi-agent workflows, and agent evaluation
- Bayesian modeling
- benchmarking ML models
- data architecture for AI
- forecasting
- managing parallel pipelines
- MCP servers and knowledge graphs
- ML monitoring
- mutation testing
- neural networks
- reliable machine learning
- searching with agents
- teaching robots
- tensor regression
- workflows

But it's not just AI.
There will also be [sessions](/schedule/) on
- asynchronous I/O
- learning in public
- natural language processing
- Python packaging
- quantum programming
- route optimisation
- scientific computing
- secure coding
- software archaeology
- supply chain security
- testing
- vector search
- web scraping

We had more than 170 submissions that needed to be evaluated and arranged.
We thank everyone who took the time to make a submission.
We had difficult choices to make when drawing up the schedule.

## Tickets

If you've been waiting for the schedule to appear before buying your ticket, wait no more!
Tickets are [being sold now](/#tickets).
The *General* ticket costs €59,
the *Student* ticket is only €35,
and the *Corporate* ticket is €159.
With these all-inclusive tickets,
as well as access to all the sessions and networking with the speakers and other attendees,
you get a light breakfast,
a sandwich lunch, and morning and afternoon refreshment breaks.

We do expect to make some **further additions** to the [schedule](/grid/),
so check regularly for updates.
4 changes: 4 additions & 0 deletions content/grid/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: "Schedule Grid"
description: "View the full PyCon Ireland 2026 schedule: keynotes, talks, workshops, and lightning sessions across multiple tracks. Chartered Accountants House, Dublin on 21 November."
---
9 changes: 1 addition & 8 deletions content/schedule/_index.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
---
title: "Schedule"
description: "Browse the full PyCon Ireland 2026 schedule: keynotes, talks, workshops, and lightning sessions across multiple tracks. Venue and date to be confirmed."
build:
render: never
list: never
cascade:
build:
render: never
list: never
description: "Browse the full PyCon Ireland 2026 schedule: keynotes, talks, workshops, and lightning sessions across multiple tracks. Chartered Accountants House, Dublin on 21 November."
---
7 changes: 0 additions & 7 deletions content/speakers/_index.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
---
title: "Speakers"
description: "Meet the speakers at PyCon Ireland 2026. Industry experts, open-source contributors, and community leaders sharing their Python knowledge."
build:
render: never
list: never
cascade:
build:
render: never
list: never
---
6 changes: 4 additions & 2 deletions data/site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ about:
description: "A full day of inspiring talks from Python experts across industry, academia, and open source. Learn about the latest trends, tools, and techniques."
- title: "Workshops"
icon: "code"
disabled: true
description: "Hands-on workshops for all skill levels. Dive deep into topics from web development to machine learning with experienced instructors."
image: "/img/about/laptop-classroom.jpg"
image_webp: "/img/about/laptop-classroom.webp"
image_alt: "Man sitting at laptop in classroom"
description: "Hands-on workshops for all skill levels. Dive deep into topics from quantum programming to artificial intelligence with experienced instructors."
- title: "Networking"
icon: "users"
image: "/img/about/networking.jpg"
Expand Down
29 changes: 27 additions & 2 deletions hugo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -116,14 +116,37 @@ enableGitInfo = true
name = "Tickets"
url = "/#tickets"
weight = 10

[[menus.main]]
name = "Call for Proposals"
url = "/cfp/"
identifier = "conference"
name = "Conference"
weight = 20
[[menus.main]]
name = "Schedule Grid"
url = "/grid/"
parent = "conference"
weight = 1
[[menus.main]]
name = "Schedule List"
url = "/schedule/"
parent = "conference"
weight = 2
[[menus.main]]
name = "Speakers"
url = "/speakers/"
parent = "conference"
weight = 3

# [[menus.main]]
# name = "Call for Proposals"
# url = "/cfp/"
# weight = 30

# [[menus.main]]
# name = "Sponsors"
# url = "/sponsors/"
# weight = 40

[[menus.main]]
identifier = "venue"
name = "Venue"
Expand All @@ -140,6 +163,7 @@ enableGitInfo = true
url = "/dublin/"
parent = "venue"
weight = 2

[[menus.main]]
identifier = "community"
name = "Community"
Expand All @@ -156,6 +180,7 @@ enableGitInfo = true
url = "https://python.ie"
parent = "community"
weight = 2

[[menus.main]]
name = "Blog"
url = "/blog/"
Expand Down
8 changes: 8 additions & 0 deletions layouts/grid/list.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{{ define "main" }}
{{/* Structured Data for Schedule */}}
{{ partial "structured-data-schedule.html" . }}

<section class="relative min-h-screen flex items-center justify-center overflow-hidden py-24">
<script type="text/javascript" src="https://sessionize.com/api/v2/gcf50ep3/view/GridSmart"></script>
</section>
{{ end }}
4 changes: 2 additions & 2 deletions layouts/partials/hero.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,9 @@
Learn More
</a>
{{ else if eq .Site.Params.cfpStatus "finished" }}
<a href="/cfp/" class="inline-flex items-center gap-2 bg-white/10 border border-white/20 text-white px-8 py-4 rounded-xl text-lg font-semibold hover:bg-white/15 transition-colors">
<a href="/grid/" class="inline-flex items-center gap-2 bg-white/10 border border-white/20 text-white px-8 py-4 rounded-xl text-lg font-semibold hover:bg-white/15 transition-colors">
<span class="w-2 h-2 rounded-full bg-green-400"></span>
CFP Finished
Schedule
</a>
<a href="#about" class="border border-white/50 text-white px-8 py-4 rounded-xl text-lg font-semibold hover:bg-white/10 transition-colors">
Learn More
Expand Down
92 changes: 3 additions & 89 deletions layouts/schedule/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,93 +2,7 @@
{{/* Structured Data for Schedule */}}
{{ partial "structured-data-schedule.html" . }}

<div class="pt-24">
{{/* Header */}}
<section class="py-16 text-center">
<div class="max-w-4xl mx-auto px-4">
<h1 class="text-4xl sm:text-5xl font-extrabold text-text-heading mb-4">{{ .Title }}</h1>
<p class="text-text-secondary text-lg max-w-2xl mx-auto">{{ .Description }}</p>
</div>
</section>

<div class="section-divider max-w-7xl mx-auto"></div>

{{/* Schedule grid */}}
<section class="py-16">
<div class="max-w-5xl mx-auto px-4 sm:px-6 lg:px-8">
{{ range .Site.Data.schedule.days }}
<div class="mb-16 last:mb-0">
<h2 class="text-2xl font-bold text-text-heading mb-8 text-center">{{ .name }}</h2>

<div class="space-y-3">
{{ range .slots }}
{{ if eq .type "break" }}
{{/* Break slot */}}
<div class="bg-bg-secondary rounded-xl px-6 py-4 flex items-center gap-4 border border-white/5">
<span class="text-py-yellow font-mono font-semibold text-sm w-14 shrink-0">{{ .time }}</span>
<span class="text-text-secondary text-sm">{{ .title }}</span>
<span class="text-text-secondary/50 text-xs ml-auto">{{ .duration }} min</span>
</div>

{{ else if eq .type "session" }}
{{/* Session slot */}}
<div class="bg-bg-card rounded-xl px-6 py-5 border border-white/5">
<div class="flex items-start gap-4">
<span class="text-py-blue-light font-mono font-semibold text-sm w-14 shrink-0 pt-0.5">{{ .time }}</span>
<div class="flex-1">
{{ if eq (len .session_ids) 1 }}
{{/* Single track session */}}
{{ $sid := index .session_ids 0 }}
{{ range where $.Site.Data.sessions "id" $sid }}
<div>
<div class="flex items-center gap-2 mb-1">
{{ if eq .type "keynote" }}
<span class="inline-block bg-py-yellow/10 text-py-yellow text-xs font-semibold px-2 py-0.5 rounded-full uppercase">Keynote</span>
{{ else if eq .type "lightning" }}
<span class="inline-block bg-py-blue/20 text-py-blue-light text-xs font-semibold px-2 py-0.5 rounded-full uppercase">Lightning</span>
{{ else if eq .type "ceremony" }}
<span class="inline-block bg-py-yellow/10 text-py-yellow text-xs font-semibold px-2 py-0.5 rounded-full uppercase">{{ .type }}</span>
{{ end }}
</div>
<h3 class="text-text-heading font-semibold mb-1">{{ .title }}</h3>
{{ range .speaker_ids }}
{{ $spkId := . }}
{{ range where $.Site.Data.speakers "id" $spkId }}
<p class="text-py-blue-light text-sm">{{ .name }}</p>
{{ end }}
{{ end }}
</div>
{{ end }}

{{ else }}
{{/* Multi-track session */}}
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
{{ range .session_ids }}
{{ $sid := . }}
{{ range where $.Site.Data.sessions "id" $sid }}
<div class="bg-bg-primary/50 rounded-lg p-4">
<span class="inline-block text-text-secondary/50 text-xs uppercase tracking-wider mb-1">{{ .track }}</span>
<h3 class="text-text-heading font-semibold text-sm mb-1">{{ .title }}</h3>
{{ range .speaker_ids }}
{{ $spkId := . }}
{{ range where $.Site.Data.speakers "id" $spkId }}
<p class="text-py-blue-light text-xs">{{ .name }}</p>
{{ end }}
{{ end }}
</div>
{{ end }}
{{ end }}
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}
{{ end }}
</div>
</div>
{{ end }}
</div>
</section>
</div>
<section class="relative min-h-screen flex items-center justify-center overflow-hidden py-20">
<script type="text/javascript" src="https://sessionize.com/api/v2/gcf50ep3/view/Sessions"></script>
</section>
{{ end }}
44 changes: 3 additions & 41 deletions layouts/speakers/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,7 @@
{{/* Structured Data for Speakers */}}
{{ partial "structured-data-speakers.html" . }}

<div class="pt-24">
{{/* Header */}}
<section class="py-16 text-center">
<div class="max-w-4xl mx-auto px-4">
<h1 class="text-4xl sm:text-5xl font-extrabold text-text-heading mb-4">{{ .Title }}</h1>
<p class="text-text-secondary text-lg max-w-2xl mx-auto">{{ .Description }}</p>
</div>
</section>

<div class="section-divider max-w-7xl mx-auto"></div>

{{/* Keynotes */}}
{{ $keynotes := where .Site.Data.speakers "keynote" true }}
{{ if $keynotes }}
<section class="py-16">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-2xl font-bold text-text-heading mb-8 text-center">Keynote Speakers</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 max-w-4xl mx-auto">
{{ range $keynotes }}
{{ partial "speaker-card.html" (dict "speaker" . "featured" true) }}
{{ end }}
</div>
</div>
</section>
{{ end }}

{{/* All speakers */}}
{{ $regular := where .Site.Data.speakers "keynote" false }}
{{ if $regular }}
<section class="py-16">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-2xl font-bold text-text-heading mb-8 text-center">Speakers</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
{{ range $regular }}
{{ partial "speaker-card.html" (dict "speaker" . "featured" false) }}
{{ end }}
</div>
</div>
</section>
{{ end }}
</div>
<section class="relative min-h-screen flex items-center justify-center overflow-hidden py-20">
<script type="text/javascript" src="https://sessionize.com/api/v2/gcf50ep3/view/Speakers"></script>
</section>
{{ end }}
2 changes: 1 addition & 1 deletion static/_headers
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' use.typekit.net p.typekit.net js.tito.io; style-src 'self' 'unsafe-inline' fonts.googleapis.com use.typekit.net p.typekit.net js.tito.io; font-src 'self' fonts.gstatic.com use.typekit.net p.typekit.net; img-src 'self' data: https:; connect-src 'self' fonts.googleapis.com fonts.gstatic.com use.typekit.net p.typekit.net images.unsplash.com js.tito.io checkout.tito.io; frame-src https://www.openstreetmap.org https://app.netlify.com js.tito.io checkout.tito.io; frame-ancestors 'none'
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' use.typekit.net p.typekit.net js.tito.io sessionize.com; style-src 'self' 'unsafe-inline' fonts.googleapis.com use.typekit.net p.typekit.net js.tito.io sessionize.com sessionize.blob.core.windows.net; font-src 'self' fonts.gstatic.com use.typekit.net p.typekit.net; img-src 'self' data: https:; connect-src 'self' fonts.googleapis.com fonts.gstatic.com use.typekit.net p.typekit.net images.unsplash.com js.tito.io checkout.tito.io sessionize.com; frame-src https://www.openstreetmap.org https://app.netlify.com js.tito.io checkout.tito.io; frame-ancestors 'none'
Binary file added static/img/about/laptop-classroom.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/img/about/laptop-classroom.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading