Mini-tournaments updated, new sponsors

This commit is contained in:
2026-09-11 17:53:46 +03:00
parent 5d1e130511
commit 606233bcaa
15 changed files with 360 additions and 152 deletions

1
public/sponsors/tlu.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -254,13 +254,13 @@ export default function Expo() {
className={`relative overflow-hidden ${DIVIDER} min-h-[360px] md:min-h-[480px]`} className={`relative overflow-hidden ${DIVIDER} min-h-[360px] md:min-h-[480px]`}
> >
<Image <Image
src="/images/landing/compete_teaser.jpg" src="/images/miniturniirid/minitournaments.jpg"
alt="" alt=""
fill fill
className="object-cover" className="object-cover"
sizes="100vw" sizes="100vw"
/> />
<div className="absolute inset-0 bg-gradient-to-r from-[#0E0F19] via-[#0E0F19]/85 to-[#0E0F19]/30" /> <div className="absolute inset-0 bg-gradient-to-r from-[#0E0F19] via-[#0E0F19]/50 to-[#0E0F19]/30" />
<div <div
className={`relative z-10 flex flex-col justify-center h-full min-h-[360px] md:min-h-[480px] max-w-2xl gap-6 py-10 ${GUTTER}`} className={`relative z-10 flex flex-col justify-center h-full min-h-[360px] md:min-h-[480px] max-w-2xl gap-6 py-10 ${GUTTER}`}
> >
@@ -272,7 +272,7 @@ export default function Expo() {
<p className="text-[#EEE5E5] text-base md:text-lg max-w-md"> <p className="text-[#EEE5E5] text-base md:text-lg max-w-md">
{t("expo.miniTournaments.description")} {t("expo.miniTournaments.description")}
</p> </p>
<Link href="/miniturniirid" className="w-fit"> <Link href="/turniirid/miniturniirid" className="w-fit">
<button <button
className={`${vipnagorgialla.className} px-4 py-2 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer font-bold italic leading-none uppercase transition`} className={`${vipnagorgialla.className} px-4 py-2 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] cursor-pointer font-bold italic leading-none uppercase transition`}
> >

View File

@@ -1,102 +0,0 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Image from "next/image";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { miniTournaments } from "@/data/miniturniirid";
/** Horizontal padding used by the page (64px at the design width). */
const GUTTER = "px-4 sm:px-8 lg:px-16";
// TODO: replace with the real mini-tournaments rules URL once it exists.
// Placeholder points at the TipiLAN ruleset repo root.
const RULES_URL =
"https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset";
/**
* One mini-tournament tile: a cyan-bordered cover image above a bold caption
* "Title Prize". Games without artwork yet fall back to a text tile.
*/
function MiniCard({ title, prize, image }: (typeof miniTournaments)[number]) {
return (
<div className="flex flex-col gap-3">
<div className="relative aspect-video border-[3px] border-[#00A3E0] overflow-hidden bg-[#0E0F19]">
{image ? (
<Image
src={image}
alt={title}
fill
className="object-cover"
sizes="(max-width: 768px) 100vw, 33vw"
/>
) : (
<span
className={`${vipnagorgialla.className} absolute inset-0 flex items-center justify-center p-4 text-center font-bold italic uppercase text-white/85 leading-tight text-[clamp(1rem,0.8rem+1vw,1.5rem)]`}
>
{title}
</span>
)}
</div>
<span className="font-bold text-white leading-tight text-[clamp(1rem,0.85rem+0.8vw,1.5rem)]">
{title} {prize}
</span>
</div>
);
}
export default async function MiniTournaments({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
<div className="mx-auto w-full max-w-[1920px]">
{/* Header */}
<div className={`${GUTTER} pt-12 md:pt-16`}>
<h1
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.75rem,1.4rem+3vw,3.5rem)]`}
>
{t("minipage.title")}
</h1>
<p className="mt-4 text-[#00A3E0] italic text-lg md:text-xl">
{t("minipage.date")}
</p>
<p className="mt-4 text-[#EEE5E5] max-w-2xl text-base md:text-lg">
{t("minipage.description")}
</p>
{/* Buttons */}
<div className="mt-8 flex flex-wrap gap-4">
<Link
href={RULES_URL}
target="_blank"
rel="noopener noreferrer"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-[#00A3E0] bg-transparent text-[#00A3E0] hover:bg-[#00A3E0] hover:text-[#0A121F] transition`}
>
{t("minipage.readRules")}
</Link>
<Link
href="/piletid"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] transition`}
>
{t("minipage.buyTicket")}
</Link>
</div>
</div>
{/* Game grid */}
<div className={`${GUTTER} py-12 md:py-16`}>
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 lg:gap-8">
{miniTournaments.map((game) => (
<MiniCard key={game.title} {...game} />
))}
</div>
</div>
</div>
</div>
);
}

View File

@@ -0,0 +1,191 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
import Image from "next/image";
import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { miniTournaments } from "@/data/miniturniirid";
/** Horizontal padding used by the page (64px at the design width). */
const GUTTER = "px-4 sm:px-8 lg:px-16";
// TODO: replace with the real mini-tournaments rules URL once it exists.
// Placeholder points at the TipiLAN ruleset repo root.
const RULES_URL =
"https://git.edunaut.ee/slunk/TipiLAN_reeglistik_ruleset";
/**
* One mini-tournament tile: a cyan-bordered cover image above a bold caption
* "Title Prize". Games without artwork yet fall back to a text tile.
*/
function MiniCard({
title,
prizePool,
format,
includesGiftBags,
organizer,
organizerUrl,
image,
organizedBy,
giftBagsLabel,
}: (typeof miniTournaments)[number] & {
organizedBy: string;
giftBagsLabel: string;
}) {
return (
<div className="flex flex-col gap-3">
<div className="relative aspect-video border-[3px] border-[#00A3E0] overflow-hidden bg-[#0E0F19]">
{image ? (
<Image
src={image}
alt={title}
fill
className="object-cover"
sizes="(max-width: 768px) 100vw, 33vw"
/>
) : (
<span
className={`${vipnagorgialla.className} absolute inset-0 flex items-center justify-center p-4 text-center font-bold italic uppercase text-white/85 leading-tight text-[clamp(1rem,0.8rem+1vw,1.5rem)]`}
>
{title}
</span>
)}
</div>
<div className="flex flex-wrap items-center gap-x-2 gap-y-1">
<span className="font-bold text-white leading-tight text-[clamp(1rem,0.85rem+0.8vw,1.5rem)]">
{title}{format ? `, ${format}` : ""}
</span>
<span className="text-xl font-bold leading-none text-white md:text-2xl">-</span>
{prizePool === "giftBags" ? (
<span
className="inline-flex items-center gap-1 text-[#EEE5E5]"
title={giftBagsLabel}
>
<span
className="material-symbols-outlined text-2xl! leading-none! md:text-3xl!"
aria-hidden="true"
>
redeem
</span>
<span className="text-xl font-bold leading-tight md:text-2xl">
{giftBagsLabel}
</span>
</span>
) : (
<span className="text-xl font-bold leading-tight text-[#EEE5E5] md:text-2xl">
{prizePool}
</span>
)}
{includesGiftBags && prizePool !== "giftBags" && (
<>
<span className="text-xl font-bold leading-none text-white md:text-2xl">+</span>
<span
className="inline-flex items-center gap-1 text-[#EEE5E5]"
title={giftBagsLabel}
>
<span
className="material-symbols-outlined text-2xl! leading-none! md:text-3xl!"
aria-hidden="true"
>
redeem
</span>
<span className="text-xl font-bold leading-tight md:text-2xl">
{giftBagsLabel}
</span>
</span>
</>
)}
</div>
{organizer && (
<span className="text-sm italic text-[#EEE5E5]/60">
{organizedBy}: {organizerUrl ? (
<Link
href={organizerUrl}
target="_blank"
rel="noopener noreferrer"
className="text-[#00A3E0] hover:text-[#EEE5EE] transition-colors"
>
{organizer}
</Link>
) : (
<span className="text-[#00A3E0]">{organizer}</span>
)}
</span>
)}
</div>
);
}
export default async function MiniTournaments({
params,
}: {
params: Promise<{ locale: string }>;
}) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19] min-h-screen pt-16 md:pt-20">
<div className="mx-auto w-full max-w-[1920px]">
{/* Header */}
<div className={`${GUTTER} pt-12 md:pt-16`}>
<h1
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.75rem,1.4rem+3vw,3.5rem)]`}
>
{t("minipage.title")}
</h1>
<p className="mt-4 text-[#EEE5E5]/70 italic text-lg md:text-xl">
{t("minipage.date")}
</p>
<p className="mt-4 text-[#EEE5E5] max-w-2xl text-base md:text-lg">
{t("minipage.description")}
</p>
{/* Buttons */}
<div className="mt-8 flex flex-wrap gap-4">
<Link
href={RULES_URL}
target="_blank"
rel="noopener noreferrer"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-[#00A3E0] bg-transparent text-[#00A3E0] hover:bg-[#00A3E0] hover:text-[#0A121F] transition`}
>
{t("minipage.readRules")}
</Link>
<Link
href="/piletid"
className={`${vipnagorgialla.className} font-bold italic leading-none text-lg uppercase px-4 py-3 border-4 border-transparent bg-[#00A3E0] hover:bg-[#E5E5EE] text-[#0A121F] transition`}
>
{t("minipage.buyTicket")}
</Link>
</div>
</div>
{/* Tournament groups */}
<div className={`${GUTTER} py-12 md:py-16`}>
{["simRacing", "fightingGames", "other"].map((category) => {
const games = miniTournaments.filter((game) => game.category === category);
return (
<section key={category} className="mb-14 last:mb-0">
<h2
className={`${vipnagorgialla.className} mb-6 text-3xl font-bold italic uppercase text-[#00A3E0] md:text-4xl`}
>
{t(`minipage.categories.${category}`)}
</h2>
<div className="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 lg:gap-8">
{games.map((game) => (
<MiniCard
key={game.title}
{...game}
organizedBy={t("minipage.organizedBy")}
giftBagsLabel={t("minipage.giftBags")}
/>
))}
</div>
</section>
);
})}
</div>
</div>
</div>
);
}

