Skip to content
Open
Show file tree
Hide file tree
Changes from 2 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
2 changes: 2 additions & 0 deletions src/components/SponsorLogo.astro
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const slug = tier==="Partners"? `/community-partners#sponsor-${sponsorId}`
---

{logo && (

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have second thoughts about this part. I added it to be able to display partners before adding a logo, but I guess we want the build to fail explicitly when we forgot to add a photo before pushing to prod?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, I think failing the build if something is missing is better than gracefully handling it 😅
but that's just my general preference.

It's better to explicitly add some generic placeholder in the data than handle that in code, and then make the code require a logo.

<div
class="lg:max-w-[400px] flex flex-col p-6 bg-white"
>
Expand Down Expand Up @@ -69,6 +70,7 @@ const slug = tier==="Partners"? `/community-partners#sponsor-${sponsorId}`
}
</div>
</div>
)}

<style>

Expand Down
64 changes: 64 additions & 0 deletions src/components/sections/media-partners.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
import { getCollection } from "astro:content";
import Section2 from "@ui/Section2.astro";
import Title from "@ui/Title.astro";
import Button from "@ui/Button.astro";
import SponsorLogo from "@components/SponsorLogo.astro";


const partners = (await getCollection("sponsors", ({ data }) => {
const isProd = import.meta.env.MODE === "production";
const notDraft = !isProd || data.draft !== true;
const isMediaPartner = data.tier === "Media Partners";
return notDraft && isMediaPartner;
})).sort((a, b) => a.data.name.localeCompare(b.data.name));

const sectionSubtitle = "Meet the media organisations supporting EuroPython 2026";
---

<Section2 id="media-partners" variant="light">

<div class="media-partners-header">
<Title id="media-partners" color="var(--color-black)">Media Partners</Title>
</div>
<div class="text-center mb-12">
<p class="text-lg text-gray-600 max-w-2xl mx-auto">{sectionSubtitle}</p>
</div>
<div class="mt-10 text-center">
<Button url="/media-partners">Learn more about our media partners</Button>
</div>

<div class="partners-grid grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-8 ">
{partners.map((partner) => (
<SponsorLogo sponsor={partner.id} />
))}
</div>

</Section2>

<style>

.media-partners-header {
text-align: center;
margin-bottom: 2.5rem;
}

.partners-grid {
animation: fadeInUp 0.6s ease-out;
}

@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}

