Skip to content

Commit 62314df

Browse files
nikoshellclytaemnestrapre-commit-ci[bot]
authored
Add keynoters. (#1102)
<!-- readthedocs-preview ep-website start --> 🖼️ Preview available 🖼️ : https://ep-website--1102.org.readthedocs.build/ <!-- readthedocs-preview ep-website end --> --------- Co-authored-by: Mia <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 7515d6f commit 62314df

28 files changed

+300
-132
lines changed

astro.config.mjs

+7-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,13 @@ export default defineConfig({
2424
},
2525
resolve: {
2626
alias: {
27-
$: path.resolve(__dirname, "./src"),
27+
"@components": path.resolve("./src/components"),
28+
"@sections": path.resolve("./src/components/sections"),
29+
"@layouts": path.resolve("./src/layouts"),
30+
"@ui": path.resolve("./src/components/ui"),
31+
"@assets": path.resolve("./src/assets"),
32+
"@i18n": path.resolve("./src/i18n"),
33+
"@src": path.resolve("./src"),
2834
},
2935
},
3036
},

src/components/BaseHead.astro

+5
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,8 @@ const { title, description, image = "/social-card.png" } = Astro.props;
5858
is:inline
5959
data-domain="ep2025.europython.eu"
6060
src="https://plausible.io/js/script.js"></script>
61+
62+
<script
63+
is:inline
64+
src="https://kit.fontawesome.com/14a4971ab3.js"
65+
crossorigin="anonymous"></script>

src/components/card/card.astro

+8-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
import type { ImageMetadata } from "astro";
33
import { Image } from "astro:assets";
4-
import ButtonLink from "../button-link/button-link.astro";
4+
import Button from "@ui/Button.astro";
55
66
export interface Props {
77
title: string;
@@ -14,31 +14,26 @@ const { title, subtitle, url, image } = Astro.props;
1414
---
1515

1616
<div
17-
class="block min-w-[250px] w-full md:w-[40%] lg:w-[30%] p-4 bg-[#D5D6E6] rounded-2xl text-center flex flex-col"
17+
class="min-w-[250px] w-full md:w-[40%] lg:w-[30%] p-4 bg-[#D5D6E6] rounded-2xl text-center flex flex-col"
1818
>
1919
<a href={url} class="block">
20-
<div class="relative w-full mb-4">
20+
<div class="relative w-full">
2121
<Image
2222
src={image}
2323
width={600}
2424
height={375}
25-
alt=""
26-
class="rounded-xl aspect-[3/2] w-full"
25+
alt=`Card image - ${title}`
26+
class="not-prose rounded-xl aspect-[3/2] w-full"
2727
loading="lazy"
2828
/>
2929
</div>
3030
</a>
3131
<div class="flex items-center flex-col flex-grow mb-2">
3232
<a href={url} class="block hover:underline">
33-
<h3 class="text-2xl text-primary">{title}</h3>
33+
<h3 >{title}</h3>
3434
</a>
3535
<slot />
3636
</div>
37-
<a
38-
class="text-xs px-2 py-1 mt-4 bg-[#141F36] text-white rounded-[10px] inline-block w-fit mx-auto leading-4 hover:bg-button-hover not-prose mt-auto"
39-
href={url}
40-
>
41-
{subtitle}
42-
<span class="inline-block ml-1 font-system text-lg leading-4"> ↗ </span>
43-
</a>
37+
38+
<Button secondary url={url}>{subtitle}</Button>
4439
</div>

src/components/header/header-actions.astro

+6-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
import ButtonLink from "../button-link/button-link.astro";
3+
import Button from "@ui/Button.astro";
34
import HeaderButton from "./header-button.astro";
45
import Search from "astro-pagefind/components/Search";
56
@@ -12,7 +13,7 @@ const { mobile = false }: Props = Astro.props;
1213
const IS_LIVE = false;
1314
---
1415

15-
<div class="ml-auto flex items-center space-x-4">
16+
<div class="flex items-center justify-end gap-2 w-1/3">
1617
<Search
1718
id="search"
1819
className="pagefind-ui"
@@ -26,15 +27,8 @@ const IS_LIVE = false;
2627
{
2728
!mobile ? (
2829
<>
29-
<ButtonLink url="/tickets" className="hidden md:block">
30-
<span>Register Now! 🎟️</span>
31-
</ButtonLink>
32-
{IS_LIVE && (
33-
<ButtonLink url="/live">
34-
Live
35-
<span class="hidden md:inline"> 📺</span>
36-
</ButtonLink>
37-
)}
30+
<Button url="/tickets" icon="ticket">Register Now!</Button>
31+
{IS_LIVE && <Button url="/live">Live</Button>}
3832
</>
3933
) : null
4034
}
@@ -122,7 +116,8 @@ const IS_LIVE = false;
122116
--pagefind-ui-border: #d8d8d8;
123117
--pagefind-ui-border-width: 2px;
124118
--pagefind-ui-border-radius: 0;
125-
width: 50%;
119+
width:50%;
120+
min-width: 10vw;
126121
}
127122
.pagefind-ui.yellow {
128123
--pagefind-ui-background: #efc302;

src/components/header/header.astro

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import HeaderLogo from "./header-logo.astro";
77
const links = JSON.parse(await fs.readFile("./src/data/links.json", "utf-8"));
88
---
99

10-
<header class="p-6 flex items-center relative z-40">
10+
<header class="p-6 flex items-center justify-between relative z-40">
1111
<input
1212
type="checkbox"
1313
name="mobile-controls"
@@ -18,7 +18,7 @@ const links = JSON.parse(await fs.readFile("./src/data/links.json", "utf-8"));
1818

1919
<HeaderLogo />
2020

21-
<nav class="mr-auto hidden xl:block">
21+
<nav class="hidden xl:block">
2222
<NavItems items={links.header} />
2323
</nav>
2424

src/components/hero-section/prague.astro

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
import Prose from "../prose/prose.astro";
3-
import ButtonLink from "../button-link/button-link.astro";
3+
import Button from "@ui/Button.astro";
44
import { Title } from "../typography/title";
55
import { Image } from "astro:assets";
66
@@ -31,10 +31,10 @@ import venueImage from "./prague.png";
3131
</Prose>
3232

3333
<div class="space-x-4 mb-5">
34-
<ButtonLink url="/where"> Where is EuroPython? </ButtonLink>
34+
<Button url="/where"> Where is EuroPython? </Button>
3535
</div>
3636
<div class="space-x-12">
37-
<ButtonLink url="/explore"> Explore Prague </ButtonLink>
37+
<Button url="/explore"> Explore Prague </Button>
3838
</div>
3939
</div>
4040
</article>

src/components/hero2/hero.astro

+13-28
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
---
2+
import { Logo } from "../logo";
23
import { Image } from "astro:assets";
34
import heroImage from "./conference_photo.jpg";
45
56
import IconWithLabel from "./icon-label.astro";
6-
import ButtonLink from "../../components/button-link/button-link.astro";
7+
import Button from "@ui/Button.astro";
78
8-
import HeaderLogo from "../header/header-logo.astro";
9-
const action1 = "https://ep2025.europython.eu/tickets";
10-
const action2 = "https://ep2025.europython.eu/sponsorship/sponsor/";
9+
const action1 = "/tickets";
10+
const action2 = "/sponsorship/sponsor/";
1111
---
1212

1313
<div
@@ -80,16 +80,16 @@ const action2 = "https://ep2025.europython.eu/sponsorship/sponsor/";
8080
></svg
8181
>
8282
</div>
83-
<div class="relative z-10 text-center">
84-
<div class="flex items-center space-x-3 p-10 md:mt-20">
85-
<div class="w-25 h-25 flex items-center justify-center">
86-
<HeaderLogo />
83+
<div class="prose-xl relative z-10 text-center">
84+
<div class="flex items-center space-x-3 p-10 md:mt-20 justify-center">
85+
<div class="w-200 h-200 flex items-center justify-center">
86+
<Logo className="h-full block md:w-full lg:w-[200px] pr-3 lg:pr-8" />
8787
</div>
88-
<h1 class="text-5xl md:text-9xl m-0 font-bold text-[#17223A]">
88+
<h1 class="text-5xl md:text-8xl lg:text-9xl m-0 font-bold text-[#17223A]">
8989
EuroPython
9090
</h1>
9191
</div>
92-
<p class="max-w-2xl mx-10 md:mx-40 text-center text-lg text-gray-700 mt-2">
92+
<p class="max-w-2xl mx-10 md:mx-40 text-center text-xl text-gray-700 mt-2">
9393
Discover the latest Python trends, learn from 180+ expert speakers,
9494
network with fellow developers, enjoy social events, and explore open
9595
spaces to spark new ideas.
@@ -106,27 +106,12 @@ const action2 = "https://ep2025.europython.eu/sponsorship/sponsor/";
106106
</div>
107107

108108
<!-- Second 2x1 Grid with Action Buttons -->
109-
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 m-6">
109+
<div class="text-center grid grid-cols-1 md:grid-cols-2 gap-4 m-6">
110110
<div>
111-
<ButtonLink
112-
secondary
113-
url={action1}
114-
className="mb-4 rounded-lg text-xl"
115-
isExternal={true}
116-
>
117-
Register Now
118-
</ButtonLink>
111+
<Button secondary url={action1}> Register Now </Button>
119112
</div>
120113
<div class="btn-outline">
121-
<a
122-
class="font-bold text-lg px-4 py-4 bg-button rounded-[10px] inline-block leading-4 hover:bg-button-hover not-prose outline-solid outline bg-transparent rounded-xlborder text-xl text-secondary outline-secondary text-black"
123-
href={action2}
124-
>
125-
Call for Sponsors
126-
<span class="inline-block ml-1 font-system text-lg leading-4">
127-
128-
</span></a
129-
>
114+
<Button outline url={action2}> Call for Sponsors </Button>
130115
</div>
131116
</div>
132117
</div>

src/components/keynoters/keynoter.astro

+9-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface Props {
1313
tagline?: string;
1414
image?: ImageMetadata;
1515
placeholder?: boolean;
16+
order?: number;
1617
class?: string;
1718
}
1819
@@ -22,17 +23,19 @@ const {
2223
tagline,
2324
image,
2425
placeholder,
26+
order,
2527
class: className,
2628
} = Astro.props;
2729
2830
const placeholders = [Person1, Person2, Person3, Person4, Person5];
2931
3032
const Placeholder =
3133
placeholders[Math.floor(Math.random() * placeholders.length)];
34+
3235
---
3336

3437
<li class:list={["list-none rounded-2xl overflow-clip flex group", className]}>
35-
<a class="block w-full h-full relative" href={`/speaker/${slug}`}>
38+
<a class="block w-full h-full relative " >
3639
<div class="relative aspect-[9/10] overflow-clip">
3740
{
3841
image ? (
@@ -43,24 +46,24 @@ const Placeholder =
4346
class="object-cover group-hover:scale-105 transition-transform h-full w-full"
4447
/>
4548
) : (
46-
<div class="bg-keynoter-info w-full h-full group-hover:opacity-90">
49+
<div class="bg-keynoter-info w-full h-full">
4750
<Placeholder />
4851
</div>
4952
)
5053
}
5154
</div>
5255

5356
<div
54-
class="px-5 py-2 pb-4 bg-keynoter-info rounded-t-none h-full group-hover:opacity-90"
57+
class="px-5 py-2 pb-4 bg-keynoter-info rounded-t-none h-full "
5558
>
5659
{
5760
placeholder ? (
58-
<p class="text-body-inverted font-bold">More keynoters coming soon</p>
61+
<p class="text-body-inverted ">More keynoters coming soon</p>
5962
) : (
6063
<>
61-
<p class="text-body-inverted font-bold">{name}</p>
64+
<p class="text-[#17223A] font-bold">{name}</p>
6265
{tagline ? (
63-
<p class="text-body-light font-bold text-sm italic">{tagline}</p>
66+
<p class="text-secondary-hover text-lg italic">{tagline}</p>
6467
) : null}
6568
</>
6669
)

src/components/keynoters/keynoters.astro

+29-25
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
---
2-
import ButtonLink from "../button-link/button-link.astro";
3-
import { Title } from "../typography/title";
42
import Keynoter from "./keynoter.astro";
3+
import Headline from "@ui/Headline.astro";
4+
import Button from "@ui/Button.astro";
55
66
import { getCollection } from "astro:content";
77
88
const keynoters = await getCollection("keynoters");
99
10-
const placeholders = Math.max(0, 6 - keynoters.length);
10+
const placeholders = Math.max(0, 5 - keynoters.length);
1111
---
1212

13-
<section class="relative my-12 px-6">
13+
<section class="prose-xl relative my-12 px-6">
1414
<svg viewBox="0 0 729 704" class="absolute top-0 left-0 w-full h-full -z-10">
1515
<g
1616
stroke="none"
1717
stroke-width={1}
1818
fill="none"
1919
fill-rule="evenodd"
20-
opacity={0.4}
20+
opacity={0.1}
2121
>
2222
<g
2323
transform="translate(-297.000000, -4131.000000)"
24-
class="fill-hero-primary"
24+
class="fill-secondary-light"
2525
>
2626
<g transform="translate(81.000000, 3688.000000)">
2727
<g transform="translate(216.000000, 443.000000)">
@@ -79,25 +79,26 @@ const placeholders = Math.max(0, 6 - keynoters.length);
7979
</g>
8080
</svg>
8181

82-
<Title className="text-primary">
83-
<a href="/keynoters">Keynote Speakers</a>
84-
</Title>
82+
<Headline id="keynoters" title="Keynote Speakers" />
8583

86-
<ul class="mt-12 mb-24 flex gap-6 flex-wrap">
84+
<ul class="p-0 mt-12 flex gap-6 flex-wrap justify-center">
8785
{
88-
keynoters.map((keynoter, index) => (
89-
<Keynoter
90-
name={keynoter.data.name}
91-
slug={keynoter.slug}
92-
tagline={keynoter.data.tagline}
93-
image={keynoter.data.image}
94-
placeholder={false}
95-
class:list={[
96-
"w-full sm:w-[calc(50%-1rem)] md:w-[calc(30%-1rem)]",
97-
{ "md:ml-[10%]": index === 0 },
98-
]}
99-
/>
100-
))
86+
keynoters
87+
.sort((a, b) => a.data.order - b.data.order)
88+
.map((keynoter, index) => (
89+
<Keynoter
90+
name={keynoter.data.name}
91+
slug={keynoter.slug}
92+
tagline={keynoter.data.tagline}
93+
image={keynoter.data.image}
94+
placeholder={false}
95+
order={keynoter.data.order}
96+
class:list={[
97+
"w-full sm:w-[calc(50%-1rem)] md:w-[calc(30%-1rem)]",
98+
{ "md:ml-[10%]": index === 0 },
99+
]}
100+
/>
101+
))
101102
}
102103
{
103104
new Array(placeholders)
@@ -114,13 +115,16 @@ const placeholders = Math.max(0, 6 - keynoters.length);
114115
}
115116
</ul>
116117

117-
<div class="flex items-end flex-col pr-6">
118+
<div class="flex items-center flex-col pr-6">
118119
<div class="text-center">
119120
<h3 class="font-bold text-3xl mb-4">
120121
<span class="text-body-light inline-block mr-2">#</span>
121122
See other sessions
122123
</h3>
123-
<ButtonLink url="/sessions">List of Sessions</ButtonLink>
124+
<Button url="/programme/sessions">See sessions preview</Button>
124125
</div>
125126
</div>
126127
</section>
128+
<style>
129+
.fill-hero-primary {}
130+
</style>

src/components/sections/prague.astro

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
import PragueComponent from "@components/hero-section/prague.astro";
3+
import * as venue from "../../data/home/prague.mdx";
4+
---
5+
<div class="mt-12 px-6 pb-32 overflow-visible">
6+
<PragueComponent title={venue.frontmatter.title}>
7+
<venue.Content />
8+
</PragueComponent>
9+
</div>

0 commit comments

Comments
 (0)