View File

@@ -77,7 +77,7 @@ export default async function Tourney({
<div className="grid grid-cols-1 auto-rows-fr"> <div className="grid grid-cols-1 auto-rows-fr">
<TournamentCard <TournamentCard
title={t("expo.miniTournaments.title").toUpperCase()} title={t("expo.miniTournaments.title").toUpperCase()}
buttonHref="/miniturniirid" buttonHref="/turniirid/miniturniirid"
backgroundImage="/images/miniturniirid/minitournaments.jpg" backgroundImage="/images/miniturniirid/minitournaments.jpg"
className="border-t-[3px] min-h-[50vh]" className="border-t-[3px] min-h-[50vh]"
/> />

View File

@@ -26,7 +26,6 @@ interface NavItem {
| "/haldus" | "/haldus"
| "/kodukord" | "/kodukord"
| "/messiala" | "/messiala"
| "/miniturniirid"
| "/piletid" | "/piletid"
| "/striim" | "/striim"
| "/turniirid"; | "/turniirid";
@@ -50,7 +49,6 @@ const Header = ({ navItems }: HeaderProps) => {
const navIconByHref: Partial<Record<NavItem["href"], string>> = { const navIconByHref: Partial<Record<NavItem["href"], string>> = {
"/messiala": "festival", "/messiala": "festival",
"/miniturniirid": "rewarded_ads",
"/ajakava": "event_note", "/ajakava": "event_note",
"/piletid": "local_activity", "/piletid": "local_activity",
"/turniirid": "rewarded_ads", "/turniirid": "rewarded_ads",

View File

@@ -9,7 +9,6 @@ interface NavItem {
| "/haldus" | "/haldus"
| "/kodukord" | "/kodukord"
| "/messiala" | "/messiala"
| "/miniturniirid"
| "/piletid" | "/piletid"
| "/striim" | "/striim"
| "/turniirid"; | "/turniirid";

View File

@@ -89,6 +89,22 @@ const highlightedSponsors: Sponsor[] = [
]; ];
const sponsors: Sponsor[] = [ const sponsors: Sponsor[] = [
{
href: "https://www.tlu.ee",
src: "/sponsors/tlu.svg",
alt: "Tallinn Ülikool",
width: 292,
height: 60,
className: "brightness-0 invert scale-115",
},
{
href: "https://www.tlu.ee/dt",
src: "/sponsors/tludti.svg",
alt: "Tallinn Ülikooli Digitehnoloogiate Instituut",
width: 220,
height: 65,
className: "brightness-0 invert scale-115",
},
// Gaming and technology // Gaming and technology
{ {
href: "https://k-space.ee/", href: "https://k-space.ee/",

View File

@@ -11,7 +11,7 @@ type Slide = {
image: string; image: string;
imageAlt: string; imageAlt: string;
hero: string; hero: string;
href: "/turniirid" | "/piletid" | "/messiala" | "/miniturniirid"; href: "/turniirid" | "/piletid" | "/messiala";
flip?: boolean; flip?: boolean;
fullBrightness?: boolean; fullBrightness?: boolean;
}; };

View File

@@ -5,74 +5,160 @@
// convention as src/data/expo.ts). Page headings and button labels are // convention as src/data/expo.ts). Page headings and button labels are
// translated (see the `minipage` block in translations/et.json + en.json). // translated (see the `minipage` block in translations/et.json + en.json).
// //
// Source of truth: the organizers' "MINITURNIIRID" sheet in Google Drive // Cover images live in public/images/miniturniirid/. `image` is optional and
// (TipiLAN 2026 → Messiala, last modified 2026-09-06). Total funded prize pool // games without artwork fall back to a text tile showing the title.
// is 1600€ across all tournaments. Buckshot Roulette is intentionally NOT here:
// per the sheet it is a showcase/side activity, not a funded mini-tournament. export type MiniTournamentCategory = "simRacing" | "fightingGames" | "other";
// export type PrizePool = string | "giftBags";
// Cover images live in public/images/miniturniirid/. `image` is optional: games
// without artwork yet (Avatar Legends, osu!, Counter-Strike 1.6, Rocket League,
// Quake) fall back to a text tile showing the title.
export interface MiniTournament { export interface MiniTournament {
/** Game name (proper noun, shown as-is). */ /** Game name (proper noun, shown as-is). */
title: string; title: string;
/** Prize pool for this tournament, e.g. "350€", or a non-cash prize ("Kinkekott"). */ /** Category used to group tournaments on the page. */
prize: string; category: MiniTournamentCategory;
/** Total prize pool, including non-cash prizes where applicable. */
prizePool: PrizePool;
/** Prizes for first through fourth place. */
placements: string[];
/** Tournament format, when it is part of the published name. */
format?: string;
/** Whether the tournament also awards gift bags alongside its cash pool. */
includesGiftBags?: boolean;
/** Organization running the tournament, when one has been confirmed. */
organizer?: string;
/** Public organizer page. */
organizerUrl?: string;
/** Cover image under /public. Rendered object-cover. Optional. */ /** Cover image under /public. Rendered object-cover. Optional. */
image?: string; image?: string;
} }
export const miniTournaments: MiniTournament[] = [ export const miniTournaments: MiniTournament[] = [
{ title: "WRC", prize: "350€", image: "/images/miniturniirid/wrc.jpg" },
{ {
title: "Gran Turismo 7", title: "GT7",
prize: "200€", category: "simRacing",
organizer: "Red Bull",
organizerUrl: "https://www.redbull.com/ee-et/",
prizePool: "200€",
placements: ["100€", "60€", "40€"],
image: "/images/miniturniirid/gran_turismo.jpg", image: "/images/miniturniirid/gran_turismo.jpg",
}, },
{ {
title: "Super Smash Bros. Ultimate", title: "WRC, Dirt Rally 2",
prize: "100€", category: "simRacing",
image: "/images/miniturniirid/super_smash_bros.jpg", organizer: "EVAL",
organizerUrl: "https://www.simracing.ee/",
prizePool: "350€",
placements: ["200€", "100€", "50€", "Kinkekott ainult"],
includesGiftBags: true,
image: "/images/miniturniirid/wrc.jpg",
},
{
title: "Tekken 8",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/tekken8.jpg",
}, },
{ {
title: "Street Fighter 6", title: "Street Fighter 6",
prize: "100€", category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/street_fighter.jpg", image: "/images/miniturniirid/street_fighter.jpg",
}, },
{ title: "Tekken 8", prize: "100€", image: "/images/miniturniirid/tekken8.jpg" }, {
{ title: "2XKO", prize: "100€", image: "/images/miniturniirid/2xko.png" }, title: "2XKO",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/2xko.png",
},
{
title: "Super Smash Bros. Ultimate",
category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/super_smash_bros.jpg",
},
{ {
title: "Invincible Vs.", title: "Invincible Vs.",
prize: "100€", category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/invincible_vs.png", image: "/images/miniturniirid/invincible_vs.png",
}, },
{ {
title: "Marvel Tokon", title: "Marvel Tokon: Fighting Souls",
prize: "100€", category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/marvel_tokon.png", image: "/images/miniturniirid/marvel_tokon.png",
}, },
{ title: "FC 26", prize: "100€", image: "/images/miniturniirid/fc26.jpg" },
{ {
title: "Avatar Legends", title: "Avatar Legends: The Fighting Game",
prize: "100€", category: "fightingGames",
organizer: "BFGL",
organizerUrl: "https://www.instagram.com/baltic_fighting_game_league/",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/avatar_legends.jpg", image: "/images/miniturniirid/avatar_legends.jpg",
}, },
{ title: "osu!", prize: "100€", image: "/images/miniturniirid/osu.jpg" },
{ {
title: "Dwarf Escape", title: "EA FC",
prize: "50€", category: "other",
image: "/images/miniturniirid/dwarf_escape.png", prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/fc26.jpg",
},
{
title: "osu!",
category: "other",
prizePool: "100€",
placements: ["50€", "30€", "20€"],
image: "/images/miniturniirid/osu.jpg",
}, },
{ {
title: "Counter-Strike 1.6", title: "Counter-Strike 1.6",
prize: "50€", category: "other",
organizer: "K-space",
organizerUrl: "https://k-space.ee/",
prizePool: "giftBags",
placements: ["Kinkekott", "Kinkekott", "Kinkekott", "Kinkekott"],
image: "/images/miniturniirid/cs16.jpg", image: "/images/miniturniirid/cs16.jpg",
}, },
{
title: "Quake",
category: "other",
prizePool: "giftBags",
placements: ["Kinkekott", "Kinkekott", "Kinkekott", "Kinkekott"],
image: "/images/miniturniirid/quake.jpg",
},
{ {
title: "Rocket League", title: "Rocket League",
prize: "50€", category: "other",
format: "2v2",
prizePool: "50€",
placements: ["25€ + 25€", "Kinkekott 2x", "Kinkekott 2x"],
includesGiftBags: true,
image: "/images/miniturniirid/rocket_league.jpg", image: "/images/miniturniirid/rocket_league.jpg",
}, },
{ title: "Quake", prize: "Kinkekott", image: "/images/miniturniirid/quake.jpg" }, {
title: "Dwarf Escape",
category: "other",
prizePool: "50€",
placements: ["25€", "15€", "10€"],
image: "/images/miniturniirid/dwarf_escape.png",
},
]; ];

View File

@@ -120,7 +120,7 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
"schedule.locations.studentHouse", "schedule.locations.studentHouse",
"schedule.locations.lobbyAndLanArea" "schedule.locations.lobbyAndLanArea"
], ],
time: "*01:00", time: "~01:00",
}, },
], ],
sep12: [ sep12: [
@@ -316,7 +316,7 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
{ {
titleKey: "schedule.events.doorsClose", titleKey: "schedule.events.doorsClose",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "*01:30", time: "~01:30",
}, },
], ],
sep13: [ sep13: [
@@ -361,17 +361,17 @@ export const scheduleData: Record<string, ScheduleItem[]> = {
{ {
titleKey: "schedule.events.awardCeremony", titleKey: "schedule.events.awardCeremony",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "18:30", time: "~18:30",
}, },
{ {
titleKey: "schedule.events.closingCeremony", titleKey: "schedule.events.closingCeremony",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "19:00", time: "~19:00",
}, },
{ {
titleKey: "schedule.events.doorsClose", titleKey: "schedule.events.doorsClose",
locationKey: "schedule.locations.auditorium", locationKey: "schedule.locations.auditorium",
time: "19:30", time: "~19:30",
}, },
], ],
}; };

View File

@@ -46,9 +46,9 @@ export const routing = defineRouting({
et: "/turniirid", et: "/turniirid",
en: "/tournaments", en: "/tournaments",
}, },
"/miniturniirid": { "/turniirid/miniturniirid": {
et: "/miniturniirid", et: "/turniirid/miniturniirid",
en: "/minitournaments", en: "/tournaments/minitournaments",
}, },
}, },
}); });

