+
{[...featuredSpeakers, ...featuredSpeakers].map((speaker, _index) => (
diff --git a/src/components/sponsors/sponsor-tier.astro b/src/components/sponsors/sponsor-tier.astro
index 9f8b31fde..3a3c3d1f2 100644
--- a/src/components/sponsors/sponsor-tier.astro
+++ b/src/components/sponsors/sponsor-tier.astro
@@ -29,15 +29,16 @@ const { tier, top } = Astro.props;
diff --git a/src/components/sponsors/sponsors.astro b/src/components/sponsors/sponsors.astro
index 3c77ebdfe..10a72b0d1 100644
--- a/src/components/sponsors/sponsors.astro
+++ b/src/components/sponsors/sponsors.astro
@@ -78,6 +78,7 @@ const topTier = sponsorTiers.find((tier) => tier.name === "Keystone");
{sponsorTiers.length > 0 && }
+
+
{isAnchor && (
{Title}
@@ -24,7 +24,7 @@ const isCenter = center ? "text-center" : "";
h4,
h5,
h6 {
- font-weight: bold;
+ font-weight: 500;
font-family: var(--font-display);
line-height: 1.25;
@@ -84,4 +84,8 @@ const isCenter = center ? "text-center" : "";
--min-fs: 1;
--max-fs: 1.5;
}
+
+ a:hover {
+ color:var(--color-primary-hover);
+ }
diff --git a/src/content/config.ts b/src/content/config.ts
index a43d00f8d..9e9b3dee4 100644
--- a/src/content/config.ts
+++ b/src/content/config.ts
@@ -203,11 +203,14 @@ const sponsors = defineCollection({
socials: z
.object({
linkedin: z.string().url().optional().nullable(),
- twitter: z.string().url().optional().nullable(),
github: z.string().url().optional().nullable(),
- discord: z.string().url().optional().nullable(),
mastodon: z.string().url().optional().nullable(),
bluesky: z.string().url().optional().nullable(),
+ twitter: z.string().url().optional().nullable(),
+ instagram: z.string().url().optional().nullable(),
+ discord: z.string().url().optional().nullable(),
+ facebook: z.string().url().optional().nullable(),
+ youtube: z.string().url().optional().nullable(),
})
.optional(),
logo_padding: z.string().optional(),
diff --git a/src/content/pages/childcare.mdx b/src/content/pages/childcare.mdx
index c5d9513b7..17bb527b4 100644
--- a/src/content/pages/childcare.mdx
+++ b/src/content/pages/childcare.mdx
@@ -8,7 +8,7 @@ import childcareArea from "./images/childcare-area.jpg";
import childcareBalls from "./images/childcare-balls.jpg";
-## Childcare at EuroPython 2025
+# Childcare at EuroPython 2025
We’re committed to making EuroPython as inclusive and accessible as possible — and that includes supporting parents attending the conference.
diff --git a/src/content/pages/venue.mdx b/src/content/pages/venue.mdx
index 0dd9a545a..f0d2e8efd 100644
--- a/src/content/pages/venue.mdx
+++ b/src/content/pages/venue.mdx
@@ -8,7 +8,7 @@ import { Image } from "astro:assets";
import venueImage from "./images/prague.jpg";
import pccEntrance from "images/entrance5-pcc5.jpg";
-## Conference Venue - Prague Congress Centre
+# Conference Venue - Prague Congress Centre
[The Prague Congress Centre](https://www.praguecc.cz/en/homepage) will host
EuroPython 2025 from **July 14th to July 20th**. It’s a renowned venue, having
diff --git a/src/data/links.json b/src/data/links.json
index b28b7d932..37a78bda1 100644
--- a/src/data/links.json
+++ b/src/data/links.json
@@ -4,9 +4,17 @@
"name": "Programme",
"items": [
{
- "name": "Programme & Events Overview",
+ "name": "Overview",
"path": "/overview"
},
+ {
+ "name": "Talks Schedule",
+ "path": "/schedule/talks"
+ },
+ {
+ "name": "Tutorials Schedule",
+ "path": "/schedule/tutorials"
+ },
{
"name": "List of Sessions",
"path": "/sessions"
@@ -19,29 +27,9 @@
"name": "Tracks",
"path": "/tracks"
},
- {
- "name": "Selection Process",
- "path": "/selection"
- },
- {
- "name": "Community Voting",
- "path": "/voting"
- },
{
"name": "Speaker Mentorship",
"path": "/mentorship"
- },
- {
- "name": "C API Summit",
- "path": "/c-api-summit"
- },
- {
- "name": "WebAssembly Summit",
- "path": "/wasm-summit"
- },
- {
- "name": "Rust Summit",
- "path": "/rust-summit"
}
]
},
@@ -55,24 +43,23 @@
{
"name": "Beginners' Day",
"path": "/beginners-day"
- }
- ]
- },
- {
- "name": "Schedule",
- "items": [
+ },
{
- "name": "Tutorials",
- "path": "/schedule/tutorials"
+ "name": "WASM Summit",
+ "path": "/wasm-summit"
},
{
- "name": "Talks",
- "path": "/schedule/talks"
+ "name": "C-API Summit",
+ "path": "/c-api-summit"
+ },
+ {
+ "name": "Rust Summit",
+ "path": "/rust-summit"
}
]
},
{
- "name": "Prague & Venue",
+ "name": "Venue",
"items": [
{
"name": "Prague",
@@ -101,22 +88,140 @@
"name": "Registration",
"items": [
{
- "name": "Tickets information",
+ "name": "Tickets",
"path": "/tickets"
+ },
+ {
+ "name": "Financial Aid",
+ "path": "/finaid"
+ },
+ {
+ "name": "Visa Support Letter",
+ "path": "/visa"
+ },
+ {
+ "name": "Childcare",
+ "path": "/childcare"
+ },
+ {
+ "name": "FAQ",
+ "path": "/faq"
}
]
},
{
- "name": "Info & Support",
+ "name": "Community",
+ "path": "/community-partners"
+ },
+ {
+ "name": "Jobs",
+ "path": "/jobs"
+ }
+ ],
+ "footer": [
+ {
+ "name": "Quick links",
"items": [
- {
- "name": "Code of Conduct",
- "path": "https://www.europython-society.org/coc/"
- },
{
"name": "FAQ",
"path": "/faq"
},
+ {
+ "name": "Prague",
+ "path": "/prague"
+ },
+ {
+ "name": "Schedule",
+ "path": "/schedule"
+ },
+ {
+ "name": "Jobs",
+ "path": "/jobs"
+ }
+ ]
+ },
+ {
+ "name": "Programme",
+ "items": [
+ {
+ "name": "Overview",
+ "path": "/overview"
+ },
+ {
+ "name": "Talks Schedule",
+ "path": "/schedule/talks"
+ },
+ {
+ "name": "Tutorials Schedule",
+ "path": "/schedule/tutorials"
+ },
+ {
+ "name": "List of Sessions",
+ "path": "/sessions"
+ },
+ {
+ "name": "List of Speakers",
+ "path": "/speakers"
+ },
+ {
+ "name": "Tracks",
+ "path": "/tracks"
+ },
+ {
+ "name": "Speaker Mentorship",
+ "path": "/mentorship"
+ }
+ ]
+ },
+ {
+ "name": "Events",
+ "items": [
+ {
+ "name": "Speakers' Dinner",
+ "path": "/speakers-dinner"
+ },
+ {
+ "name": "Beginners' Day",
+ "path": "/beginners-day"
+ },
+ {
+ "name": "WASM Summit",
+ "path": "/wasm-summit"
+ },
+ {
+ "name": "C-API Summit",
+ "path": "/c-api-summit"
+ },
+ {
+ "name": "Rust Summit",
+ "path": "/rust-summit"
+ },
+ {
+ "name": "Community",
+ "path": "/community-partners"
+ }
+ ]
+ },
+ {
+ "name": "Sponsorship",
+ "items": [
+ {
+ "name": "Sponsor Packages",
+ "path": "/sponsorship/sponsor"
+ },
+ {
+ "name": "Sponsor Information",
+ "path": "/sponsorship/information"
+ }
+ ]
+ },
+ {
+ "name": "Registration",
+ "items": [
+ {
+ "name": "Tickets",
+ "path": "/tickets"
+ },
{
"name": "Financial Aid",
"path": "/finaid"
@@ -132,15 +237,20 @@
]
},
{
- "name": "Jobs",
- "path": "/jobs"
+ "name": "Sites",
+ "items": [
+ {
+ "name": "EuroPython Society",
+ "path": "https://europython-society.org"
+ },
+ {
+ "name": "EuroPython Blog",
+ "path": "https://blog.europython.eu"
+ }
+ ]
}
],
- "footer": [
- {
- "name": "2024 Photos",
- "path": "https://ep2024.europython.eu/photos"
- },
+ "terms": [
{
"name": "Contacts",
"path": "/contacts"
@@ -149,9 +259,22 @@
"name": "Terms",
"path": "/terms"
},
+ {
+ "name": "Code of Conduct",
+ "path": "https://www.europython-society.org/coc/"
+ },
{
"name": "Privacy Policy",
"path": "https://www.europython-society.org/privacy/"
}
- ]
+ ],
+ "socials": {
+ "mastodon": "https://fosstodon.org/@europython",
+ "linkedin": "https://linkedin.com/company/europython",
+ "github": "https://github.com/europython",
+ "bluesky": "https://bsky.app/profile/europython.eu",
+ "twitter": "https://x.com/europython",
+ "instagram": "https://instagram.com/europython/",
+ "youtube": "https://youtube.com/channel/UC98CzaYuFNAA_gOINFB0e4Q"
+ }
}
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 8aa0dcb8d..d4a2ee307 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -35,7 +35,7 @@ const externalDomain = new URL(Astro.site || "").hostname;
-
+
@@ -80,4 +80,19 @@ const externalDomain = new URL(Astro.site || "").hostname;
footer {
@apply bg-primary py-10;
}
+
+ @media screen and (width>1200px){
+ main {
+ margin-bottom:800px;
+ }
+ footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ padding: 40px 20px 40px 20px;
+ text-align: center;
+ z-index: -1;
+ }
+}
diff --git a/src/pages/community-partners.astro b/src/pages/community-partners.astro
index 5e168b12b..45e3c970d 100644
--- a/src/pages/community-partners.astro
+++ b/src/pages/community-partners.astro
@@ -19,12 +19,12 @@ const sponsors = await getCollection("sponsors", ({ data }) => {
>
-
-
{
sponsorTiers.map((tier, index) => (
@@ -86,4 +87,5 @@ const topTier = sponsorTiers.find((tier) => tier.name === "Keystone");
))
}
+
diff --git a/src/components/ui/Button.astro b/src/components/ui/Button.astro
index 44081f67c..270f1b99e 100644
--- a/src/components/ui/Button.astro
+++ b/src/components/ui/Button.astro
@@ -11,6 +11,7 @@ const {
outline = false,
disabled = false,
clear = false,
+ custom = false,
isExternal,
icon,
iconSvg = false,
@@ -40,7 +41,7 @@ const slotContent = await Astro.slots.render('default');
href={disabled ? undefined : url}
title={title}
aria-label={title ? title : slotContent}
- class={`${baseClasses}
+ class={custom ? `${className}`: `${baseClasses}
${clear ? clearClasses : outline ? outlineClasses : secondary ? secondaryClasses : primaryClasses}
${disabled ? disabledClasses : ""}
${className}`}
diff --git a/src/components/ui/Headline.astro b/src/components/ui/Headline.astro
index 4fa7131b6..2f3ba4ecb 100644
--- a/src/components/ui/Headline.astro
+++ b/src/components/ui/Headline.astro
@@ -8,7 +8,7 @@ const isCenter = center ? "text-center" : "";
---
-
+
EuroPython is a community-driven conference, we wouldn't be able to make as much impact without the support of our brilliant Community Partners. Get to know our partners better below (alphabetical order).
{sponsors.length > 0 && ( -
+
{sponsors.map((sponsor) => (
))}
diff --git a/src/pages/jobs.astro b/src/pages/jobs.astro
index 10f8d4933..d90b87872 100644
--- a/src/pages/jobs.astro
+++ b/src/pages/jobs.astro
@@ -2,7 +2,7 @@
import { type CollectionEntry, getEntry, getCollection } from "astro:content";
import Layout from "@layouts/SectionLayout.astro";
-
+import Headline from "@ui/Headline.astro"
import SponsorCard from "@components/SponsorCard.astro";
import JobCard from "@components/JobCard.astro";
import TwoCols from "@components/TwoCols.astro";
@@ -52,6 +52,8 @@ sponsors.forEach((sponsor) => {
title="EuroPython 2025 | July 14th-20th 2025 | Prague, Czech Republic & Remote"
description="EuroPython is the largest Python conference in Europe. We are looking forward to seeing you in Prague, Czech Republic & Remote from July 14th-20th 2025."
>
+
+
{
sponsors.map((sponsor) => {
if (!(sponsor.data.jobs && sponsor.data.jobs.length > 0)) return;
diff --git a/src/pages/sessions.astro b/src/pages/sessions.astro
index 382e8972d..e15b8f05c 100644
--- a/src/pages/sessions.astro
+++ b/src/pages/sessions.astro
@@ -2,6 +2,7 @@
import { getCollection } from "astro:content";
import Layout from "../layouts/Layout.astro";
import Prose from "../components/prose/prose.astro";
+import Headline from "@ui/Headline.astro"
import Filter from "../components/sessions/filter.astro";
import ListSessions from "../components/sessions/list-sessions.astro";
import Section from "@ui/Section.astro";
@@ -26,18 +27,16 @@ const description = "A list of all the sessions at the conference";
+
-
+
-
-
+
diff --git a/src/pages/speakers.astro b/src/pages/speakers.astro
index 3b448f512..1a6cd1c3a 100644
--- a/src/pages/speakers.astro
+++ b/src/pages/speakers.astro
@@ -1,7 +1,7 @@
---
import { getCollection, type CollectionEntry } from "astro:content";
import Layout from "@layouts/Layout.astro";
-import Prose from "@components/prose/prose.astro";
+import Headline from "@ui/Headline.astro"
import { Image } from "astro:assets";
import Section from "@ui/Section.astro";
@@ -65,9 +65,8 @@ const description = "Our conference speakers organized alphabetically";
-
-
+
+
{
groupKeys.map((key, _index) => (
diff --git a/src/styles/global.css b/src/styles/global.css
index 9ff40d31c..c2d5e81ac 100644
--- a/src/styles/global.css
+++ b/src/styles/global.css
@@ -270,3 +270,26 @@ main a[href^="#"]::before {
background-size: 65%;
background-color: white;
}
+
+.social-icon {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ transition:
+ transform 0.3s ease,
+ color 0.3s ease;
+}
+
+.social-icon:hover {
+ transform: scale(1.2) rotate(6deg);
+}
+
+.social-icon-inner {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 100%;
+}
Sessions
Here you can find a list of all the sessions at the conference.
You can filter the sessions by track, type, and level.
-