diff --git a/public/images/miniturniirid/avatar_legends.jpg b/public/images/miniturniirid/avatar_legends.jpg new file mode 100644 index 0000000..1ec9825 Binary files /dev/null and b/public/images/miniturniirid/avatar_legends.jpg differ diff --git a/public/images/miniturniirid/cs16.jpg b/public/images/miniturniirid/cs16.jpg new file mode 100644 index 0000000..907c3f9 Binary files /dev/null and b/public/images/miniturniirid/cs16.jpg differ diff --git a/public/images/miniturniirid/invincible_vs.png b/public/images/miniturniirid/invincible_vs.png new file mode 100644 index 0000000..4833578 Binary files /dev/null and b/public/images/miniturniirid/invincible_vs.png differ diff --git a/public/images/miniturniirid/marvel_tokon.png b/public/images/miniturniirid/marvel_tokon.png new file mode 100644 index 0000000..25c4829 Binary files /dev/null and b/public/images/miniturniirid/marvel_tokon.png differ diff --git a/public/images/miniturniirid/osu.jpg b/public/images/miniturniirid/osu.jpg new file mode 100644 index 0000000..191b576 Binary files /dev/null and b/public/images/miniturniirid/osu.jpg differ diff --git a/public/images/miniturniirid/quake.jpg b/public/images/miniturniirid/quake.jpg new file mode 100644 index 0000000..01f7d00 Binary files /dev/null and b/public/images/miniturniirid/quake.jpg differ diff --git a/public/images/miniturniirid/rocket_league.jpg b/public/images/miniturniirid/rocket_league.jpg new file mode 100644 index 0000000..5f44dff Binary files /dev/null and b/public/images/miniturniirid/rocket_league.jpg differ diff --git a/src/app/[locale]/miniturniirid/page.tsx b/src/app/[locale]/miniturniirid/page.tsx new file mode 100644 index 0000000..3be5215 --- /dev/null +++ b/src/app/[locale]/miniturniirid/page.tsx @@ -0,0 +1,102 @@ +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 ( +
+
+ {image ? ( + {title} + ) : ( + + {title} + + )} +
+ + {title} – {prize} + +
+ ); +} + +export default async function MiniTournaments({ + params, +}: { + params: Promise<{ locale: string }>; +}) { + const { locale } = await params; + setRequestLocale(locale); + const t = await getTranslations({ locale }); + + return ( +
+
+ {/* Header */} +
+

+ {t("minipage.title")} +

+

+ {t("minipage.date")} +

+

+ {t("minipage.description")} +

+ + {/* Buttons */} +
+ + {t("minipage.readRules")} + + + {t("minipage.buyTicket")} + +
+
+ + {/* Game grid */} +
+
+ {miniTournaments.map((game) => ( + + ))} +
+
+
+
+ ); +} diff --git a/src/data/miniturniirid.ts b/src/data/miniturniirid.ts new file mode 100644 index 0000000..5080d67 --- /dev/null +++ b/src/data/miniturniirid.ts @@ -0,0 +1,78 @@ +// Content for the Miniturniirid (mini-tournaments) page. +// +// Game titles and prize amounts are proper nouns / language-neutral, so they +// live here as plain strings rather than in the translation files (same +// convention as src/data/expo.ts). Page headings and button labels are +// translated (see the `minipage` block in translations/et.json + en.json). +// +// Source of truth: the organizers' "MINITURNIIRID" sheet in Google Drive +// (TipiLAN 2026 → Messiala, last modified 2026-09-06). Total funded prize pool +// 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. +// +// 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 { + /** Game name (proper noun, shown as-is). */ + title: string; + /** Prize pool for this tournament, e.g. "350€", or a non-cash prize ("Kinkekott"). */ + prize: string; + /** Cover image under /public. Rendered object-cover. Optional. */ + image?: string; +} + +export const miniTournaments: MiniTournament[] = [ + { title: "WRC", prize: "350€", image: "/images/miniturniirid/wrc.jpg" }, + { + title: "Gran Turismo 7", + prize: "200€", + image: "/images/miniturniirid/gran_turismo.jpg", + }, + { + title: "Super Smash Bros. Ultimate", + prize: "100€", + image: "/images/miniturniirid/super_smash_bros.jpg", + }, + { + title: "Street Fighter 6", + prize: "100€", + 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: "Invincible Vs.", + prize: "100€", + image: "/images/miniturniirid/invincible_vs.png", + }, + { + title: "Marvel Tokon", + prize: "100€", + image: "/images/miniturniirid/marvel_tokon.png", + }, + { title: "FC 26", prize: "100€", image: "/images/miniturniirid/fc26.jpg" }, + { + title: "Avatar Legends", + prize: "100€", + image: "/images/miniturniirid/avatar_legends.jpg", + }, + { title: "osu!", prize: "100€", image: "/images/miniturniirid/osu.jpg" }, + { + title: "Dwarf Escape", + prize: "50€", + image: "/images/miniturniirid/dwarf_escape.png", + }, + { + title: "Counter-Strike 1.6", + prize: "50€", + image: "/images/miniturniirid/cs16.jpg", + }, + { + title: "Rocket League", + prize: "50€", + image: "/images/miniturniirid/rocket_league.jpg", + }, + { title: "Quake", prize: "Kinkekott", image: "/images/miniturniirid/quake.jpg" }, +]; diff --git a/translations/en.json b/translations/en.json index 3e673be..8e0dcbc 100644 --- a/translations/en.json +++ b/translations/en.json @@ -175,6 +175,13 @@ "buyTicket": "BUY TICKETS" } }, + "minipage": { + "title": "Mini-tournaments", + "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.", + "readRules": "READ RULES", + "buyTicket": "BUY TICKETS" + }, "cs2page": { "title": "COUNTER-STRIKE 2 TOURNAMENT", "buyTicket": "BUY TICKET", diff --git a/translations/et.json b/translations/et.json index 254754c..f4eb401 100644 --- a/translations/et.json +++ b/translations/et.json @@ -176,6 +176,13 @@ "buyTicket": "OSTA PILET" } }, + "minipage": { + "title": "Miniturniirid", + "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.", + "readRules": "LOE REEGLEID", + "buyTicket": "OSTA PILET" + }, "cs2page": { "title": "COUNTER-STRIKE 2 TURNIIR", "buyTicket": "OSTA PILET",