View File

@@ -181,7 +181,16 @@
"date": "11 & 12 September", "date": "11 & 12 September",
"description": "TipiLAN hosts a variety of fun and competitive mini-tournaments. The full prize pool for each tournament is shown next to it.", "description": "TipiLAN hosts a variety of fun and competitive mini-tournaments. The full prize pool for each tournament is shown next to it.",
"readRules": "READ RULES", "readRules": "READ RULES",
"buyTicket": "BUY TICKETS" "buyTicket": "BUY TICKETS",
"organizedBy": "Organized by",
"prizePool": "Prize pool",
"giftBags": "Gifts",
"top": "Top {place}",
"categories": {
"simRacing": "Sim Racing",
"fightingGames": "Fighting Games",
"other": "Other Tournaments"
}
}, },
"cs2page": { "cs2page": {
"title": "COUNTER-STRIKE 2 TOURNAMENT", "title": "COUNTER-STRIKE 2 TOURNAMENT",

View File

@@ -182,7 +182,16 @@
"date": "11. ja 12. september", "date": "11. ja 12. september",
"description": "TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire. Iga turniiri juures on välja toodud terve turniiri auhinnafond.", "description": "TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire. Iga turniiri juures on välja toodud terve turniiri auhinnafond.",
"readRules": "LOE REEGLEID", "readRules": "LOE REEGLEID",
"buyTicket": "OSTA PILET" "buyTicket": "OSTA PILET",
"organizedBy": "Korraldaja",
"prizePool": "Auhinnafond",
"giftBags": "Kinkekotid",
"top": "Top {place}",
"categories": {
"simRacing": "Sim Racing",
"fightingGames": "Võitlusmängud",
"other": "Muud turniirid"
}
}, },
"cs2page": { "cs2page": {
"title": "COUNTER-STRIKE 2 TURNIIR", "title": "COUNTER-STRIKE 2 TURNIIR",