Skip to content
Open
Show file tree
Hide file tree
Changes from 6 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
Binary file added public/images/diego.jpeg
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 public/images/jodie.jpeg
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 public/images/rodrigo.jpeg
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 public/images/thibaud.jpeg
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 public/images/vassillikki.jpeg
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 public/images/wojciech.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 0 additions & 1 deletion src/components/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import links from "@data/links.json";
<section
id="navbar"
>
<a href="/remote" class="bg-top-notification text-white hover:text-white hover:underline text-center px-2 font-bold fixed top-0 w-full h-[40px] z-50 flex items-center justify-center">Can’t join us in Prague? Attend remotely — online options available!</a>
<div
class="container max-w-[1150px] mx-auto px-6 py-2 mt-12 lg:p-2 lg:mt-14 flex items-center justify-between relative z-40 bg-white/80 rounded-full backdrop-blur-md shadow-lg"
>
Expand Down
1 change: 0 additions & 1 deletion src/components/header/header-actions.astro
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ const IS_LIVE = false;
<kbd>Ctrl</kbd><kbd>K</kbd>
</kbd>
</button>
<Button custom url="/tickets" icon="ticket" class="button-link font-bold text-lg px-4 py-3 rounded-full inline-flex items-center justify-center leading-4 transition-colors duration-200 not-prose border hover:text-white w-full max-w-36 max-xl:hidden bg-button text-text-inverted hover:bg-button-hover border-transparent">Tickets</Button>
{IS_LIVE && <Button url="/live">Live</Button>}
</>
: null
Expand Down
76 changes: 8 additions & 68 deletions src/components/sections/hero/hero.astro
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import IconWithLabel from "./icon-label.astro";
import Icon from "@ui/Icon.astro";
import Button from "@ui/Button.astro";

const action1 = "/tickets";
const action2 = "/sponsorship/sponsor/";
const action1 = "https://www.youtube.com/@EuroPythonConference";
const action2 = "https://www.flickr.com/photos/europython/collections/72157724135241893/";
---

<section class="relative z-10">
Expand Down Expand Up @@ -82,7 +82,7 @@ const action2 = "/sponsorship/sponsor/";
>
</div>
<div class="prose-xl relative z-10 text-center">
<div class="grid md:flex items-center space-x-3 p-10 md:mt-20 justify-center">
<div class="grid md:flex items-center space-x-3 p-10 md:mt-0 justify-center">
<div class="flex items-center justify-center">
<img
class="h-full block md:w-full lg:w-[200px] pr-3 lg:pr-8"
Expand All @@ -101,9 +101,7 @@ const action2 = "/sponsorship/sponsor/";
<p
class="max-w-2xl mx-10 md:mx-40 text-center text-xl text-gray-700 mt-2"
>
Discover the latest Python trends, learn from 180+ expert speakers,
network with fellow developers, enjoy social events, and explore open
spaces to spark new ideas.
Thank you to everyone who joined us! We were thrilled to welcome over 1,600 Python enthusiasts from around the world. We can't wait to see you again next year!
</p>
</div>
<!-- First 2x1 Grid -->
Expand All @@ -115,77 +113,19 @@ const action2 = "/sponsorship/sponsor/";
<!-- Second 2x1 Grid with Action Buttons -->
<div class="text-center grid grid-cols-1 md:grid-cols-2 gap-4 m-6">
<div>
<Button secondary url={action1}> Register Now </Button>
<Button secondary url={action1}> Check out talks on YouTube </Button>
</div>
<div class="btn-outline">
<Button outline url={action2}> Call for Sponsors </Button>
<Button outline url={action2}> Conference photos </Button>
</div>
</div>
</div>

<div
class="bluebox relative flex flex-col items-center justify-center"
>
<div class="bluebox-shift">
<div class="hero-image overflow-hidden -mt-12">
<!-- Image with Rounded Corners and Shadow -->
<div class="px-5 md:px-10 md:m-10">
<Picture
src={heroImage}
alt="EuroPython 2025 Conference"
layout='full-width'
formats={['avif', 'webp', 'jpeg']}
class="lg:max-w-full h-auto lg:h-full rounded-2xl shadow-xl"
loading="eager"
priority={true}
/>
</div>
</div>
<!-- 3x1 Grid with Conference Stats -->
<div
class="stats flex flex-wrap flex-col md:flex-row justify-around items-center"
>
<div class="p-4 rounded-lg flex items-center">
<div
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
>
<Icon name="calendar-days" size="fa-3x" />
</div>
<div>
<h2 class="text-2xl md:text-5xl font-bold">7</h2>
<h3 class="text-xl md:text-3xl">Days</h3>
</div>
</div>
<div class="p-4 rounded-lg flex items-center">
<div
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
>
<Icon name="users" size="fa-3x" />
</div>
<div>
<h2 class="text-2xl md:text-5xl font-bold">1.3k+</h2>
<h3 class="text-xl md:text-3xl">Attendees</h3>
</div>
</div>
<div class="p-4 rounded-lg flex items-center">
<div
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
>
<Icon name="comments" size="fa-3x" />
</div>
<div>
<h2 class="text-2xl md:text-5xl font-bold">180+</h2>
<h3 class="text-xl md:text-3xl">Speakers</h3>
</div>
</div>
</div>
</div>
</div>

