From 1e119c49bab45c4c6cd80d162702f66b445c7083 Mon Sep 17 00:00:00 2001 From: Artur Czepiel Date: Wed, 12 Mar 2025 13:12:16 +0100 Subject: [PATCH 1/3] Initial idea for the ticket page --- .../hero-section/title-with-cta.astro | 26 +++ src/components/note/note.tsx | 4 +- .../ticket-tiers/ticket-tiers.astro | 212 ++++++++++++++++++ src/pages/tickets.astro | 189 ++++++++++++++++ 4 files changed, 429 insertions(+), 2 deletions(-) create mode 100644 src/components/hero-section/title-with-cta.astro create mode 100644 src/components/ticket-tiers/ticket-tiers.astro create mode 100644 src/pages/tickets.astro diff --git a/src/components/hero-section/title-with-cta.astro b/src/components/hero-section/title-with-cta.astro new file mode 100644 index 000000000..31bd53948 --- /dev/null +++ b/src/components/hero-section/title-with-cta.astro @@ -0,0 +1,26 @@ +--- +import ButtonLink from "../button-link/button-link.astro"; +import { Title } from "../typography/title"; + +interface Props { + title: string; + subtitle: string; + buttonText?: string; + buttonUrl?: string; +} + +const { title, subtitle, buttonText, buttonUrl } = Astro.props; +--- + +
+ {title} +

{subtitle}

