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..fa17c2697 --- /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..e9790626f 100644 --- a/src/components/note/note.tsx +++ b/src/components/note/note.tsx @@ -1,5 +1,7 @@ -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..a65302570 --- /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 (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", + "T-shirt" + ], + }, + { + title: "Conference Only", + educationPrice: 135, + personalPrice: 300, + businessPrice: 500, + latePersonalPrice: 450, + lateBusinessPrice: 750, + features: [ + "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", + "T-shirt" + ], + }, + { + title: "Combined", + educationPrice: 210, + personalPrice: 450, + businessPrice: 800, + latePersonalPrice: 675, + lateBusinessPrice: 1200, + features: [ + "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", + "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 27 June 2025, 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 (16-18 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 (16-18 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..18bc1fcd0 --- /dev/null +++ b/src/pages/tickets.astro @@ -0,0 +1,188 @@ +--- +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) +
  • +
  • + 📅 + Sprints 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, + the financial aid programme and + the EPS Grants programme +

+ + + + 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! +
+
+