<style>
.bg-icons {
min-height: 600px;
padding-bottom: 150px;
min-height: 400px;
padding-bottom: 50px;
overflow: hidden;
}
.bg-icon {
Expand Down
123 changes: 123 additions & 0 deletions src/components/sections/testimonials.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
---
import Section from "@ui/Section.astro";

const testimonials = [
{
id: 1,
name: "Thibaud Colas",
profileImage: "/images/thibaud.jpeg",
quote: "Pretty sure EuroPython 2025 was my top 1 fav conference ever. Just the perfect mixture of catching up with people I know, meeting people I don't know, learning new things. Time well spent chatting w/ Python veterans and also first-timers.",
linkedinUrl: "https://www.linkedin.com/posts/thibaudcolas_django-python-europython2025-activity-7353026711569035265-bb1U"
},
{
id: 2,
name: "Wojciech Nowicki, MBA",
profileImage: "/images/wojciech.jpeg",
quote: "I learned from brilliant speakers across topics spanning Python best practices, data engineering, and AI/ML applications. Even more valuable were the conversations with fellow developers, maintainers, community organizers, and representatives from many companies across the Python ecosystem.",
linkedinUrl: "https://www.linkedin.com/posts/wonowicki_europython-python-opensource-activity-7352947135354433536-W_pQ"
},
{
id: 3,
name: "Diego Russo",
profileImage: "/images/diego.jpeg",
quote: "I've been attending EuroPython since 2011. To me, this is the Python conference. Period. I'm proud to be part of this community, and I will do my best to keep it that way.",
linkedinUrl: "https://www.linkedin.com/posts/diegor_back-fromeuropython-2025and-still-buzzing-activity-7353354177646845953-4nNo/"
},
{
id: 4,
name: "Jodie Burchell",
profileImage: "/images/jodie.jpeg",
quote: "Last week's EuroPython was one of the most wonderful conferences I've ever been to, and my heart is still overflowing with all of the wonderful moments.",
linkedinUrl: "https://www.linkedin.com/posts/jodieburchell_last-weeks-europython-was-one-of-the-most-ugcPost-7354418947993042947-NsXG/"
},
{
id: 5,
name: "Vassiliki Dalakiari",
profileImage: "/images/vassillikki.jpeg",
quote: "This event was built by the community, for the community, with authentic support for local groups. From the PyLadies meetups to the Python documentary screening, inclusivity felt genuine and present throughout the conference.",
linkedinUrl: "https://www.linkedin.com/posts/activity-7355237790462148608-VYL-/"
},
{
id: 6,
name: "Rodrigo Girão Serrão",
profileImage: "/images/rodrigo.jpeg",
quote: `This was also the most rewarding conference for me so far. A conference like EuroPython is much more than just talks and tutorials.
There is the hallway track, lightning talks ⚡️, social events, snacks exchange 🍿, the sprints weekend, ...`,
linkedinUrl: "https://www.linkedin.com/posts/rodrigo-gir%C3%A3o-serr%C3%A3o_its-been-4-weeks-but-it-feels-like-it-activity-7360678874222936064-N1eg"
}
];

const sectionTitle = "See what people say";
const sectionSubtitle = "Hear from our community";
---

<section class="bluebox relative py-16">
<div class="container mx-auto px-6">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold text-gray-900 mb-4">{sectionTitle}</h2>
<p class="text-lg text-gray-600 max-w-2xl mx-auto">{sectionSubtitle}</p>
</div>

<div class="testimonials-grid grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 max-w-6xl mx-auto">
{testimonials.map((testimonial) => (
<a
href={testimonial.linkedinUrl}
target="_blank"
rel="noopener noreferrer"
class="testimonial-card bg-white rounded-xl shadow-lg hover:shadow-xl transition-all duration-300 p-6 border border-gray-100 hover:border-[#0077b5] hover:-translate-y-1 group"
>
<div class="flex items-center mb-4">
<img
src={testimonial.profileImage}
alt={`${testimonial.name}'s profile picture`}
class="w-12 h-12 rounded-full mr-3 border-2 border-gray-200"
/>
<div>
<h3 class="font-semibold text-gray-900 group-hover:text-[#0077b5] transition-colors">
{testimonial.name}
</h3>
</div>
<div class="ml-auto">
<svg class="w-5 h-5 text-[#0077b5]" fill="currentColor" viewBox="0 0 24 24">
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
</svg>
</div>
</div>
<p class="text-gray-700 leading-relaxed italic">
"{testimonial.quote}"
</p>
</a>
))}
</div>
</div>
</section>

<style>
.bluebox {
background-color: #d4d5e5;
z-index: 1;
}

.testimonial-card:hover {
transform: translateY(-4px);
}

.testimonials-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>
2 changes: 2 additions & 0 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import Keynoters from "@sections/keynoters/keynoters.astro";
import Speakers from "@sections/speakers.astro";
import Prague from "@sections/prague.astro";
import Sponsors from "@sections/sponsors/sponsors.astro";
import Testimonials from "@sections/testimonials.astro";
import Subscribe from "@sections/subscribe.astro";
---

Expand All @@ -15,6 +16,7 @@ import Subscribe from "@sections/subscribe.astro";
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."
>
<Hero />
<Testimonials />
<Week />
<Keynoters />
<Speakers />
Expand Down