+ + {buttonText && buttonUrl && ( +
+ {buttonText} +
+ )} + + +
diff --git a/src/components/note/note.tsx b/src/components/note/note.tsx index 1b9467c72..c05565ab6 100644 --- a/src/components/note/note.tsx +++ b/src/components/note/note.tsx @@ -1,5 +1,5 @@ -export const Note = ({ children }: { children: string }) => { +export const Note = ({ children }: { children: React.ReactNode }) => { return ( -

{children}

+

{children}

); }; diff --git a/src/components/ticket-tiers/ticket-tiers.astro b/src/components/ticket-tiers/ticket-tiers.astro new file mode 100644 index 000000000..de1040436 --- /dev/null +++ b/src/components/ticket-tiers/ticket-tiers.astro @@ -0,0 +1,212 @@ +--- +import { Title } from "../typography/title"; + +interface Props { + ticketShopLink: string; +} + +interface TicketTierProps { + title: string; + educationPrice: number | string; + personalPrice: number | string; + businessPrice: number | string; + lateBusinessPrice?: number | string; + latePersonalPrice?: number | string; + features: string[]; +} + +const tiers: TicketTierProps[] = [ + { + title: "Tutorial Only", + educationPrice: 100, + personalPrice: 200, + businessPrice: 400, + features: [ + "Access to Workshop/Tutorial Days (8-9 July)", + "Access to Sprint Weekend (13-14 July)", + "Does NOT include the main Conference Days", + "Break refreshments and light lunch included", + "Free childcare available if needed", + "T-shirt" + ], + }, + { + title: "Conference Only", + educationPrice: 135, + personalPrice: 300, + businessPrice: 500, + latePersonalPrice: 450, + lateBusinessPrice: 750, + features: [ + "Access to Conference Days (10-12 July)", + "Access to Sprint Weekend (13-14 July)", + "Limited access to specific sponsored workshops", + "Break refreshments and light lunch included", + "Free childcare available if needed", + "T-shirt" + ], + }, + { + title: "Combined", + educationPrice: 210, + personalPrice: 450, + businessPrice: 800, + latePersonalPrice: 675, + lateBusinessPrice: 1200, + features: [ + "Access to ALL conference dates (8-14 July)", + "Workshop/Tutorial Days (8-9 July)", + "Conference Days (10-12 July)", + "Sprint Weekend (13-14 July)", + "Break refreshments and light lunch included", + "Free childcare available if needed", + "T-shirt", + "Limited to only 300, due to Tutorial capacity" + ], + }, +]; + +const formatPrice = (price: number | string) => { + if (typeof price === "string") return price; + return new Intl.NumberFormat("en", { + style: "currency", + currency: "EUR", + maximumFractionDigits: 0, + minimumFractionDigits: 0, + }).format(price); +}; +--- + +
+
+

Ticket Types

+

Choose the ticket that best fits your conference needs

+

Regular tickets available until 21 June 2024, after which Late-bird rates apply

+
+ +
+ {tiers.map((tier) => ( +
+
+ + {tier.title} + + +
+
Education: {formatPrice(tier.educationPrice)}
+
Personal: {formatPrice(tier.personalPrice)} + {tier.latePersonalPrice && ( + (Late: {formatPrice(tier.latePersonalPrice)}) + )} +
+
Business: {formatPrice(tier.businessPrice)} (+ VAT) + {tier.lateBusinessPrice && ( + (Late: {formatPrice(tier.lateBusinessPrice)} + VAT) + )} +
+
+
+ +

This ticket includes:

+
    + {tier.features.map((feature) => ( +
  • + ✔️ + +
  • + ))} +
+
+ ))} +
+ +
+

Remote Tickets

+

For those who cannot attend in person but want to participate virtually

+
+ +
+
+
+ + Remote Personal + +
€80
+
Conference days only
+
+ +

This ticket includes:

+
    +
  • + ✔️ + Remote participation for Conference Days (10-12 July) +
  • +
  • + ✔️ + Watch live talks, keynotes & panels in all 6 tracks +
  • +
  • + ✔️ + Live text-based Q&A +
  • +
  • + ✔️ + Interact with speakers and attendees in chat channels +
  • +
+
+ +
+
+ + Remote Business + +
€150
+
Conference days only
+
+ +

This ticket includes:

+
    +
  • + ✔️ + Remote participation for Conference Days (10-12 July) +
  • +
  • + ✔️ + Watch live talks, keynotes & panels in all 6 tracks +
  • +
  • + ✔️ + Live text-based Q&A +
  • +
  • + ✔️ + Interact with speakers and attendees in chat channels +
  • +
  • + ✔️ + Proper VAT invoice listing company name +
  • +
+
+
+
+ + diff --git a/src/pages/tickets.astro b/src/pages/tickets.astro new file mode 100644 index 000000000..8e9368630 --- /dev/null +++ b/src/pages/tickets.astro @@ -0,0 +1,189 @@ +--- +import Layout from "../layouts/Layout.astro"; +import TicketTiers from "../components/ticket-tiers/ticket-tiers.astro"; +import ButtonLink from "../components/button-link/button-link.astro"; +import { Title } from "../components/typography/title"; +import BenefitsList from "../components/benefits-list/benefits-list.astro"; +import BenefitItem from "../components/benefits-list/benefit-item.astro"; +import TitleWithCta from "../components/hero-section/title-with-cta.astro"; +import { Note } from "../components/note"; +--- + + +
+ + +
+ The What, Where and When of EuroPython 2025 +

+ EuroPython 2025 will be held on 14-20 July at the + Prague Congress Centre (PCC), Czech Republic. + For those who cannot physically join us but still want to support the community, + we have remote ticket options. +

+ +
+

The conference will follow this timeline:

+
    +
  • + 📅 + Two Workshop/Tutorial Days (14-15 July, Mon-Tue) +
  • +
  • + 📅 + Three Conference Days (16-18 July, Wed-Fri) +
  • +
  • + 📅 + Sprint Weekend (19-20 July, Sat-Sun) +
  • +
+
+
+ +
+ Which Ticket Tier Should I Buy? + +
+

+ Each ticket type is available in three payment tiers. We encourage and trust you to pick a + fair ticket tier that fits your personal circumstance. The money you spend will be put + straight back into the community to support our diversity initiatives, + financial aid programmes and + other grants + offered to the European Python community. +

+ + + + For attendees whose company/business is paying for them to attend, or if you use Python professionally. + As someone with the means to afford this tier you help us keep the conference affordable for everyone. Thank you! + + + For those who enjoy Python as a hobbyist or use it as a freelancer. + + + For students, and teachers working in the education sector (your main employment is at a school, college or university). + We subsidise Education Tickets to make it accessible to everyone. + + + + +

If you need a proper VAT invoice listing your company's name, please purchase a business ticket. + Personal Tickets do not include a company name. We will list the ticket tier and type on your conference + badge to accommodate the registration staff.

+
+
+
+ + + +
+ Volume Discounts + +
+

+ Is your company attending the conference as a team? We offer the following volume discounts: +

+ +
+
    +
  • + 💰 + Get 5 business tickets of any type for the price of 4 +
  • +
  • + 💰 + Get 10 business tickets of any type for the price of 8 +
  • +
  • + 💰 + Get 15 business tickets of any type for the price of 11 +
  • +
+ +
+

Notes:

+
    +
  • Volume discount will only apply to business tickets.
  • +
  • The discount will apply automatically once you have enough items in your basket.
  • +
  • If you choose different types of tickets (e.g. Conference Only & Combined) the discount will apply to the item with the lower price.
  • +
+
+ +
+

If you are interested in buying lots of tickets, please consider sponsoring the event!

+ Learn About Sponsorship +
+
+
+
+ +
+ Additional Information + +
+
+

Core Developer & Fellow Grants

+

+ As part of the GvR grant, we are offering free combined tickets to Python Core Developers. + We are also offering free combined tickets to all of our EuroPython Fellows, as an appreciation + for their major contribution to the past EuroPython conferences and Society. +

+

+ Please check out our grant page for details on how to apply for the + GvR grant or + EuroPython Fellow grant. +

+
+ +
+

Refund Policy

+

+ We understand things can be complicated at times and you may not be able to attend after booking your ticket. + Therefore, we aim to offer a full refund of your ticket(s) if your circumstances change. +

+

+ Before 8 June 2025, you can request a full refund from the order details link in your order confirmation email. + After that date, please email us at refunds@europython.eu + if you need a refund due to special circumstances. +

+
+
+ +
+

Important Notes

+
    +
  • + 📝 + Every ticket includes break refreshments and a light lunch for each day. +
  • +
  • + 👶 + Free Childcare is available at the conference for those who need it. Please make sure to register a ticket for yourself and select how many children will require childcare at checkout. +
  • +
  • + + We encourage you to book your ticket early. This makes it easier for us to plan for the event and arrange important things like catering, badge printing, and other logistics. +
  • +
+
+
+ +
+ Questions? +

+ If you have any questions, please check our FAQ. + If you still have questions, we're happy to help so don't hesitate to email our + EuroPython Helpdesk + (staffed by wonderful volunteers). +

+ Get Your Ticket Now! +
+
+
From ad1ba4cee544a2b84ca251f13d4c083b4a35c306 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 13:02:52 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../hero-section/title-with-cta.astro | 4 +- src/components/note/note.tsx | 4 +- .../ticket-tiers/ticket-tiers.astro | 8 ++-- src/pages/tickets.astro | 46 +++++++++---------- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/components/hero-section/title-with-cta.astro b/src/components/hero-section/title-with-cta.astro index 31bd53948..fa17c2697 100644 --- a/src/components/hero-section/title-with-cta.astro +++ b/src/components/hero-section/title-with-cta.astro @@ -15,12 +15,12 @@ const { title, subtitle, buttonText, buttonUrl } = Astro.props;
{title}

{subtitle}

- + {buttonText && buttonUrl && (
{buttonText}
)} - +
diff --git a/src/components/note/note.tsx b/src/components/note/note.tsx index c05565ab6..e9790626f 100644 --- a/src/components/note/note.tsx +++ b/src/components/note/note.tsx @@ -1,5 +1,7 @@ export const Note = ({ children }: { children: React.ReactNode }) => { return ( -

{children}

+

+ {children} +

); }; diff --git a/src/components/ticket-tiers/ticket-tiers.astro b/src/components/ticket-tiers/ticket-tiers.astro index de1040436..e95ad8d4a 100644 --- a/src/components/ticket-tiers/ticket-tiers.astro +++ b/src/components/ticket-tiers/ticket-tiers.astro @@ -83,7 +83,7 @@ const formatPrice = (price: number | string) => {

Choose the ticket that best fits your conference needs

Regular tickets available until 21 June 2024, after which Late-bird rates apply

- +
{tiers.map((tier) => (
@@ -91,7 +91,7 @@ const formatPrice = (price: number | string) => { {tier.title} - +
Education: {formatPrice(tier.educationPrice)}
Personal: {formatPrice(tier.personalPrice)} @@ -124,7 +124,7 @@ const formatPrice = (price: number | string) => {

Remote Tickets

For those who cannot attend in person but want to participate virtually

- +
@@ -155,7 +155,7 @@ const formatPrice = (price: number | string) => {
- +
diff --git a/src/pages/tickets.astro b/src/pages/tickets.astro index 8e9368630..2386b591e 100644 --- a/src/pages/tickets.astro +++ b/src/pages/tickets.astro @@ -21,7 +21,7 @@ import { Note } from "../components/note"; <div class="my-16 text-center"> <Title level={2}>The What, Where and When of EuroPython 2025

- EuroPython 2025 will be held on 14-20 July at the + EuroPython 2025 will be held on 14-20 July at the Prague Congress Centre (PCC), Czech Republic. For those who cannot physically join us but still want to support the community, we have remote ticket options. @@ -48,11 +48,11 @@ import { Note } from "../components/note";

Which Ticket Tier Should I Buy? - +

- Each ticket type is available in three payment tiers. We encourage and trust you to pick a - fair ticket tier that fits your personal circumstance. The money you spend will be put + Each ticket type is available in three payment tiers. We encourage and trust you to pick a + fair ticket tier that fits your personal circumstance. The money you spend will be put straight back into the community to support our diversity initiatives, financial aid programmes and other grants @@ -61,21 +61,21 @@ import { Note } from "../components/note"; - For attendees whose company/business is paying for them to attend, or if you use Python professionally. + For attendees whose company/business is paying for them to attend, or if you use Python professionally. As someone with the means to afford this tier you help us keep the conference affordable for everyone. Thank you! For those who enjoy Python as a hobbyist or use it as a freelancer. - For students, and teachers working in the education sector (your main employment is at a school, college or university). + For students, and teachers working in the education sector (your main employment is at a school, college or university). We subsidise Education Tickets to make it accessible to everyone. - + -

If you need a proper VAT invoice listing your company's name, please purchase a business ticket. - Personal Tickets do not include a company name. We will list the ticket tier and type on your conference +

If you need a proper VAT invoice listing your company's name, please purchase a business ticket. + Personal Tickets do not include a company name. We will list the ticket tier and type on your conference badge to accommodate the registration staff.

@@ -85,7 +85,7 @@ import { Note } from "../components/note";
Volume Discounts - +

Is your company attending the conference as a team? We offer the following volume discounts: @@ -106,7 +106,7 @@ import { Note } from "../components/note"; Get 15 business tickets of any type for the price of 11 - +

Notes:

    @@ -115,7 +115,7 @@ import { Note } from "../components/note";
  • If you choose different types of tickets (e.g. Conference Only & Combined) the discount will apply to the item with the lower price.
- +

If you are interested in buying lots of tickets, please consider sponsoring the event!

Learn About Sponsorship @@ -126,36 +126,36 @@ import { Note } from "../components/note";
Additional Information - +

Core Developer & Fellow Grants

- As part of the GvR grant, we are offering free combined tickets to Python Core Developers. - We are also offering free combined tickets to all of our EuroPython Fellows, as an appreciation + As part of the GvR grant, we are offering free combined tickets to Python Core Developers. + We are also offering free combined tickets to all of our EuroPython Fellows, as an appreciation for their major contribution to the past EuroPython conferences and Society.

- Please check out our grant page for details on how to apply for the - GvR grant or + Please check out our grant page for details on how to apply for the + GvR grant or EuroPython Fellow grant.

- +

Refund Policy

- We understand things can be complicated at times and you may not be able to attend after booking your ticket. + We understand things can be complicated at times and you may not be able to attend after booking your ticket. Therefore, we aim to offer a full refund of your ticket(s) if your circumstances change.

- Before 8 June 2025, you can request a full refund from the order details link in your order confirmation email. - After that date, please email us at refunds@europython.eu + Before 8 June 2025, you can request a full refund from the order details link in your order confirmation email. + After that date, please email us at refunds@europython.eu if you need a refund due to special circumstances.

- +

Important Notes

    @@ -179,7 +179,7 @@ import { Note } from "../components/note"; Questions?

    If you have any questions, please check our FAQ. - If you still have questions, we're happy to help so don't hesitate to email our + If you still have questions, we're happy to help so don't hesitate to email our EuroPython Helpdesk (staffed by wonderful volunteers).

    From 29033f2e6613627f32f996df57a5df8d0a5c161c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mia=20Baji=C4=87?= <38294198+clytaemnestra@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:17:33 +0100 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: Theofanis Petkos --- .../ticket-tiers/ticket-tiers.astro | 22 +++++++++---------- src/pages/tickets.astro | 7 +++--- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/components/ticket-tiers/ticket-tiers.astro b/src/components/ticket-tiers/ticket-tiers.astro index e95ad8d4a..a65302570 100644 --- a/src/components/ticket-tiers/ticket-tiers.astro +++ b/src/components/ticket-tiers/ticket-tiers.astro @@ -22,8 +22,8 @@ const tiers: TicketTierProps[] = [ personalPrice: 200, businessPrice: 400, features: [ - "Access to Workshop/Tutorial Days (8-9 July)", - "Access to Sprint Weekend (13-14 July)", + "Access to Workshop/Tutorial Days (14-15 July)", + "Access to Sprint Weekend (19-20 July)", "Does NOT include the main Conference Days", "Break refreshments and light lunch included", "Free childcare available if needed", @@ -38,8 +38,8 @@ const tiers: TicketTierProps[] = [ latePersonalPrice: 450, lateBusinessPrice: 750, features: [ - "Access to Conference Days (10-12 July)", - "Access to Sprint Weekend (13-14 July)", + "Access to Conference Days (16-18 July)", + "Access to Sprint Weekend (19-20 July)", "Limited access to specific sponsored workshops", "Break refreshments and light lunch included", "Free childcare available if needed", @@ -54,10 +54,10 @@ const tiers: TicketTierProps[] = [ latePersonalPrice: 675, lateBusinessPrice: 1200, features: [ - "Access to ALL conference dates (8-14 July)", - "Workshop/Tutorial Days (8-9 July)", - "Conference Days (10-12 July)", - "Sprint Weekend (13-14 July)", + "Access to ALL conference dates (14-20 July)", + "Workshop/Tutorial Days (14-15 July)", + "Conference Days (16-18 July)", + "Sprint Weekend (19-20 July)", "Break refreshments and light lunch included", "Free childcare available if needed", "T-shirt", @@ -81,7 +81,7 @@ const formatPrice = (price: number | string) => {

    Ticket Types

    Choose the ticket that best fits your conference needs

    -

    Regular tickets available until 21 June 2024, after which Late-bird rates apply

    +

    Regular tickets available until 27 June 2025, after which Late-bird rates apply

    @@ -139,7 +139,7 @@ const formatPrice = (price: number | string) => {
    • ✔️ - Remote participation for Conference Days (10-12 July) + Remote participation for Conference Days (16-18 July)
    • ✔️ @@ -169,7 +169,7 @@ const formatPrice = (price: number | string) => {
      • ✔️ - Remote participation for Conference Days (10-12 July) + Remote participation for Conference Days (16-18 July)
      • ✔️ diff --git a/src/pages/tickets.astro b/src/pages/tickets.astro index 2386b591e..18bc1fcd0 100644 --- a/src/pages/tickets.astro +++ b/src/pages/tickets.astro @@ -40,7 +40,7 @@ import { Note } from "../components/note";
      • 📅 - Sprint Weekend (19-20 July, Sat-Sun) + Sprints Weekend (19-20 July, Sat-Sun)
    @@ -54,9 +54,8 @@ import { Note } from "../components/note"; Each ticket type is available in three payment tiers. We encourage and trust you to pick a fair ticket tier that fits your personal circumstance. The money you spend will be put straight back into the community to support our diversity initiatives, - financial aid programmes and - other grants - offered to the European Python community. + the financial aid programme and + the EPS Grants programme