.container {
max-width: 1150px;
}
</style>
Binary file added src/content/sponsors/arjancodes/arjancodes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
24 changes: 24 additions & 0 deletions src/content/sponsors/arjancodes/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: ArjanCodes
url: https://www.arjancodes.com/
location: "World"
industry: "Technology"
description:
"ArjanCodes helps software developers and engineering teams build better
software through practical education, training, and content. Founded by
software developer, educator, and entrepreneur Arjan Egges, ArjanCodes draws
on more than 20 years of experience in software development and teaching.
Through its YouTube channel, online courses, and corporate training programs,
ArjanCodes has helped millions of developers improve their coding,
architecture, and software design skills."
socials:
linkedin: "https://www.linkedin.com/company/84778227"
twitter: "https://x.com/arjancodes"
youtube: "https://www.youtube.com/arjancodes"
instagram: "https://www.instagram.com/arjancodes/"
github: "https://github.com/arjancodes"
facebook: "https://www.facebook.com/arjancodes"
discord: "https://discord.com/invite/K9CKfWrX4A"
logo_padding: 10px
tier: Media Partners
---
Binary file added src/content/sponsors/django-chat/django-chat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions src/content/sponsors/django-chat/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
name: Django Chat
url: https://djangochat.com/
location: "World"
industry: "Technology & Education"
description:
"Django Chat is a podcast about the Django web framework, hosted by William
Vincent and Carlton Gibson. Each episode covers Django internals, best
practices, and interviews with developers and contributors who are shaping the
Django ecosystem. It's an essential listen for anyone building with Django or
looking to deepen their understanding of Python web development."
logo_padding: 10px
tier: Media Partners
---
123 changes: 123 additions & 0 deletions src/content/sponsors/hackerspace-wroclaw/hackerspace-wroclaw.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 17 additions & 0 deletions src/content/sponsors/hackerspace-wroclaw/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Hackerspace Wrocław
url: https://hswro.org/
location: Poland
industry: "Technology & Community"
description:
"Hackerspace Wrocław is a community of technology enthusiasts that has existed
in Wrocław for over 11 years. Our weekly Wednesday meetings are a perfect
opportunity to meet people fascinated by retro computing, amateur radio,
programming, electronics, woodworking and metalworking, as well as many other,
often surprising, things."
socials:
facebook: "https://www.facebook.com/HackerspaceWroclaw"
mastodon: "https://mastodon.radio/@SP6HACK"
logo_padding: 10px
tier: Media Partners
---
17 changes: 17 additions & 0 deletions src/content/sponsors/paged-out/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Paged Out!
url: https://pagedout.institute/
location: World
industry: "Technology & Community"
description:
"Paged Out! is a free experimental (one article == one page) technical
magazine about programming (especially programming tricks!), hacking, security
hacking, retro computers, modern computers, electronics, demoscene, and other
similar topics. It's made by the community for the community."
socials:
linkedin: "https://www.linkedin.com/company/paged-out"
twitter: "https://x.com/pagedout_zine"
bluesky: "https://bsky.app/profile/pagedout.bsky.social"
logo_padding: 10px
tier: Media Partners
---
Binary file added src/content/sponsors/paged-out/paged-out.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions src/content/sponsors/real-python-podcast/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
name: Real Python Podcast
url: https://realpython.com/podcasts/rpp/
location: "World"
industry: "Technology & Education"
description:
"The Real Python Podcast is a weekly Python podcast hosted by Christopher
Bailey, featuring interviews with Python developers, educators, and community
members from around the world. Each episode dives into topics ranging from
Python best practices and tools, to career advice and open source projects,
making it a go-to resource for Pythonistas of all skill levels."
socials:
twitter: "https://x.com/realpython"
youtube: "https://www.youtube.com/@realpython"
github: "https://github.com/realpython"
facebook: "https://www.facebook.com/LearnRealPython"
logo_padding: 10px
tier: Media Partners
---
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 15 additions & 2 deletions src/data/nav.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ const L = {
label: "Community Partners",
url: "/community-partners",
},
mediaPartners: {
label: "Media Partners",
url: "/media-partners",
},

// Misc
jobs: { label: "Jobs", url: "/jobs" },
Expand Down Expand Up @@ -178,7 +182,9 @@ export const NAV_MENUS: NavMenu[] = [
{
label: "Community",
url: "/about",
sections: [{ items: [L.about, L.eps, L.communityPartners] }],
sections: [
{ items: [L.about, L.eps, L.communityPartners, L.mediaPartners] },
],
},

// Jobs — single link, no dropdown
Expand Down Expand Up @@ -254,6 +260,13 @@ export const FOOTER_COLUMNS: FooterColumn[] = [
},
{
title: "Community",
items: [L.about, L.eps, L.communityPartners, L.blog, L.contacts],
items: [
L.about,
L.eps,
L.communityPartners,
L.mediaPartners,
L.blog,
L.contacts,
],
},
];
2 changes: 2 additions & 0 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import Testimonials from "@sections/testimonials.astro";
import Programme from "@sections/programme.astro";
import EuroSciPy from "@sections/euroscipy.astro";
import CommunityPartners from "@sections/community-partners.astro";
import MediaPartners from "@sections/media-partners.astro";
import Connect from "@sections/connect.astro";
---

Expand All @@ -32,6 +33,7 @@ import Connect from "@sections/connect.astro";
<!-- <City /> -->
<Sponsors />
<CommunityPartners />
<MediaPartners />
<!-- <FinAid /> -->
<!-- <PyLadies /> -->
<!-- <OrgSummit /> -->
Expand Down
Loading