Ticket page

This commit is contained in:
Rene Arumetsa
2026-05-01 16:03:18 +03:00
parent aafc2421cf
commit b33c7a2b58
6 changed files with 185 additions and 170 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 KiB

View File

@@ -1,8 +1,76 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla"; import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Link from "next/link"; import Link from "next/link";
import SectionDivider from "@/components/SectionDivider"; import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server"; import { getTranslations, setRequestLocale } from "next-intl/server";
interface TicketCardProps {
title: string;
subtitle: string;
price: string;
features: string[];
buttonText: string;
buttonHref: string;
backgroundImage?: string;
}
function TicketCard({
title,
subtitle,
price,
features,
buttonText,
buttonHref,
backgroundImage,
}: TicketCardProps) {
return (
<div className="relative bg-[#0E0F19] border-r border-[#1F5673] p-8 flex flex-col min-h-[350px]">
{backgroundImage && (
<Image
src={backgroundImage}
alt=""
fill
className="object-cover object-center opacity-40"
/>
)}
<div className="relative z-10 flex flex-col h-full">
<h2
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,1.5rem+2vw,3rem)] leading-none text-[#00A3E0] uppercase`}
>
{title}
</h2>
<h3
className={`${vipnagorgialla.className} font-bold italic text-xl text-[#EEE5E5] uppercase mb-4`}
>
{subtitle}
</h3>
<p
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2.5rem,2rem+2vw,4rem)] leading-none text-[#00A3E0] mb-4`}
>
{price}
</p>
<ul className="flex flex-col gap-1 mb-6 flex-grow">
{features.map((feature, index) => (
<li
key={index}
className="flex items-start gap-2 text-[#EEE5E5] text-sm"
>
<span className="w-1 h-full min-h-[1.25rem] bg-[#00A3E0] flex-shrink-0" />
<span>{feature}</span>
</li>
))}
</ul>
<Link href={buttonHref} target="_blank">
<button
className={`px-4 py-2 bg-[#007CAB] hover:bg-[#00A3E0] text-[#EEE5E5] ${vipnagorgialla.className} font-bold italic uppercase transition`}
>
{buttonText}
</button>
</Link>
</div>
</div>
);
}
export default async function Tickets({ export default async function Tickets({
params, params,
}: { }: {
@@ -11,108 +79,55 @@ export default async function Tickets({
const { locale } = await params; const { locale } = await params;
setRequestLocale(locale); setRequestLocale(locale);
const t = await getTranslations({ locale }); const t = await getTranslations({ locale });
return ( return (
<div> <div className="bg-[#0E0F19]">
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16"> {/* 2x2 Grid */}
<h1 <div className="grid grid-cols-1 md:grid-cols-2 pt-16 md:pt-20">
className={`text-4xl wrap-break-word md:text-5xl lg:text-6xl ${vipnagorgialla.className} font-bold italic text-[#2A2C3F] dark:text-[#EEE5E5] mt-8 md:mt-16 mb-4`} {/* KÜLASTAJA PILET */}
> <TicketCard
{t("tickets.title")} title={t("tickets.visitor.name")}
</h1> subtitle={t("tickets.subtitle")}
price={t("tickets.visitor.price")}
features={t.raw("tickets.visitor.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/visitor_tournament.jpg"
/>
<div className="flex justify-center lg:items-center flex-col lg:flex-row gap-8 md:gap-12 flex-grow mb-16 md:mt-8 lg:mt-0"> {/* TOETAJA PILET */}
<div className="bg-[#007CAB] -skew-x-2 md:-skew-x-5 text-white italic px-8 md:px-12 py-16 hover:scale-103 transition-all duration-150 w-full md:w-xl lg:w-[400px]"> <TicketCard
<h2 title={t("tickets.supporter.name")}
className={`text-6xl ${vipnagorgialla.className} font-bold text-[#EEE5E5] pb-2`} subtitle={t("tickets.subtitle")}
> price={t("tickets.supporter.price")}
{t("tickets.visitor.latePrice")} features={t.raw("tickets.supporter.features")}
</h2> buttonText={t("tickets.buyButton")}
<h3 buttonHref="https://fienta.com/et/tipilan"
className={`text-3xl ${vipnagorgialla.className} font-bold text-[#EEE5E5] pb-4`} backgroundImage="/images/landing/explore_teaser.png"
> />
{t("tickets.visitor.title")}
</h3> {/* LOL TURNIIRI PILET */}
<ul className="pl-4 mb-8 list-[square] marker:text-[#1F5673]"> <TicketCard
{t title={t("tickets.lol.name")}
.raw("tickets.visitor.features") subtitle={t("tickets.subtitle")}
.map((feature: string, index: number) => ( price={t("tickets.lol.price")}
<li key={index} className="text-xl"> features={t.raw("tickets.lol.features")}
{feature} buttonText={t("tickets.buyButton")}
</li> buttonHref="https://fienta.com/et/tipilan"
))} backgroundImage="/images/landing/league_tournament.jpg"
</ul> />
<Link href="https://fienta.com/et/tipilan" target="_blank">
<button {/* CS2 TURNIIRI PILET */}
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold`} <TicketCard
> title={t("tickets.cs2.name")}
{t("tickets.buyTicket")} subtitle={t("tickets.subtitle")}
</button> price={t("tickets.cs2.price")}
</Link> features={t.raw("tickets.cs2.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/compete_teaser.jpg"
/>
</div> </div>
<div className="bg-[#007CAB] -skew-x-2 md:-skew-x-5 text-white italic px-8 md:px-12 py-16 hover:scale-103 transition-all duration-150 w-full md:w-xl lg:w-[400px]">
<h2
className={`text-6xl ${vipnagorgialla.className} font-bold text-[#EEE5E5] pb-2`}
>
{t("tickets.computerParticipant.latePrice")}
</h2>
<h3
className={`text-3xl ${vipnagorgialla.className} font-bold text-[#EEE5E5] pb-4`}
>
{t("tickets.computerParticipant.title")}
</h3>
<ul className="pl-4 mb-8 list-[square] marker:text-[#1F5673]">
{t
.raw("tickets.computerParticipant.features")
.map((feature: string, index: number) => (
<li key={index} className="text-xl">
{feature}
</li>
))}
</ul>
<Link href="https://fienta.com/et/tipilan" target="_blank">
<button
className={`px-4 py-2 bg-[#1F5673] cursor-pointer ${vipnagorgialla.className} font-bold`}
>
{t("tickets.buyTicket")}
</button>
</Link>
</div>
<div className="bg-[#1F5673] -skew-x-2 md:-skew-x-5 text-gray-400 italic px-8 md:px-12 py-16 w-full md:w-xl lg:w-[400px]">
<h2
className={`text-4xl ${vipnagorgialla.className} font-bold pb-2`}
>
<s>{t("tickets.competitor.price")}</s>
</h2>
<h3
className={`text-2xl ${vipnagorgialla.className} font-bold pb-4`}
>
<s>{t("tickets.competitor.title")}</s>
</h3>
<ul className="pl-4 mb-8 list-[square] marker:text-[#007CAB]">
{t
.raw("tickets.competitor.features")
.map((feature: string, index: number) => (
<li key={index} className="text-sm">
{feature}
</li>
))}
</ul>
{/*<Link href="https://fienta.com/et/tipilan" target="_blank">*/}
<button
className={`px-4 py-2 bg-[#007CAB] text-white ${vipnagorgialla.className} font-bold text-xl uppercase opacity-55`}
>
{t("tickets.soldOut")}!
</button>
{/*</Link>*/}
</div>
</div>
</div>
<SectionDivider />
</div> </div>
); );
} }

View File

@@ -8,7 +8,7 @@ const Footer = () => {
const t = useTranslations(); const t = useTranslations();
return ( return (
<div className="flex flex-col justify-center sm:justify-between px-6 py-6 md:px-12 md:py-8 gap-4"> <div className="flex flex-col justify-center sm:justify-between px-6 py-6 md:px-12 md:py-8 gap-4 border-t-3 border-[#1F5673]">
<div className="flex flex-col"> <div className="flex flex-col">
<h2 <h2
className={`text-3xl sm:text-4xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mb-4`} className={`text-3xl sm:text-4xl ${vipnagorgialla.className} font-bold italic uppercase text-[#2A2C3F] dark:text-[#EEE5E5] mb-4`}

View File

@@ -82,45 +82,45 @@
} }
}, },
"tickets": { "tickets": {
"title": "TICKETS AND REGISTRATION", "title": "TICKETS",
"buyNow": "Buy now", "subtitle": "TICKET",
"soldOut": "Sold out", "buyButton": "BUY TICKET FROM FIENTA",
"available": "Available",
"price": "Price",
"includes": "Includes",
"computerParticipant": {
"title": "Computer Participant",
"earlyPrice": "8€",
"latePrice": "10€",
"features": [
"Personal desk, power and internet connection",
"Access to expo area",
"Tournament spectating",
"Ability to participate in mini-tournaments"
]
},
"competitor": {
"title": "Competitor",
"price": "12-15€",
"features": [
"Ability to participate in the CS2 or LoL tournament",
"Personal desk, power and internet connection",
"Access to expo area",
"Tournament spectating",
"Ability to participate in mini-tournaments"
]
},
"visitor": { "visitor": {
"title": "Visitor", "name": "VISITOR",
"earlyPrice": "6€", "price": "8€",
"latePrice": "8€",
"features": [ "features": [
"Access to expo area", "Area access throughout the event",
"Tournament spectating", "Ability to enter and leave the event area",
"Ability to participate in mini-tournaments" "Access to all TipiLAN activities, side events, good vibes and engaging atmosphere."
] ]
}, },
"buyTicket": "BUY TICKETS" "supporter": {
"name": "SUPPORTER",
"price": "25+€",
"features": [
"TipiLAN t-shirt to thank you for your support",
"Opportunity to contribute to TipiLAN's development and future.",
"Everything that comes with the visitor ticket"
]
},
"lol": {
"name": "LOL TOURNAMENT",
"price": "15€",
"features": [
"Right to participate in LoL tournament",
"Personal desk, power and internet connection",
"Access to all TipiLAN activities, side events, good vibes and engaging atmosphere."
]
},
"cs2": {
"name": "CS2 TOURNAMENT",
"price": "20€",
"features": [
"Right to participate in CS2 tournament",
"Personal desk, power and internet connection",
"Access to all TipiLAN activities, side events, good vibes and engaging atmosphere."
]
}
}, },
"tournaments": { "tournaments": {
"title": "Tournaments", "title": "Tournaments",

View File

@@ -82,45 +82,45 @@
} }
}, },
"tickets": { "tickets": {
"title": "PILETID JA REGISTREERIMINE", "title": "PILETID",
"buyNow": "Osta nüüd", "subtitle": "PILET",
"soldOut": "Välja müüdud", "buyButton": "OSTA PILET FIENTAST",
"available": "Saadaval",
"price": "Hind",
"includes": "Sisaldab",
"computerParticipant": {
"title": "Arvutiga osaleja",
"earlyPrice": "8€",
"latePrice": "10€",
"features": [
"Isiklik laud, voolu- ja internetiühendus",
"Ligipääs messialale",
"Turniiride pealt vaatamine",
"Võimalus osaleda miniturniiridel"
]
},
"competitor": {
"title": "Võistleja",
"price": "12-15€",
"features": [
"Võimalus osaleda CS2 või LoL turniiril",
"Isiklik laud, voolu- ja internetiühendus",
"Ligipääs messialale",
"Turniiride pealt vaatamine",
"Võimalus osaleda miniturniiridel"
]
},
"visitor": { "visitor": {
"title": "Külastaja", "name": "KÜLASTAJA",
"earlyPrice": "6€", "price": "8€",
"latePrice": "8€",
"features": [ "features": [
"Ligipääs messialale", "Alade ligipääs kogu ürituse vältel",
"Turniiride pealt vaatamine", "Võimalus ürituse alalt sisse ja välja liikuda",
"Võimalus osaleda miniturniiridel" "Juurdepääs kogu TipiLAN melule, tegevustele, kõrvalsündmustele, headele vibe'dele ja kaasahaaravale atmosfäärile."
] ]
}, },
"buyTicket": "OSTA PILET" "supporter": {
"name": "TOETAJA",
"price": "25+€",
"features": [
"TipiLANi t-särk, et tänada sind meie toetamise eest",
"Võimalust anda oma panus TipiLANi arengusse ja tulevikku.",
"Kõik, mis kaasneb külastaja piletiga"
]
},
"lol": {
"name": "LOL TURNIIRI",
"price": "15€",
"features": [
"Õigus osaleda LoL turniiril",
"Isiklik laud, voolu- ja internetiühendus",
"Juurdepääs kogu TipiLAN melule, tegevustele, kõrvalsündmustele, headele vibe'dele ja kaasahaaravale atmosfäärile."
]
},
"cs2": {
"name": "CS2 TURNIIRI",
"price": "20€",
"features": [
"Õigus osaleda CS2 turniiril",
"Isiklik laud, voolu- ja internetiühendus",
"Juurdepääs kogu TipiLAN melule, tegevustele, kõrvalsündmustele, headele vibe'dele ja kaasahaaravale atmosfäärile."
]
}
}, },
"tournaments": { "tournaments": {
"title": "Turniirid", "title": "Turniirid",