diff --git a/public/images/EXPO/baar.jpg b/public/images/EXPO/baar.jpg
index c38511b..95dc901 100644
Binary files a/public/images/EXPO/baar.jpg and b/public/images/EXPO/baar.jpg differ
diff --git a/public/images/EXPO/chill_ala.jpg b/public/images/EXPO/chill_ala.jpg
index 7352d14..0b0c385 100644
Binary files a/public/images/EXPO/chill_ala.jpg and b/public/images/EXPO/chill_ala.jpg differ
diff --git a/public/images/EXPO/console.jpg b/public/images/EXPO/console.jpg
new file mode 100644
index 0000000..de20a86
Binary files /dev/null and b/public/images/EXPO/console.jpg differ
diff --git a/src/app/[locale]/messiala/page.tsx b/src/app/[locale]/messiala/page.tsx
index 5721527..56e6641 100644
--- a/src/app/[locale]/messiala/page.tsx
+++ b/src/app/[locale]/messiala/page.tsx
@@ -1,5 +1,125 @@
import { vipnagorgialla } from "@/components/Vipnagorgialla";
+import Image from "next/image";
+import Link from "next/link";
import { getTranslations, setRequestLocale } from "next-intl/server";
+import { developers, universities } from "@/data/expo";
+
+/** Thick semi-transparent cyan rule that separates the full-bleed sections. */
+const DIVIDER = "border-t-4 border-[rgba(0,163,224,0.5)]";
+/** Horizontal padding used by the padded sections (64px at the design width). */
+const GUTTER = "px-4 sm:px-8 lg:px-16";
+
+/** Blue gradient placeholder standing in for a venue map (real images TBD). */
+function MapCard({ label }: { label: string }) {
+ return (
+
+
+ {label}
+
+
+ );
+}
+
+/**
+ * Photo tile in the gallery band: the image is faded over the dark background
+ * (as in the design) with a large caption. Caption alignment is configurable so
+ * the middle tile can sit bottom-right like the mockup.
+ */
+function FadedPhoto({
+ image,
+ caption,
+ align = "left",
+ valign = "center",
+}: {
+ image: string;
+ caption: string;
+ align?: "left" | "right";
+ valign?: "center" | "bottom";
+}) {
+ return (
+
+
+
+
+ {caption}
+
+
+
+ );
+}
+
+/** Skewed section heading (no rule underneath — sections are split by DIVIDER). */
+function SectionHeading({ children }: { children: React.ReactNode }) {
+ return (
+
);
}
diff --git a/src/data/expo.ts b/src/data/expo.ts
new file mode 100644
index 0000000..155c8d6
--- /dev/null
+++ b/src/data/expo.ts
@@ -0,0 +1,86 @@
+// Content for the Messiala (expo) page.
+//
+// Titles, studio and team names are proper nouns, so they live here as plain
+// strings rather than in the translation files. Section headings and captions
+// are translated (see the `expo` block in translations/et.json + en.json).
+//
+// NOTE: only the four cards shown in the design mockup are listed here. More
+// logos are available under public/images/EXPO/GameDev logos and
+// public/images/EXPO/ylikoolid if this list should grow later.
+// Paths use %20 for the space in the "GameDev logos" folder name.
+
+export interface DeveloperCard {
+ /** Game / product name (proper noun, shown as-is). */
+ title: string;
+ /** Studio behind it. TODO: confirm the two "Placeholder Gameworks" entries. */
+ studio: string;
+ /** Logo image under /public. Rendered object-contain in a bordered box. */
+ logo: string;
+ /** External link for the game title (opens in a new tab). */
+ url: string;
+}
+
+export interface UniversityCard {
+ /** Game name (proper noun, shown as-is). */
+ title: string;
+ /** Team / course that made it. */
+ team: string;
+ /** Landscape thumbnail under /public. Rendered object-cover. */
+ image: string;
+ /** External link for the game title (opens in a new tab). */
+ url: string;
+}
+
+export const developers: DeveloperCard[] = [
+ {
+ title: "Broken Alliance",
+ studio: "Placeholder Gameworks",
+ logo: "/images/EXPO/GameDev%20logos/broken_alliance.png",
+ url: "https://placeholder.games/",
+ },
+ {
+ title: "Buckshot Roulette",
+ studio: "Mike Klubnika",
+ logo: "/images/EXPO/mklubi.jpg",
+ url: "https://store.steampowered.com/app/2835570/Buckshot_Roulette/",
+ },
+ {
+ title: "CraftCraft Simulator",
+ studio: "Placeholder Gameworks",
+ logo: "/images/EXPO/GameDev%20logos/craftcat_sim.png",
+ url: "https://placeholder.games/",
+ },
+ {
+ title: "CYBER DOC ROGUE",
+ studio: "HRA Interactive",
+ logo: "/images/EXPO/GameDev%20logos/Cyber_Doc_Rogue.png",
+ url: "https://drive.google.com/drive/folders/1R6_3s92byAeHlKMeBP8f5ZnclUl5Wpj5?usp=sharing",
+ },
+];
+
+export const universities: UniversityCard[] = [
+ {
+ title: "Dwarf Escape",
+ team: 'TalTech GameCamp ("Mõmmid")',
+ image: "/images/EXPO/ylikoolid/dwarf_escape.png",
+ url: "https://ihorsylin.itch.io/dwarf-escape",
+ },
+ {
+ title: "Packet Tracers",
+ team: "TalTech IT-teaduskond",
+ image: "/images/EXPO/ylikoolid/packet_tracers.png",
+ url: "https://alacrisdevs.itch.io/packet-tracers",
+ },
+ {
+ title: "OH CRAP!",
+ team: 'TalTech GameCamp ("Skill Issue")',
+ image: "/images/EXPO/ylikoolid/oh_crap.png",
+ url: "https://heavybro.itch.io/oh-crap",
+ },
+ {
+ title: "Void of Hermes",
+ team: 'TalTech GameCamp ("OnlyFun")',
+ image: "/images/EXPO/ylikoolid/void_of_hermes.png",
+ url: "https://ron88.itch.io/voidofhermes",
+ },
+];
diff --git a/translations/en.json b/translations/en.json
index 6f5be1a..4d8f368 100644
--- a/translations/en.json
+++ b/translations/en.json
@@ -861,6 +861,20 @@
"title": "Expo Area",
"comingSoon": "Coming soon",
"description": "The TipiLAN expo area hosts companies, additional activities and lectures.",
+ "mapFoyer": "Foyer map",
+ "mapStudentHouse": "Student house map",
+ "miniTournaments": {
+ "title": "Mini-tournaments",
+ "description": "TipiLAN hosts a variety of fun and competitive mini-tournaments. Regular visitors can take part too! The total prize pool across all tournaments is 1250€.",
+ "cta": "More about mini-tournaments"
+ },
+ "photos": {
+ "chill": "Chill area with live tournament broadcasts",
+ "console": "Lots of different video games and consoles",
+ "bar": "Bar area with drinks and snacks"
+ },
+ "developers": "Estonian game developers",
+ "universities": "Universities",
"areas": {
"bar": "Bar",
"boardGames": "Board Games Area",
diff --git a/translations/et.json b/translations/et.json
index 416640b..02c9184 100644
--- a/translations/et.json
+++ b/translations/et.json
@@ -862,6 +862,20 @@
"title": "Messiala",
"comingSoon": "Tuleb hiljem",
"description": "TipiLANi messialal paiknevad ettevõtted, lisategevused ja toimuvad loengud.",
+ "mapFoyer": "Fuajee kaart",
+ "mapStudentHouse": "Tudengimaja kaart",
+ "miniTournaments": {
+ "title": "Miniturniirid",
+ "description": "TipiLANil toimub mitmeid erinevaid lõbusaid ja võistlushimu tekitavaid miniturniire. Osaleda saavad ka niisama külastajad! Auhinnafond on kõigi turniiride peale 1250€.",
+ "cta": "Miniturniiridest lähemalt"
+ },
+ "photos": {
+ "chill": "Chill-ala koos turniiride otseülekandega",
+ "console": "Palju erinevaid videomänge ja konsoole",
+ "bar": "Baariala jookide ja snäkkidega"
+ },
+ "developers": "Eesti mänguarendajad",
+ "universities": "Ülikoolid",
"areas": {
"bar": "Baar",
"boardGames": "Lauamängude ala",