-
Notifications
You must be signed in to change notification settings - Fork 72
Tickets page second version #1045
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
1e119c4
Initial idea for the ticket page
artcz ad1ba4c
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 29033f2
Apply suggestions from code review
clytaemnestra 28f3493
Add tickets page in markdown
clytaemnestra 104d840
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] 862690d
Implement custom emoji for ticket tiers features
clytaemnestra ddc1800
Add side-by-side comparison of access for different ticket tiers & up…
clytaemnestra 2a306b6
Update number of speakers
clytaemnestra 1cf8d78
Update headers
clytaemnestra 347e052
Apply suggestions from code review
clytaemnestra 1d96b1e
Apply suggestions from code review
clytaemnestra File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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; | ||
| --- | ||
|
|
||
| <div class="py-12 text-center"> | ||
| <Title level={1} className="mb-4">{title}</Title> | ||
| <p class="text-2xl max-w-3xl mx-auto mb-8">{subtitle}</p> | ||
|
|
||
| {buttonText && buttonUrl && ( | ||
| <div class="mt-8"> | ||
| <ButtonLink url={buttonUrl}>{buttonText}</ButtonLink> | ||
| </div> | ||
| )} | ||
|
|
||
| <slot /> | ||
| </div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,7 @@ | ||
| export const Note = ({ children }: { children: string }) => { | ||
| export const Note = ({ children }: { children: React.ReactNode }) => { | ||
| return ( | ||
| <p className="note text-xl p-4 border-l-4 border-primary">{children}</p> | ||
| <p className="note text-xl p-4 border-l-4 border-primary bg-primary-light my-6"> | ||
| {children} | ||
| </p> | ||
| ); | ||
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,148 @@ | ||
| --- | ||
| 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: [ | ||
| { text: "Access to two full days of workshops and tutorials across six parallel tracks (July 14-15)" }, | ||
| { text: "Access to Sprint Weekend (19-20 July)" }, | ||
| { text: "Light lunch provided each day" }, | ||
| { text: "Break refreshments (coffee, tea, water, and more)" }, | ||
| { text: "Access to in-person networking opportunities during the tutorial days" }, | ||
| { text: "Access to free childcare if needed" }, | ||
| { text: "Conference T-shirt included" }, | ||
| { text: "<strong>Does NOT include</strong> the main Conference Days", icon: "❌" }, // Explicitly setting an "X" | ||
| ], | ||
| }, | ||
| { | ||
| title: "Combined", | ||
| educationPrice: 210, | ||
| personalPrice: 450, | ||
| businessPrice: 800, | ||
| latePersonalPrice: 675, | ||
| lateBusinessPrice: 1200, | ||
| features: [ | ||
| { text: "<strong>Access to ALL conference dates (14-20 July)</strong>" }, | ||
| { text: "Access to two full days of workshops and tutorials across six parallel tracks (July 14-15)" }, | ||
| { text: "<strong>Access to three days of talks across six parallel tracks with 130+ talks (16-18 July)</strong>" }, | ||
| { text: "Access to open spaces throughout the three conference days" }, | ||
| { text: "Access to Sprint Weekend (19-20 July)" }, | ||
| { text: "Access to sponsor booths with opportunities to connect with sponsoring companies" }, | ||
| { text: "Limited access to specific sponsored workshops" }, | ||
| { text: "Light lunch provided each day" }, | ||
| { text: "Break refreshments (coffee, tea, water, and more)" }, | ||
| { text: "Access to in-person networking opportunities throughout the entire conference" }, | ||
| { text: "Access to free childcare if needed" }, | ||
| { text: "Conference T-shirt included" }, | ||
| { text: "<strong>Limited to only 300, due to tutorial capacity</strong>", icon: "⚠️" }, | ||
| ], | ||
| }, | ||
| { | ||
| title: "Conference Only", | ||
| educationPrice: 135, | ||
| personalPrice: 300, | ||
| businessPrice: 500, | ||
| latePersonalPrice: 450, | ||
| lateBusinessPrice: 750, | ||
| features: [ | ||
| { text: "<strong>Access to three days of talks across six parallel tracks with 130+ talks (16-18 July)</strong>" }, | ||
| { text: "Access to open spaces throughout the three conference days" }, | ||
| { text: "Access to Sprint Weekend (19-20 July)" }, | ||
| { text: "Access to sponsor booths with opportunities to connect with sponsoring companies" }, | ||
| { text: "Limited access to specific sponsored workshops" }, | ||
| { text: "Light lunch provided each day" }, | ||
| { text: "Break refreshments (coffee, tea, water, and more)" }, | ||
| { text: "Access to in-person networking opportunities during the main conference days" }, | ||
| { text: "Access to free childcare if needed" }, | ||
| { text: "Conference T-shirt included" }, | ||
| ], | ||
| } | ||
| ]; | ||
|
|
||
|
|
||
| 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); | ||
| }; | ||
| --- | ||
|
|
||
| <div class="ticket-tiers-container"> | ||
| <div class="grid grid-cols-1 md:grid-cols-3 lg:grid-cols-3 gap-10 md:gap-6 lg:gap-10"> | ||
| {tiers.map((tier) => ( | ||
| <div class="bg-white text-black rounded-2xl p-6 pb-20 relative not-prose z-0"> | ||
| <div class="h-[160px]"> | ||
| <Title level={3} className="mt-0 !mb-2"> | ||
| {tier.title} | ||
| </Title> | ||
|
|
||
| <div class="mt-4"> | ||
| <div class="font-bold text-lg">Education: <span class="text-xl">{formatPrice(tier.educationPrice)}</span></div> | ||
| <div class="font-bold text-lg">Personal: <span class="text-xl">{formatPrice(tier.personalPrice)}</span> | ||
| {tier.latePersonalPrice && ( | ||
| <span class="text-sm font-normal ml-2">(Late: {formatPrice(tier.latePersonalPrice)})</span> | ||
| )} | ||
| </div> | ||
| <div class="font-bold text-lg">Business: <span class="text-xl">{formatPrice(tier.businessPrice)} (+ VAT)</span> | ||
| {tier.lateBusinessPrice && ( | ||
| <span class="text-sm font-normal ml-2">(Late: {formatPrice(tier.lateBusinessPrice)} + VAT)</span> | ||
| )} | ||
| </div> | ||
| </div> | ||
| </div> | ||
|
|
||
| <p class="font-bold text-base">This ticket includes:</p> | ||
| <ul class="text-base list-none pl-0"> | ||
| {tier.features.map((feature) => ( | ||
| <li class="flex items-start"> | ||
| <span class="flex-shrink-0 w-6"> | ||
| {feature.icon ? feature.icon : "✔️"} | ||
| </span> | ||
| <span set:html={feature.text}></span> | ||
| </li> | ||
| ))} | ||
| </ul> | ||
| </div> | ||
| ))} | ||
| </div> | ||
|
|
||
| <style is:global> | ||
| .ticket-tiers-container { | ||
| width: 100vw; | ||
| max-width: 1400px; | ||
| margin-left: 50%; | ||
| transform: translateX(-50%); | ||
| position: relative; | ||
| padding: 0 40px; | ||
| } | ||
|
|
||
| @media (max-width: 768px) { | ||
| .ticket-tiers-container { | ||
| width: 100%; | ||
| padding: 0 10px; | ||
| position: relative; | ||
| } | ||
| } | ||
| </style> | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,147 @@ | ||
| --- | ||
| title: Sponsor | ||
| subtitle: | ||
| Sponsoring EuroPython guarantees you highly targeted visibility | ||
| and the opportunity to present yourself and your company to one | ||
| of the largest and most diverse Python communities in Europe and beyond. | ||
| --- | ||
|
|
||
| import TicketTiers from "../../components/ticket-tiers/ticket-tiers.astro"; | ||
|
|
||
|
|
||
| # EuroPython 2025 Tickets | ||
| <div class="text-justify"> | ||
| Discover the latest Python trends, learn from 200+ expert speakers, network with fellow developers, enjoy social events, and explore open spaces to spark new ideas! Organized by the community for the community. | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| </div> | ||
|
|
||
| <div class="text-center"> | ||
| <ButtonLink url="">Registration Starting Soon!</ButtonLink> | ||
| </div> | ||
|
|
||
|
|
||
| ## Where and When? | ||
| 🏛️ <a href="/where" class="text-primary hover:text-primary-hover underline">Prague Congress Centre (PCC)</a>, Czech Republic | ||
|
|
||
| <div class="bg-white text-black p-6 rounded-lg shadow-md w-full"> | ||
| <p class="font-bold text-xl mb-4">A week of all things Python:</p> | ||
| <ul class="list-none space-y-2"> | ||
| <li class="flex items-start"> | ||
| <span><strong>🗓️ Monday–Tuesday, 14–15 July:</strong> Workshops & Tutorials</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span><strong>🗓️ Wednesday–Friday, 16–18 July:</strong> Talks & Open-Spaces</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span><strong>🗓️ Saturday–Sunday, 19–20 July:</strong> Sprints Weekend</span> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
|
|
||
|
|
||
| ## Which Ticket Tier Should I Buy? | ||
| Each ticket type is available in three pricing tiers. We trust you to choose the option that best fits your situation. | ||
|
|
||
| As a non-profit, every ticket you buy goes back into the Python community. Whether by our <a href="/finaid" class="text-primary hover:text-primary-hover underline">financial aid programme</a>, helping those in need of support, like students, attend the conference, or supporting Python communities across Europe through our <a href="https://www.europython-society.org/grants/" class="text-primary hover:text-primary-hover underline">EPS Grants programme</a>. | ||
|
|
||
|
|
||
| <BenefitsList> | ||
| <BenefitItem icon="target" title="Business Tickets"> | ||
| If your company is covering your ticket or you use Python professionally, this is the right tier for you. By choosing this option, you help us keep the conference accessible. Thank you! | ||
| </BenefitItem> | ||
| <BenefitItem icon="network" title="Personal Tickets"> | ||
| Are you a Python enthusiast, hobbyist, or freelancer? This ticket is for you! It’s priced for individuals paying their own way, so you can enjoy the conference at a fair and affordable rate. | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| </BenefitItem> | ||
| <BenefitItem icon="rocket" title="Education Tickets"> | ||
| If you're a student or an educator working in schools or universities, this ticket is for you. We offer subsidized pricing so students and educators can join in and be part of the conference! | ||
| </BenefitItem> | ||
| </BenefitsList> | ||
|
|
||
| <Note>If you need a VAT invoice with your company's name, please purchase a Business Ticket. Personal Tickets do not include a company name. To assist the registration staff, your conference badge will display the ticket tier and type.</Note> | ||
|
|
||
|
|
||
| ## Ticket Prices | ||
| Regular tickets are available until June 27, 2025—late-bird rates apply after. | ||
|
|
||
| Combined tickets are limited to 300 due to tutorial capacity! | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
| <TicketTiers ticketShopLink="https://tickets.europython.eu/" /> | ||
|
|
||
|
|
||
| ### Volume Discounts | ||
| Is your company attending the conference as a team? We offer the following volume discounts: | ||
|
|
||
| <div class="bg-white text-black p-6 rounded-lg shadow-md"> | ||
| <ul class="list-none space-y-4"> | ||
| <li class="flex items-start"> | ||
| <span>💰 Buy 5 business tickets of any type, pay for only 4</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span>💰 Buy 10 business tickets of any type, pay for only 8</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span>💰 Buy 15 business tickets of any type, pay for only 11</span> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
|
|
||
| <Note>Volume discounts apply only to Business Tickets. The discount is automatically applied when you add enough tickets to your basket. | ||
| If purchasing different types of Business Tickets (e.g., Conference Only & Combined), the discount will apply to the lower-priced ticket.</Note> | ||
|
|
||
| #### Sponsorship | ||
| If you're purchasing multiple tickets, please consider sponsoring the event! | ||
|
|
||
| <div class="text-center"> | ||
| <ButtonLink url="/sponsorship/sponsor">Learn About Sponsorship</ButtonLink> | ||
| </div> | ||
|
|
||
|
|
||
| ### Additional Information | ||
| <div class="grid grid-cols-1 md:grid-cols-2 gap-10 max-w-4xl mx-auto"> | ||
| <div class="bg-white text-black p-6 rounded-lg shadow-md"> | ||
| <h5 class="text-xl font-bold mb-4">Special Grants</h5> | ||
| <p> | ||
| Are you a CPython Core Developer or an EPS Fellow? You’re eligible for a free combined ticket! | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| </p> | ||
| <p> | ||
| Please check out our grant page for details on how to apply for the | ||
| <a href="https://www.europython-society.org/core-grant/" class="text-primary hover:text-primary-hover underline">GvR grant</a> or | ||
| <a href="https://www.europython-society.org/europython-society-fellow-grant/" class="text-primary hover:text-primary-hover underline">EuroPython Fellow grant</a>. | ||
| </p> | ||
| </div> | ||
|
|
||
| <div class="bg-white text-black p-6 rounded-lg shadow-md"> | ||
| <h5 class="text-xl font-bold mb-4">Refund Policy</h5> | ||
| <p class="mb-4"> | ||
| We know plans can change! If you can’t attend, you can request a full refund via your order confirmation email until June 8, 2025. | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| </p> | ||
| <p> | ||
| After that, email us at <a href="mailto:[email protected]" class="text-primary hover:text-primary-hover underline">[email protected]</a> if you need a refund due to special circumstances. | ||
| </p> | ||
| </div> | ||
| </div> | ||
|
|
||
| <br></br> | ||
|
|
||
| <div class="bg-white text-black p-6 rounded-lg shadow-md"> | ||
| <h5 class="text-xl font-bold mb-4">Important Notes</h5> | ||
| <ul class="list-none space-y-4"> | ||
| <li class="flex items-start"> | ||
| <span>☕ Every ticket includes break refreshments and a light lunch for each day.</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span>👶 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.</span> | ||
| </li> | ||
| <li class="flex items-start"> | ||
| <span>⏰ 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.</span> | ||
| </li> | ||
| </ul> | ||
| </div> | ||
|
|
||
|
|
||
| ### Questions | ||
| If you have any questions, check our <a href="/faq" class="text-primary hover:text-primary-hover underline">FAQ</a> first. Still need help? Our wonderful volunteer team at the <a href="mailto:[email protected]" class="text-primary hover:text-primary-hover underline">EuroPython Helpdesk</a> is happy to assist—don’t hesitate to reach out! | ||
clytaemnestra marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| <div class="text-center"> | ||
| <ButtonLink url="">Registration Starting Soon!</ButtonLink> | ||
| </div> | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.