+
+
diff --git a/src/content.config.ts b/src/content.config.ts
index e3911cc75..5ef78fe64 100644
--- a/src/content.config.ts
+++ b/src/content.config.ts
@@ -15,6 +15,10 @@ const pages = defineCollection({
subtitle: z.string(),
toc: z.boolean().optional().default(true),
full: z.boolean().optional().default(false),
+ box1: z.string().optional(),
+ box2: z.string().optional(),
+ box3: z.string().optional(),
+ box4: z.string().optional(),
}),
});
diff --git a/src/content/pages/posters.md b/src/content/pages/posters.md
new file mode 100644
index 000000000..4ec068ba4
--- /dev/null
+++ b/src/content/pages/posters.md
@@ -0,0 +1,19 @@
+---
+title: Posters
+subtitle:
+ A visual showcase of projects, research, and ideas — presented in person
+ during a dedicated poster session
+box1:
+ "Visual format — Posters present a project, library, or research finding as a
+ visual display. Think of it as a paper you can walk up to and discuss."
+box2:
+ "One-on-one conversations — Unlike talks, poster sessions let you have a
+ direct conversation with the author. Ask questions, give feedback, and dive as
+ deep as you like."
+box3:
+ "Great for first-time speakers — Posters are an excellent way to share your
+ work without the pressure of a stage presentation. Many speakers start here."
+box4:
+ "Dedicated session time — A block of time is reserved in the schedule for
+ poster viewing, so you won't have to choose between posters and talks."
+---
diff --git a/src/content/pages/talks.md b/src/content/pages/talks.md
new file mode 100644
index 000000000..ef8c637e8
--- /dev/null
+++ b/src/content/pages/talks.md
@@ -0,0 +1,18 @@
+---
+title: Talks
+subtitle:
+ The heart of EuroPython — three days of talks across five parallel tracks
+box1:
+ "30-minute talks — Our most common format. Speakers have 30 minutes including
+ Q&A to share a focused idea, project, or lesson learned."
+box2:
+ "45-minute deep dives — Selected talks get an extended slot for more complex
+ topics that benefit from extra depth and live demonstrations."
+box3:
+ "For every level — From beginner-friendly introductions to advanced internals
+ — each talk is tagged by experience level so you can plan your day."
+box4:
+ "Community-selected — Talks are chosen through an open call for proposals and
+ community voting, ensuring the programme reflects what Pythonistas actually
+ want to learn."
+---
diff --git a/src/content/pages/tutorials.md b/src/content/pages/tutorials.md
new file mode 100644
index 000000000..cd3d9e337
--- /dev/null
+++ b/src/content/pages/tutorials.md
@@ -0,0 +1,18 @@
+---
+title: Tutorials
+subtitle: Full-day, hands-on workshops led by domain experts
+box1:
+ "3-hour or 6-hour sessions — Tutorials run for half a day or a full day. Each
+ one is a self-contained workshop with exercises, examples, and hands-on
+ practice."
+box2:
+ "Small groups, personal attention — Unlike talks, tutorials are capped in
+ size. You get direct access to the instructor and can ask questions as you go."
+box3:
+ "Wide range of topics — From Python basics and web frameworks to data science
+ pipelines, async programming, and testing strategies — there is a tutorial for
+ every interest."
+box4:
+ "Separate ticket required — Tutorial participation requires a separate
+ tutorial ticket in addition to your conference pass."
+---
diff --git a/src/content/programme/talks/header.md b/src/content/programme/talks/header.md
index b4ab44eb9..a615288e2 100644
--- a/src/content/programme/talks/header.md
+++ b/src/content/programme/talks/header.md
@@ -8,7 +8,7 @@ meta:
- text: "5 parallel tracks"
cta:
text: "Browse all talks"
- url: "/talks"
+ url: "/schedule/talks"
advantages:
- title: "30-minute talks"
description:
diff --git a/src/content/programme/tutorials/header.md b/src/content/programme/tutorials/header.md
index d056b670f..7da092e84 100644
--- a/src/content/programme/tutorials/header.md
+++ b/src/content/programme/tutorials/header.md
@@ -8,7 +8,7 @@ meta:
- text: "Small-group format"
cta:
text: "Browse all tutorials"
- url: "/tutorials"
+ url: "/schedule/tutorials"
advantages:
- title: "3-hour sessions"
description:
diff --git a/src/data/nav.ts b/src/data/nav.ts
index 9be9f3f66..4bc9ed189 100644
--- a/src/data/nav.ts
+++ b/src/data/nav.ts
@@ -33,8 +33,9 @@ const L = {
// Programme
overview: { label: "Overview", url: "/overview" },
schedule: { label: "Schedule", url: "/schedule" },
- tutorials: { label: "Tutorials", url: "/schedule/tutorials" },
- talks: { label: "Talks", url: "/schedule/talks" },
+ keynotes: { label: "Keynotes", url: "/#keynoters" },
+ tutorials: { label: "Tutorials Schedule", url: "/schedule/tutorials" },
+ talks: { label: "Talks Schedule", url: "/schedule/talks" },
posters: { label: "Posters", url: "/posters" },
tracks: { label: "Tracks", url: "/tracks" },
speakers: { label: "Speakers", url: "/speakers" },
@@ -142,7 +143,6 @@ export const NAV_MENUS: NavMenu[] = [
label: "Talks & Schedule",
items: [
L.overview,
- L.schedule,
L.tutorials,
L.talks,
L.posters,
@@ -219,7 +219,15 @@ export const NAV_MENUS: NavMenu[] = [
label: "Community",
url: "/about",
sections: [
- { items: [L.about, L.eps, L.communityPartners, L.mediaPartners] },
+ {
+ items: [
+ L.about,
+ L.eps,
+ L.communityPartners,
+ L.mediaPartners,
+ L.yearsOfEp,
+ ],
+ },
],
},
@@ -268,7 +276,6 @@ export const FOOTER_COLUMNS: FooterColumn[] = [
{
title: "Programme",
items: [
- L.schedule,
L.talks,
L.tutorials,
L.posters,
diff --git a/src/layouts/ScheduleLayout.astro b/src/layouts/ScheduleLayout.astro
index 522f4e103..1da89b07c 100644
--- a/src/layouts/ScheduleLayout.astro
+++ b/src/layouts/ScheduleLayout.astro
@@ -1,299 +1,382 @@
---
import Layout from "@layouts/Layout.astro";
import Section from "@ui/Section.astro";
-import { slugify } from "@utils/content";
+import { slugify } from '@utils/content';
export interface Props {
title?: string;
description: string;
headline: string;
+ hideNotices?: string[];
}
-const { title, description, headline } = Astro.props;
----
+const { title, description, headline, hideNotices = [] } = Astro.props;
-
+// Hide the notice grid on the schedule overview page, show on sub-pages
+const showNoticeGrid = !Astro.url.pathname.match(/^\/schedule\/?$/);
+---
+
-
-
-
-
-
+
+
+
+
+
- 💚 Mark talks as favorites by opening their details and tapping the ❤️
- icon. Your selections are saved locally and will only be visible on
- this device.
-