Skip to content

Commit 826256a

Browse files
Add draft of testimonials (#1484)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent e838457 commit 826256a

File tree

11 files changed

+129
-70
lines changed

11 files changed

+129
-70
lines changed

public/images/diego.jpeg

85.5 KB
Loading

public/images/jodie.jpeg

76.5 KB
Loading

public/images/rodrigo.jpeg

72.4 KB
Loading

public/images/thibaud.jpeg

8.79 KB
Loading

public/images/vassillikki.jpeg

68.3 KB
Loading

public/images/wojciech.jpeg

79.7 KB
Loading

src/components/Header.astro

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import links from "@data/links.json";
1111
<section
1212
id="navbar"
1313
>
14-
<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>
1514
<div
1615
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"
1716
>

src/components/header/header-actions.astro

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ const IS_LIVE = false;
3131
<kbd>Ctrl</kbd><kbd>K</kbd>
3232
</kbd>
3333
</button>
34-
<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>
3534
{IS_LIVE && <Button url="/live">Live</Button>}
3635
</>
3736
: null

src/components/sections/hero/hero.astro

Lines changed: 8 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import IconWithLabel from "./icon-label.astro";
66
import Icon from "@ui/Icon.astro";
77
import Button from "@ui/Button.astro";
88
9-
const action1 = "/tickets";
10-
const action2 = "/sponsorship/sponsor/";
9+
const action1 = "https://www.youtube.com/@EuroPythonConference";
10+
const action2 = "https://www.flickr.com/photos/europython/collections/72157724135241893/";
1111
---
1212

1313
<section class="relative z-10">
@@ -82,7 +82,7 @@ const action2 = "/sponsorship/sponsor/";
8282
>
8383
</div>
8484
<div class="prose-xl relative z-10 text-center">
85-
<div class="grid md:flex items-center space-x-3 p-10 md:mt-20 justify-center">
85+
<div class="grid md:flex items-center space-x-3 p-10 md:mt-0 justify-center">
8686
<div class="flex items-center justify-center">
8787
<img
8888
class="h-full block md:w-full lg:w-[200px] pr-3 lg:pr-8"
@@ -101,9 +101,7 @@ const action2 = "/sponsorship/sponsor/";
101101
<p
102102
class="max-w-2xl mx-10 md:mx-40 text-center text-xl text-gray-700 mt-2"
103103
>
104-
Discover the latest Python trends, learn from 180+ expert speakers,
105-
network with fellow developers, enjoy social events, and explore open
106-
spaces to spark new ideas.
104+
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!
107105
</p>
108106
</div>
109107
<!-- First 2x1 Grid -->
@@ -115,77 +113,19 @@ const action2 = "/sponsorship/sponsor/";
115113
<!-- Second 2x1 Grid with Action Buttons -->
116114
<div class="text-center grid grid-cols-1 md:grid-cols-2 gap-4 m-6">
117115
<div>
118-
<Button secondary url={action1}> Register Now </Button>
116+
<Button secondary url={action1}> Check out talks on YouTube </Button>
119117
</div>
120118
<div class="btn-outline">
121-
<Button outline url={action2}> Call for Sponsors </Button>
119+
<Button outline url={action2}> Conference photos </Button>
122120
</div>
123121
</div>
124122
</div>
125123

126-
<div
127-
class="bluebox relative flex flex-col items-center justify-center"
128-
>
129-
<div class="bluebox-shift">
130-
<div class="hero-image overflow-hidden -mt-12">
131-
<!-- Image with Rounded Corners and Shadow -->
132-
<div class="px-5 md:px-10 md:m-10">
133-
<Picture
134-
src={heroImage}
135-
alt="EuroPython 2025 Conference"
136-
layout='full-width'
137-
formats={['avif', 'webp', 'jpeg']}
138-
class="lg:max-w-full h-auto lg:h-full rounded-2xl shadow-xl"
139-
loading="eager"
140-
priority={true}
141-
/>
142-
</div>
143-
</div>
144-
<!-- 3x1 Grid with Conference Stats -->
145-
<div
146-
class="stats flex flex-wrap flex-col md:flex-row justify-around items-center"
147-
>
148-
<div class="p-4 rounded-lg flex items-center">
149-
<div
150-
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
151-
>
152-
<Icon name="calendar-days" size="fa-3x" />
153-
</div>
154-
<div>
155-
<h2 class="text-2xl md:text-5xl font-bold">7</h2>
156-
<h3 class="text-xl md:text-3xl">Days</h3>
157-
</div>
158-
</div>
159-
<div class="p-4 rounded-lg flex items-center">
160-
<div
161-
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
162-
>
163-
<Icon name="users" size="fa-3x" />
164-
</div>
165-
<div>
166-
<h2 class="text-2xl md:text-5xl font-bold">1.3k+</h2>
167-
<h3 class="text-xl md:text-3xl">Attendees</h3>
168-
</div>
169-
</div>
170-
<div class="p-4 rounded-lg flex items-center">
171-
<div
172-
class="w-16 h-16 flex items-center justify-center rounded-full mr-4"
173-
>
174-
<Icon name="comments" size="fa-3x" />
175-
</div>
176-
<div>
177-
<h2 class="text-2xl md:text-5xl font-bold">180+</h2>
178-
<h3 class="text-xl md:text-3xl">Speakers</h3>
179-
</div>
180-
</div>
181-
</div>
182-
</div>
183-
</div>
184124

185125
<style>
186126
.bg-icons {
187-
min-height: 600px;
188-
padding-bottom: 150px;
127+
min-height: 400px;
128+
padding-bottom: 50px;
189129
overflow: hidden;
190130
}
191131
.bg-icon {
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
import Section from "@ui/Section.astro";
3+
import Headline from "@ui/Headline.astro";
4+
5+
const testimonials = [
6+
{
7+
id: 1,
8+
name: "Thibaud Colas",
9+
profileImage: "/images/thibaud.jpeg",
10+
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.",
11+
linkedinUrl: "https://www.linkedin.com/posts/thibaudcolas_django-python-europython2025-activity-7353026711569035265-bb1U"
12+
},
13+
{
14+
id: 2,
15+
name: "Wojciech Nowicki, MBA",
16+
profileImage: "/images/wojciech.jpeg",
17+
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.",
18+
linkedinUrl: "https://www.linkedin.com/posts/wonowicki_europython-python-opensource-activity-7352947135354433536-W_pQ"
19+
},
20+
{
21+
id: 3,
22+
name: "Diego Russo",
23+
profileImage: "/images/diego.jpeg",
24+
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.",
25+
linkedinUrl: "https://www.linkedin.com/posts/diegor_back-fromeuropython-2025and-still-buzzing-activity-7353354177646845953-4nNo/"
26+
},
27+
{
28+
id: 4,
29+
name: "Jodie Burchell",
30+
profileImage: "/images/jodie.jpeg",
31+
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.",
32+
linkedinUrl: "https://www.linkedin.com/posts/jodieburchell_last-weeks-europython-was-one-of-the-most-ugcPost-7354418947993042947-NsXG/"
33+
},
34+
{
35+
id: 5,
36+
name: "Vassiliki Dalakiari",
37+
profileImage: "/images/vassillikki.jpeg",
38+
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.",
39+
linkedinUrl: "https://www.linkedin.com/posts/activity-7355237790462148608-VYL-/"
40+
},
41+
{
42+
id: 6,
43+
name: "Rodrigo Girão Serrão",
44+
profileImage: "/images/rodrigo.jpeg",
45+
quote: `This was also the most rewarding conference for me so far. A conference like EuroPython is much more than just talks and tutorials.
46+
There is the hallway track, lightning talks ⚡️, social events, snacks exchange 🍿, the sprints weekend, ...`,
47+
linkedinUrl: "https://www.linkedin.com/posts/rodrigo-gir%C3%A3o-serr%C3%A3o_its-been-4-weeks-but-it-feels-like-it-was-activity-7360678874222936064-N1eg/"
48+
}
49+
];
50+
51+
const sectionTitle = "See what participants say";
52+
const sectionSubtitle = "Hear from our community";
53+
---
54+
55+
<Section variant="primary">
56+
<Headline id="testimonials" title={sectionTitle} center="true" />
57+
<div class="container mx-auto px-6">
58+
<div class="text-center mb-12">
59+
<p class="text-lg text-gray-600 max-w-2xl mx-auto">{sectionSubtitle}</p>
60+
</div>
61+
62+
<div class="testimonials-grid grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 max-w-6xl mx-auto">
63+
{testimonials.map((testimonial) => (
64+
<a
65+
href={testimonial.linkedinUrl}
66+
target="_blank"
67+
rel="noopener noreferrer"
68+
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"
69+
>
70+
<div class="flex items-center mb-4">
71+
<img
72+
src={testimonial.profileImage}
73+
alt={`${testimonial.name}'s profile picture`}
74+
class="w-12 h-12 rounded-full mr-3 border-2 border-gray-200"
75+
/>
76+
<div>
77+
<h3 class="font-semibold text-gray-900 group-hover:text-[#0077b5] transition-colors">
78+
{testimonial.name}
79+
</h3>
80+
</div>
81+
<div class="ml-auto">
82+
<svg class="w-5 h-5 text-[#0077b5]" fill="currentColor" viewBox="0 0 24 24">
83+
<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"/>
84+
</svg>
85+
</div>
86+
</div>
87+
<p class="text-gray-700 leading-relaxed italic">
88+
"{testimonial.quote}"
89+
</p>
90+
</a>
91+
))}
92+
</div>
93+
</div>
94+
</Section>
95+
96+
<style>
97+
.testimonial-card:hover {
98+
transform: translateY(-4px);
99+
}
100+
101+
.testimonials-grid {
102+
animation: fadeInUp 0.6s ease-out;
103+
}
104+
105+
@keyframes fadeInUp {
106+
from {
107+
opacity: 0;
108+
transform: translateY(30px);
109+
}
110+
to {
111+
opacity: 1;
112+
transform: translateY(0);
113+
}
114+
}
115+
116+
.container {
117+
max-width: 1150px;
118+
}
119+
</style>

0 commit comments

Comments
 (0)