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 Link from "next/link";
import SectionDivider from "@/components/SectionDivider";
import Image from "next/image";
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({
params,
}: {
@@ -11,108 +79,55 @@ export default async function Tickets({
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale });
return (
<div>
<div className="flex flex-col min-h-[90vh] m-6 mt-16 md:m-16">
<h1
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`}
>
{t("tickets.title")}
</h1>
<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">
<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.visitor.latePrice")}
</h2>
<h3
className={`text-3xl ${vipnagorgialla.className} font-bold text-[#EEE5E5] pb-4`}
>
{t("tickets.visitor.title")}
</h3>
<ul className="pl-4 mb-8 list-[square] marker:text-[#1F5673]">
{t
.raw("tickets.visitor.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-[#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-[#0E0F19]">
{/* 2x2 Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 pt-16 md:pt-20">
{/* KÜLASTAJA PILET */}
<TicketCard
title={t("tickets.visitor.name")}
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"
/>
{/* TOETAJA PILET */}
<TicketCard
title={t("tickets.supporter.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.supporter.price")}
features={t.raw("tickets.supporter.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/explore_teaser.png"
/>
<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>
{/* LOL TURNIIRI PILET */}
<TicketCard
title={t("tickets.lol.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.lol.price")}
features={t.raw("tickets.lol.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/league_tournament.jpg"
/>
{/* CS2 TURNIIRI PILET */}
<TicketCard
title={t("tickets.cs2.name")}
subtitle={t("tickets.subtitle")}
price={t("tickets.cs2.price")}
features={t.raw("tickets.cs2.features")}
buttonText={t("tickets.buyButton")}
buttonHref="https://fienta.com/et/tipilan"
backgroundImage="/images/landing/compete_teaser.jpg"
/>
</div>
<SectionDivider />
</div>
);
}

View File

@@ -8,7 +8,7 @@ const Footer = () => {
const t = useTranslations();
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">
<h2
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": {
"title": "TICKETS AND REGISTRATION",
"buyNow": "Buy now",
"soldOut": "Sold out",
"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"
]
},
"title": "TICKETS",
"subtitle": "TICKET",
"buyButton": "BUY TICKET FROM FIENTA",
"visitor": {
"title": "Visitor",
"earlyPrice": "6€",
"latePrice": "8€",
"name": "VISITOR",
"price": "8€",
"features": [
"Access to expo area",
"Tournament spectating",
"Ability to participate in mini-tournaments"
"Area access throughout the event",
"Ability to enter and leave the event area",
"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": {
"title": "Tournaments",

View File

@@ -82,45 +82,45 @@
}
},
"tickets": {
"title": "PILETID JA REGISTREERIMINE",
"buyNow": "Osta nüüd",
"soldOut": "Välja müüdud",
"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"
]
},
"title": "PILETID",
"subtitle": "PILET",
"buyButton": "OSTA PILET FIENTAST",
"visitor": {
"title": "Külastaja",
"earlyPrice": "6€",
"latePrice": "8€",
"name": "KÜLASTAJA",
"price": "8€",
"features": [
"Ligipääs messialale",
"Turniiride pealt vaatamine",
"Võimalus osaleda miniturniiridel"
"Alade ligipääs kogu ürituse vältel",
"Võimalus ürituse alalt sisse ja välja liikuda",
"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": {
"title": "Turniirid",