diff --git a/src/content.config.ts b/src/content.config.ts index 93fd268dd..f8b7477e1 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -53,12 +53,12 @@ const keynoters = defineCollection({ bio: z.string().optional(), image: image().optional(), order: z.number(), - homepage: z.url().optional(), - mastodon_url: z.url().optional(), - bluesky_url: z.url().optional(), - twitter_url: z.url().optional(), - linkedin_url: z.url().optional(), - github_url: z.url().optional(), + homepage: z.string().url().optional(), + mastodon_url: z.string().url().optional(), + bluesky_url: z.string().url().optional(), + twitter_url: z.string().url().optional(), + linkedin_url: z.string().url().optional(), + github_url: z.string().url().optional(), }), }); @@ -200,13 +200,13 @@ const speakers = defineCollection({ submissions: z.array(reference("sessions")), affiliation: z.string().nullable(), homepage: z.string().nullable(), - gitx_url: z.url().nullable().optional(), - linkedin_url: z.url().nullable(), - mastodon_url: z.url().nullable(), - bluesky_url: z.url().nullable().optional(), - twitter_url: z.url().nullable(), - discord: z.url().nullable().optional(), - tiktok: z.url().nullable().optional(), + gitx_url: z.string().url().nullable().optional(), + linkedin_url: z.string().url().nullable(), + mastodon_url: z.string().url().nullable(), + bluesky_url: z.string().url().nullable().optional(), + twitter_url: z.string().url().nullable(), + discord: z.string().url().nullable().optional(), + tiktok: z.string().url().nullable().optional(), }), }); @@ -235,7 +235,7 @@ const sessions = defineCollection({ state: z.enum(["confirmed"]).optional().nullable(), tweet: z.string(), resources: z - .array(z.object({ resource: z.url(), description: z.string() })) + .array(z.object({ resource: z.string().url(), description: z.string() })) .nullable(), duration: z.string(), level: z.enum(["beginner", "intermediate", "advanced"]), @@ -243,8 +243,8 @@ const sessions = defineCollection({ room: z.string().nullable(), start: z.string().nullable(), end: z.string().nullable(), - website_url: z.url(), - youtube_url: z.url().nullable(), + website_url: z.string().url(), + youtube_url: z.string().url().nullable(), sessions_in_parallel: z.array(z.string()).nullable(), sessions_after: z.array(z.string()).nullable(), sessions_before: z.array(z.string()).nullable(), @@ -328,27 +328,31 @@ const days = defineCollection({ }); const sponsors = defineCollection({ - loader: glob({ pattern: "*/index.md", base: "./src/content/sponsors" }), + loader: glob({ + pattern: "*/index.md", + base: "./src/content/sponsors", + generateId: ({ entry }) => entry.replace(/\/index\.md$/, ""), + }), schema: z.object({ name: z.string(), - url: z.url(), + url: z.string().url(), tier: z.string(), location: z.string().optional(), industry: z.string().optional(), description: z.string().optional(), socials: z .object({ - linkedin: z.url().optional().nullable(), - blog: z.url().optional().nullable(), - github: z.url().optional().nullable(), - mastodon: z.url().optional().nullable(), - bluesky: z.url().optional().nullable(), - twitter: z.url().optional().nullable(), - instagram: z.url().optional().nullable(), - discord: z.url().optional().nullable(), - facebook: z.url().optional().nullable(), - youtube: z.url().optional().nullable(), - tiktok: z.url().optional().nullable(), + linkedin: z.string().url().optional().nullable(), + blog: z.string().url().optional().nullable(), + github: 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(), + tiktok: z.string().url().optional().nullable(), }) .optional(), event_name: z.string().optional().nullable(), @@ -360,7 +364,11 @@ const sponsors = defineCollection({ }); const jobs = defineCollection({ - loader: glob({ pattern: "*/!(index).md", base: "./src/content/sponsors" }), + loader: glob({ + pattern: "*/!(index).md", + base: "./src/content/sponsors", + generateId: ({ entry }) => entry.replace(/\.md$/, ""), + }), schema: z.object({ title: z.string(), location: z.string().nullable(), @@ -378,7 +386,7 @@ const jobs = defineCollection({ stack: z.array(z.string()).optional().nullable(), benefits: z.array(z.string()).nullable(), description2: z.string().optional().nullable(), - apply_link: z.url().optional(), + apply_link: z.string().url().optional(), draft: z.boolean().optional().default(false), sponsor: reference("sponsors").optional(), }), @@ -393,7 +401,7 @@ const sprints = defineCollection({ pythonLevel: z.enum(["Any", "Beginner", "Intermediate", "Advanced"]), contactPerson: z.object({ name: z.string(), - email: z.email().optional().nullable(), + email: z.string().email().optional().nullable(), github: z.string().optional().nullable(), twitter: z.string().optional().nullable(), }), @@ -401,7 +409,7 @@ const sprints = defineCollection({ .array( z.object({ title: z.string(), - url: z.url(), + url: z.string().url(), }) ) .optional(), diff --git a/src/content/pages/_community-activities/community-booths.jpg b/src/content/pages/_community-activities/community-booths.jpg deleted file mode 100644 index e4bca6d71..000000000 Binary files a/src/content/pages/_community-activities/community-booths.jpg and /dev/null differ diff --git a/src/content/pages/_community-activities/community-booths2.jpg b/src/content/pages/_community-activities/community-booths2.jpg deleted file mode 100644 index f4759bccd..000000000 Binary files a/src/content/pages/_community-activities/community-booths2.jpg and /dev/null differ diff --git a/src/content/pages/_community-activities/index.mdx b/src/content/pages/_community-activities/index.mdx deleted file mode 100644 index 6bba36ca3..000000000 --- a/src/content/pages/_community-activities/index.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Community Organisers Activities -url: /community-activities -subtitle: - Booths, open spaces, and more activities for organisers ---- - -# Community Organisers Activities - -The Python community is an essential part of the language, and for many people, it's -the reason they stick around and keep meetups, conferences, forums, and so much more running to help others. - -This year at EuroPython, we have several activities focused on communities across Europe and around the world, as well as initiatives centered around Python itself. - -![](./pyo-open-space2.jpg) - -## Community Organisers Open Space - -Communication is key to avoiding repetition and learning from past mistakes. -Let's come together and share the experiences of our communities, as well as and our personal -challenges and successes, so that more communities can grow and improve. - -This year, we are dedicating a two-hour slot in the Open Spaces to all community organisers who want to share their experiences. More -importantly, it's a chance to explore how the EuroPython Society can support you in achieving your -goals and addressing your current challenges. - -* Room: 223+224 -* Time: Friday 18th, 11:00h - 13:00h - -![](./pyo-open-space.jpg) - -## Community Organisers Lunch - -Do you know all the organizers from other European Python communities and conferences? -If not, this is a great opportunity to meet more people who, just like you, are doing their best to keep Python events and communities alive—so that more people have the chance to learn, connect, and grow with Python! - -We'll be meeting on Friday, July 18, at 12:55 in the Zoom room on the first floor near the registration area for a special lunch—an opportunity to connect with others who share your passion. - -## Community Booths - -Each year, we reserve booth space for communities, initiatives, nonprofit organizations, and open source projects that support the Python community and the wider open source ecosystem. -Join us in the Exhibit Hall during the main conference days to meet this year’s amazing Community Booth lineup! - - - - -![](./community-booths.jpg) - -![](./community-booths2.jpg) - -## PyLadies Open Space & Lunch - -Check out [the PyLadies activities page](/pyladies) for more information. diff --git a/src/content/pages/_community-activities/pyo-open-space.jpg b/src/content/pages/_community-activities/pyo-open-space.jpg deleted file mode 100644 index b4f513f27..000000000 Binary files a/src/content/pages/_community-activities/pyo-open-space.jpg and /dev/null differ diff --git a/src/content/pages/_community-activities/pyo-open-space2.jpg b/src/content/pages/_community-activities/pyo-open-space2.jpg deleted file mode 100644 index 73bb31dae..000000000 Binary files a/src/content/pages/_community-activities/pyo-open-space2.jpg and /dev/null differ diff --git a/src/content/pages/community-organisers-summit/community-booths.jpg b/src/content/pages/community-organisers-summit/community-booths.jpg new file mode 100644 index 000000000..b6e30d466 Binary files /dev/null and b/src/content/pages/community-organisers-summit/community-booths.jpg differ diff --git a/src/content/pages/community-organisers-summit/community-organisers-lunch.jpg b/src/content/pages/community-organisers-summit/community-organisers-lunch.jpg new file mode 100644 index 000000000..30279d635 Binary files /dev/null and b/src/content/pages/community-organisers-summit/community-organisers-lunch.jpg differ diff --git a/src/content/pages/community-organisers-summit/community-organisers-open-space.jpg b/src/content/pages/community-organisers-summit/community-organisers-open-space.jpg new file mode 100644 index 000000000..f8f2f87cc Binary files /dev/null and b/src/content/pages/community-organisers-summit/community-organisers-open-space.jpg differ diff --git a/src/content/pages/community-organisers-summit/community-organisers.jpg b/src/content/pages/community-organisers-summit/community-organisers.jpg new file mode 100644 index 000000000..445732fe4 Binary files /dev/null and b/src/content/pages/community-organisers-summit/community-organisers.jpg differ diff --git a/src/content/pages/community-organisers-summit/index.mdx b/src/content/pages/community-organisers-summit/index.mdx new file mode 100644 index 000000000..dce54b9dc --- /dev/null +++ b/src/content/pages/community-organisers-summit/index.mdx @@ -0,0 +1,80 @@ +--- +title: Community Organisers Summit +url: /community-organisers-summit +subtitle: Community Organisers Summit, booths, and more +--- + +# Community Organisers Summit + +The vibrant Python community plays a key role in driving the language's growth and success by engaging individuals through meetups, conferences, forums, and numerous other opportunities. + +Effective communication is essential to avoid redundancy and learn from past mistakes. By gathering at EuroPython, we can exchange stories of our community experiences, as well as share personal challenges and triumphs, empowering more communities to prosper and progress. + +![Community organisers group photo from EuroPython 2025](./community-organisers.jpg) + +At EuroPython 2026, we are excited to host a special Community Organisers Summit. This event brings together individuals who actively contribute to organizing Python events and communities across Europe and beyond. The goal is to facilitate networking, knowledge sharing, and collaboration among community organisers. + +### What to Expect + +The **Community Organisers Summit** is designed as a collaborative, hands-on experience that moves from shared context into deeper discussion and practical reflection. + +It begins with a **short introduction**, setting the stage for the day’s activities and welcoming attendees from across the Python community. + +From there, the summit moves into **facilitated small group discussions**, where participants explore topics related to organizing Python events and communities. These sessions are designed to encourage in-depth conversation, knowledge sharing, and exchange of real-world experiences. + +Each group will then come back together for **short presentations**, sharing key insights, discussion points, and conclusions that emerged during their conversations. + +![Community organisers participating in an open space discussion at EuroPython 2025](./community-organisers-open-space.jpg) + +In essence, the Community Organisers Summit is a crucial component of EuroPython, bringing together organisers from across the Python ecosystem to connect, learn from one another, and collaborate on strengthening our communities. + +Whether you're organizing a local meetup, a regional conference, or a large-scale community initiative, the summit is an opportunity to learn from peers, share experiences, discuss common challenges, and build stronger connections across the Python ecosystem. + +- **Location:** Glass room (Floor 0) +- **Time:** Friday 17 July 10:45 +- **Programme:** [https://ep2026.europython.eu/session/community-organizers-summit-opening-and-introduction](https://ep2026.europython.eu/session/community-organizers-summit-opening-and-introduction) + +--- + +### Featured Workshop + +**The Experience Is the Community** by ***Georgi Ker*** + +The day concludes with a featured, interactive workshop exploring the POPCOM model (Participation, Connection, Mentorship). Through structured exercises and reflection, participants will examine their own communities and leave with practical tools to improve engagement and community experience. + +- **Location:** Glass room (Floor 0) +- **Time:** Friday 17 July 14:30 +- **Programme:** [https://ep2026.europython.eu/session/the-experience-is-the-community](https://ep2026.europython.eu/session/the-experience-is-the-community) + +--- + +## Community Organisers Lunch + +![Community organisers networking during the Community Organisers Lunch in EuroPython 2025](./community-organisers-lunch.jpg) + +The Community Organisers Lunch continues the discussions from the morning sessions in a more informal setting over lunch, bringing together Python communities to connect, share experiences, and keep the conversation going. It’s open to all organisers, including those not attending the summit. + +- **Location:** Red carpet (Floor 2) +- **Time:** Friday 17 July 12:55 +- **Programme:** [https://ep2026.europython.eu/session/communities-organizers-lunch](https://ep2026.europython.eu/session/communities-organizers-lunch) + +--- + +## Community Booths + +![Community booths showcasing Python projects and initiatives at EuroPython 2025 community area](./community-booths.jpg) + +Each year, we reserve booth space for communities, initiatives, nonprofit organizations, and open source projects that support the Python community and the wider open source ecosystem. + +Don't miss out on this opportunity to learn, develop, and contribute to something greater! + +- **Location:** Community area (Floor 0) +- **Time:** Wednesday to Friday, 15-17 July + +## PyLadies Open Space & Lunch + +A series of initiatives that bring together underrepresented groups in the Python community to connect, learn, and collaborate. + +Through talks, workshops, and networking opportunities, these events provide a safe space to share experiences, meet new people, and help build a more inclusive Python community. + +Check out [the PyLadies activities page](https://ep2026.europython.eu/pyladies) for more information. diff --git a/src/data/nav.ts b/src/data/nav.ts index 6f5112c7f..5fcb21a73 100644 --- a/src/data/nav.ts +++ b/src/data/nav.ts @@ -45,6 +45,10 @@ const L = { langSummit: { label: "Language Summit", url: "/language-summit" }, rustSummit: { label: "Rust Summit", url: "/rust-summit" }, packagingSummit: { label: "Packaging Summit", url: "/packaging-summit" }, + communityOrganisersSummit: { + label: "Community Organisers Summit", + url: "/community-organisers-summit", + }, // Events & Social sprints: { label: "Sprints Weekend", url: "/sprints" }, @@ -140,7 +144,12 @@ export const NAV_MENUS: NavMenu[] = [ }, { label: "Summits", - items: [L.langSummit, L.rustSummit, L.packagingSummit], + items: [ + L.langSummit, + L.rustSummit, + L.packagingSummit, + L.communityOrganisersSummit, + ], }, { label: "Events & Social", @@ -269,6 +278,7 @@ export const FOOTER_COLUMNS: FooterColumn[] = [ L.langSummit, L.rustSummit, L.packagingSummit, + L.communityOrganisersSummit, ], }, { diff --git a/src/pages/overview.astro b/src/pages/overview.astro index 62df6248c..7a46071b9 100644 --- a/src/pages/overview.astro +++ b/src/pages/overview.astro @@ -23,6 +23,7 @@ const categories = [ { name: "Language Summit", href: "/language-summit/" }, { name: "Packaging Summit", href: "/packaging-summit/" }, { name: "Rust Summit", href: "/rust-summit/" }, + { name: "Community Organisers Summit", href: "/community-organisers-summit/" }, ], }, {