diff --git a/public/images/landing/compete_hero.png b/public/images/landing/compete_hero.png new file mode 100644 index 0000000..680d4fa Binary files /dev/null and b/public/images/landing/compete_hero.png differ diff --git a/public/images/landing/compete_teaser.jpg b/public/images/landing/compete_teaser.jpg new file mode 100644 index 0000000..aa15dcd Binary files /dev/null and b/public/images/landing/compete_teaser.jpg differ diff --git a/public/images/landing/explore_hero.png b/public/images/landing/explore_hero.png new file mode 100644 index 0000000..61ed1f6 Binary files /dev/null and b/public/images/landing/explore_hero.png differ diff --git a/public/images/landing/explore_teaser.png b/public/images/landing/explore_teaser.png new file mode 100644 index 0000000..6ca7962 Binary files /dev/null and b/public/images/landing/explore_teaser.png differ diff --git a/public/images/landing/main_teaser.jpg b/public/images/landing/main_teaser.jpg new file mode 100644 index 0000000..23a43c1 Binary files /dev/null and b/public/images/landing/main_teaser.jpg differ diff --git a/public/images/landing/play_hero.png b/public/images/landing/play_hero.png new file mode 100644 index 0000000..ec8a6b1 Binary files /dev/null and b/public/images/landing/play_hero.png differ diff --git a/public/images/landing/play_teaser.png b/public/images/landing/play_teaser.png new file mode 100644 index 0000000..ba548c7 Binary files /dev/null and b/public/images/landing/play_teaser.png differ diff --git a/public/images/landing/student_award.png b/public/images/landing/student_award.png new file mode 100644 index 0000000..c41f0f1 Binary files /dev/null and b/public/images/landing/student_award.png differ diff --git a/src/app/[locale]/page.tsx b/src/app/[locale]/page.tsx index 1e47058..1be6354 100644 --- a/src/app/[locale]/page.tsx +++ b/src/app/[locale]/page.tsx @@ -1,8 +1,9 @@ import { vipnagorgialla } from "@/components/Vipnagorgialla"; import Sponsors from "@/components/Sponsors"; +import HeroSection from "@/components/HeroSection"; +import TeaserCarousel from "@/components/TeaserCarousel"; import { Link } from "@/i18n/routing"; import { getTranslations, setRequestLocale } from "next-intl/server"; -import Image from "next/image"; export default async function Home({ params, @@ -15,46 +16,22 @@ export default async function Home({ return (
- {/* Title */} -
- TipiLAN Logo - TipiLAN Logo -
-

- {t("tournaments.prizePool")} -

-

- 10 000€ -

-
+ {/* Hero */} +
+
- {/* Grid of buttons */} -
+ + {/* Nav cards: Piletid + Turniirid */} +
-
+

- {t("navigation.schedule")} + {t("navigation.tickets")}

arrow_right_alt @@ -62,20 +39,21 @@ export default async function Home({
- event_note + confirmation_number

{t("home.sections.schedule.description")}

+ -
+

{t("navigation.tournaments")}

@@ -83,7 +61,6 @@ export default async function Home({ arrow_right_alt
-
trophy @@ -93,47 +70,11 @@ export default async function Home({

- -
-

- {t("navigation.expo")} -

- - arrow_right_alt - -
-
- - weekend - -

- {t("home.sections.expo.description")} -

-
-
- {/* Date */} - -
-

- {t("home.sections.reserveSpot")} -

- - arrow_right_alt - -
-

- {t("home.sections.dateAndLocation")} -

- + + {/* Teaser carousel */} + + {/* Sponsors */}
diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx new file mode 100644 index 0000000..aec1019 --- /dev/null +++ b/src/components/HeroSection.tsx @@ -0,0 +1,75 @@ +import Image from "next/image"; +import { Link } from "@/i18n/routing"; +import { vipnagorgialla } from "@/components/Vipnagorgialla"; +import { useTranslations } from "next-intl"; + +export default function HeroSection() { + const t = useTranslations("home"); + + return ( +
+ {/* Background image */} + + {/* Dark overlay */} +
+ + {/* Content */} +
+ {/* Left: logo + info + CTA */} +
+ TipiLAN Logo +
+

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

+

+ {t("hero.location")} +

+
+ + {t("hero.buyTicket")} + +
+ + {/* Right: prize pool + award */} +
+
+

+ {t("hero.prizePool")} +

+

+ 10 000€ +

+
+
+ TalTech student award +

+ {t("hero.award")} +

+
+
+
+
+ ); +} diff --git a/src/components/TeaserCarousel.tsx b/src/components/TeaserCarousel.tsx new file mode 100644 index 0000000..b81446c --- /dev/null +++ b/src/components/TeaserCarousel.tsx @@ -0,0 +1,101 @@ +"use client"; + +import { useState } from "react"; +import Image from "next/image"; +import { Link } from "@/i18n/routing"; +import { vipnagorgialla } from "@/components/Vipnagorgialla"; +import { useTranslations } from "next-intl"; + +type Slide = { + key: "compete" | "play" | "explore"; + image: string; + imageAlt: string; + href: "/turniirid" | "/piletid" | "/messiala"; +}; + +const slides: Slide[] = [ + { key: "compete", image: "/images/landing/compete_teaser.jpg", imageAlt: "Võistle", href: "/turniirid" }, + { key: "play", image: "/images/landing/play_teaser.png", imageAlt: "Mängi", href: "/piletid" }, + { key: "explore", image: "/images/landing/explore_teaser.png", imageAlt: "Avasta", href: "/messiala" }, +]; + +export default function TeaserCarousel() { + const t = useTranslations("home.teaser"); + const [current, setCurrent] = useState(0); + + const slide = slides[current]; + const title = t(`${slide.key}.title`); + const description = t(`${slide.key}.description`); + const prize = t.raw(`${slide.key}.prize`) as string | null; + + return ( +
+ {/* Heading */} +
+

+ {t("heading")} +

+
+ + {/* Card */} +
+ {/* Background image */} + {slide.imageAlt} + {/* Dark overlay */} +
+ + {/* Content grid */} +
+ {/* Left: text */} +
+
+ +

+ {title} +

+ +

+ {description} +

+
+ {prize && ( +

+ {prize} +

+ )} +
+ + {/* Right: spacer (image shows through the overlay) */} +
+
+
+ + {/* Navigation dots */} +
+ {slides.map((_, i) => ( +
+
+ ); +} diff --git a/translations/en.json b/translations/en.json index 1726bad..431b46e 100644 --- a/translations/en.json +++ b/translations/en.json @@ -35,10 +35,38 @@ } }, "home": { - "title": "TipiLAN 2025", + "title": "TipiLAN 2026", "subtitle": "Estonia's largest student-organized LAN event!", - "welcome": "Welcome to TipiLAN 2025!", + "welcome": "Welcome to TipiLAN 2026!", "description": "Join us at Estonia's largest student-organized LAN event. Games, competitions and much more await you!", + "hero": { + "date": "11–13 OCTOBER 2026", + "location": "TALTECH, EHITAJATE TEE 5", + "buyTicket": "BUY TICKETS", + "prizePool": "PRIZE POOL", + "award": "TALTECH STUDENT OF THE YEAR 2025" + }, + "teaser": { + "heading": "COME TO TIPILAN AND...", + "compete": { + "title": "COMPETE", + "description": "Prove yourself in TipiLAN's CS2 and LoL tournaments: thousands in prize money, players from across Europe, and HLTV-ranked competition that could put you on the map.", + "prize": "2500€", + "link": "/turniirid" + }, + "play": { + "title": "PLAY", + "description": "Enjoy the TipiLAN atmosphere — bring your computer, relax, play with friends and experience one of Estonia's largest gaming events.", + "prize": null, + "link": "/piletid" + }, + "explore": { + "title": "EXPLORE", + "description": "Explore the TipiLAN expo area where companies, mini-competitions and lots more exciting things await you.", + "prize": null, + "link": "/messiala" + } + }, "sections": { "schedule": { "description": "TipiLAN is packed with exciting tournaments, mini-competitions and much more." @@ -51,7 +79,7 @@ }, "reserveSpot": "Reserve your spot today!", "poweredBy": "TipiLAN is powered by...", - "dateAndLocation": "24th-26th Oct. @ TalTech main building" + "dateAndLocation": "11th–13th Oct. @ TalTech" } }, "tickets": { diff --git a/translations/et.json b/translations/et.json index 889e922..7bbbaba 100644 --- a/translations/et.json +++ b/translations/et.json @@ -35,10 +35,38 @@ } }, "home": { - "title": "TipiLAN 2025", + "title": "TipiLAN 2026", "subtitle": "Eesti suurim tudengite korraldatud LAN!", - "welcome": "Tere tulemast TipiLAN 2025 sündmusele!", + "welcome": "Tere tulemast TipiLAN 2026 sündmusele!", "description": "Liitu meiega Eesti suurimal tudengite korraldatud LAN-üritusel. Mängud, võistlused ja palju muud ootavad sind!", + "hero": { + "date": "11.–13. OKTOOBER 2026", + "location": "TALTECH, EHITAJATE TEE 5", + "buyTicket": "OSTA PILET", + "prizePool": "AUHINNAFOND", + "award": "TALTECHI AASTA TUDENGITEÜS 2025" + }, + "teaser": { + "heading": "TULE TIPILANILE JA...", + "compete": { + "title": "VÕISTLE", + "description": "Tõesta end TipiLANi CS2 ja LoL featurniiridel: tuhanded eurod auhinnarahas, mängijad üle kogu Euroopa ja HLTV-reitinguga võistlus, mis viib sind maailmakaardile.", + "prize": "2500€", + "link": "/turniirid" + }, + "play": { + "title": "MÄNGI", + "description": "Naudi TipiLANi atmosfääri – too kaasa arvuti, istutle mugavalt, mängi sõpradega ja koge ühte Eesti suurimat mänguüritust.", + "prize": null, + "link": "/piletid" + }, + "explore": { + "title": "AVASTA", + "description": "Avasta TipiLANi messialat, kus ootavad sind erinevad ettevõtted, mini-võistlused ja palju muud põnevat.", + "prize": null, + "link": "/messiala" + } + }, "sections": { "schedule": { "description": "TipiLAN on pungil põnevatest turniiridest, mini-võistlustest ja paljust muust." @@ -51,7 +79,7 @@ }, "reserveSpot": "Broneeri oma koht juba täna!", "poweredBy": "TipiLANi tõmbab käima...", - "dateAndLocation": "24.-26. okt. TalTechi peahoones" + "dateAndLocation": "11.–13. okt. TalTechis" } }, "tickets": { diff --git a/tsconfig.json b/tsconfig.json index c133409..b575f7d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -11,7 +15,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "incremental": true, "plugins": [ { @@ -19,9 +23,19 @@ } ], "paths": { - "@/*": ["./src/*"] + "@/*": [ + "./src/*" + ] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] }