Merge pull request #151 from Lapikud/expo_page

Expo page
This commit is contained in:
Renkar
2026-09-08 12:45:17 +03:00
committed by GitHub
27 changed files with 561 additions and 11 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 MiB

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 MiB

After

Width:  |  Height:  |  Size: 7.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

View File

@@ -0,0 +1,14 @@
<svg width="925" height="203" viewBox="0 0 925 203" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M774.05 145V55.4H789.154L825.122 107.752L860.322 55.4H875.554V145H858.658V83.688L823.842 135.4L789.154 84.904V145H774.05Z" fill="white"/>
<path d="M667.8 145V55.4H728.088C734.573 55.4 739.864 56.5094 743.96 58.728C748.056 60.904 750.104 65.64 750.104 72.936V93.48C750.104 99.0267 748.269 103.187 744.6 105.96C740.973 108.733 735.469 110.12 728.088 110.12H722.52L758.104 145H735.384L699.864 110.12H684.696V145H667.8ZM684.696 94.504H726.424C728.685 94.504 730.37 94.0774 731.48 93.224C732.632 92.3707 733.208 90.664 733.208 88.104V77.416C733.208 75.1547 732.632 73.5334 731.48 72.552C730.37 71.528 728.685 71.016 726.424 71.016H684.696V94.504Z" fill="white"/>
<path d="M551.255 72.04C551.255 64.744 553.282 60.008 557.335 57.832C561.431 55.6134 566.7 54.504 573.143 54.504H622.167C628.652 54.504 633.943 55.6134 638.039 57.832C642.135 60.008 644.183 64.744 644.183 72.04V127.592C644.183 135.187 642.22 140.136 638.295 142.44C634.412 144.744 629.036 145.896 622.167 145.896H573.143C566.274 145.896 560.898 144.744 557.015 142.44C553.175 140.093 551.255 135.144 551.255 127.592V72.04ZM568.151 70.12V130.28H627.287V70.12H568.151Z" fill="white"/>
<path d="M485.364 145V71.016H449.78V55.4H537.844V71.016H502.26V145H485.364Z" fill="white"/>
<path d="M352.68 121.704L368.808 118.376V130.28H422.44V107.496H376.488C373.118 107.496 370.067 107.24 367.336 106.728C364.648 106.216 362.344 105.299 360.424 103.976C358.547 102.611 357.096 100.733 356.072 98.344C355.091 95.912 354.6 92.8187 354.6 89.064V72.04C354.6 68.3707 355.134 65.4054 356.2 63.144C357.267 60.84 358.76 59.048 360.68 57.768C362.6 56.488 364.904 55.6347 367.592 55.208C370.28 54.7387 373.246 54.504 376.488 54.504H415.272C418.558 54.504 421.544 54.7387 424.232 55.208C426.92 55.6347 429.224 56.488 431.144 57.768C433.107 59.048 434.622 60.84 435.688 63.144C436.755 65.4054 437.288 68.3707 437.288 72.04V78.44L421.16 81.64V70.12H370.728V91.88H416.552C419.838 91.88 422.824 92.1147 425.512 92.584C428.2 93.0107 430.504 93.864 432.424 95.144C434.387 96.424 435.902 98.216 436.968 100.52C438.035 102.781 438.568 105.747 438.568 109.416V127.592C438.568 135.144 436.606 140.093 432.68 142.44C428.798 144.744 423.422 145.896 416.552 145.896H374.568C371.198 145.896 368.147 145.64 365.416 145.128C362.728 144.659 360.424 143.763 358.504 142.44C356.627 141.075 355.176 139.197 354.152 136.808C353.171 134.419 352.68 131.347 352.68 127.592V121.704Z" fill="white"/>
<path d="M294.918 138.418C294.918 136.81 295.296 135.366 296.051 134.086C296.806 132.773 297.823 131.74 299.103 130.985C300.416 130.197 301.893 129.803 303.534 129.803C305.208 129.803 306.701 130.197 308.014 130.985C309.327 131.74 310.361 132.773 311.115 134.086C311.87 135.366 312.248 136.81 312.248 138.418C312.248 140.027 311.87 141.504 311.115 142.849C310.361 144.162 309.327 145.212 308.014 146C306.701 146.755 305.208 147.132 303.534 147.132C301.893 147.132 300.416 146.755 299.103 146C297.823 145.212 296.806 144.162 296.051 142.849C295.296 141.504 294.918 140.027 294.918 138.418Z" fill="white"/>
<path d="M255.548 72.2523C258.338 72.2523 260.865 72.4985 263.13 72.9908C265.394 73.4831 267.544 74.1723 269.579 75.0585L266.92 81.2123C265.247 80.4903 263.474 79.9487 261.604 79.5877C259.733 79.2267 257.796 79.0462 255.794 79.0462C252.184 79.0462 249.46 79.7518 247.622 81.1631C245.817 82.5744 244.914 84.7405 244.914 87.6615V98.1969H262.49L261.604 104.695H244.914V146H236.644V104.695H224.287V98.1969H236.644V87.8585C236.644 84.6421 237.464 81.8687 239.105 79.5385C240.779 77.2082 243.044 75.4195 245.899 74.1723C248.754 72.8923 251.971 72.2523 255.548 72.2523Z" fill="white"/>
<path d="M186.049 73.2861V133.2C186.049 135.76 186.836 137.582 188.412 138.665C190.02 139.715 192.088 140.24 194.615 140.24C196.19 140.24 197.684 140.076 199.095 139.748C200.506 139.419 201.917 138.976 203.329 138.418L205.544 144.474C204.133 145.163 202.377 145.77 200.276 146.295C198.209 146.853 195.862 147.132 193.236 147.132C188.642 147.132 184.916 145.869 182.061 143.342C179.206 140.782 177.778 137.253 177.778 132.757V79.8338H161.876V73.2861H186.049Z" fill="white"/>
<path d="M113.3 123.009C113.464 127.013 114.235 130.295 115.614 132.855C116.992 135.383 118.814 137.253 121.078 138.468C123.343 139.649 125.804 140.24 128.463 140.24C131.121 140.24 133.517 139.846 135.651 139.058C137.817 138.271 140.032 137.106 142.297 135.563L146.186 141.028C143.757 142.931 140.984 144.425 137.866 145.508C134.781 146.591 131.614 147.132 128.364 147.132C123.343 147.132 119.06 146 115.515 143.735C111.971 141.471 109.263 138.32 107.392 134.283C105.554 130.213 104.635 125.504 104.635 120.154C104.635 114.903 105.571 110.242 107.441 106.172C109.312 102.103 111.938 98.9026 115.318 96.5723C118.699 94.242 122.687 93.0769 127.281 93.0769C131.647 93.0769 135.404 94.1108 138.555 96.1784C141.706 98.2133 144.118 101.134 145.792 104.942C147.499 108.716 148.352 113.229 148.352 118.48C148.352 119.366 148.336 120.203 148.303 120.991C148.27 121.746 148.221 122.418 148.155 123.009H113.3ZM127.38 99.8708C123.54 99.8708 120.323 101.233 117.731 103.957C115.171 106.681 113.71 110.898 113.349 116.609H140.377C140.278 111.063 139.064 106.894 136.734 104.105C134.403 101.282 131.286 99.8708 127.38 99.8708Z" fill="white"/>
<path d="M65.3636 140.289C69.3349 140.289 72.4693 139.551 74.7667 138.074C77.097 136.564 78.2621 134.562 78.2621 132.068C78.2621 130.492 77.9667 129.13 77.3759 127.982C76.818 126.833 75.6529 125.799 73.8806 124.88C72.1083 123.961 69.3842 123.042 65.7083 122.123C62.1308 121.237 59.0129 120.219 56.3544 119.071C53.7288 117.889 51.6775 116.363 50.2006 114.492C48.7565 112.622 48.0344 110.193 48.0344 107.206C48.0344 104.285 48.8549 101.774 50.4959 99.6738C52.1698 97.5405 54.4836 95.9159 57.4375 94.8C60.3913 93.6513 63.8211 93.0769 67.7267 93.0769C71.8949 93.0769 75.5216 93.6349 78.6067 94.7508C81.7247 95.8338 84.3667 97.1795 86.5329 98.7877L82.8898 104.4C80.9206 103.054 78.7544 101.955 76.3913 101.102C74.0283 100.215 71.1729 99.7723 67.8252 99.7723C63.7554 99.7723 60.8672 100.412 59.1606 101.692C57.4539 102.939 56.6006 104.564 56.6006 106.566C56.6006 108.076 57.0108 109.339 57.8313 110.357C58.6847 111.342 60.1124 112.244 62.1144 113.065C64.1165 113.852 66.8734 114.722 70.3852 115.674C73.7657 116.56 76.7031 117.627 79.1975 118.874C81.7247 120.121 83.6939 121.762 85.1052 123.797C86.5165 125.832 87.2221 128.457 87.2221 131.674C87.2221 135.35 86.1718 138.336 84.0713 140.634C81.9708 142.898 79.2467 144.556 75.899 145.606C72.5842 146.624 69.0724 147.132 65.3636 147.132C60.6703 147.132 56.6662 146.459 53.3513 145.114C50.0693 143.735 47.3124 142.078 45.0806 140.142L49.8067 134.677C51.8416 136.351 54.1718 137.713 56.7975 138.763C59.4559 139.78 62.3113 140.289 65.3636 140.289Z" fill="white"/>
<path d="M7 192V8H42L30 20H19L19 180H22.5H30L42 192H22.5H14.7666H7Z" fill="#92B32D"/>
<path d="M918 192V8H883L895 20H906L906 180H902.5H895L883 192H902.5H910.233H918Z" fill="#92B32D"/>
</svg>

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 309 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 235 KiB

View File

@@ -1,5 +1,153 @@
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";
/** Venue map card: the map SVG rendered transparent over the page background. */
function MapCard({ image, label }: { image: string; label: string }) {
return (
<div className="relative aspect-[4/3] overflow-hidden">
<Image
src={image}
alt={label}
fill
className="object-contain p-4 md:p-6"
sizes="(max-width: 768px) 100vw, 50vw"
// next/image's optimizer rejects SVG (400) unless dangerouslyAllowSVG
// is enabled globally; serve the map SVG as-is instead.
unoptimized
/>
</div>
);
}
/**
* 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 (
<div className="relative min-h-[260px] md:min-h-0 overflow-hidden bg-[#0A121F]">
<Image
src={image}
alt=""
fill
className="object-cover opacity-45"
sizes="(max-width: 768px) 100vw, 50vw"
/>
<div
className={`absolute inset-0 flex p-6 md:p-9 ${
valign === "bottom" ? "items-end" : "items-center"
} ${align === "right" ? "justify-end" : "justify-start"}`}
>
<h3
className={`${vipnagorgialla.className} font-bold italic uppercase text-white leading-tight max-w-[85%] text-[clamp(1.25rem,0.9rem+1.6vw,2.25rem)] ${
align === "right" ? "text-right" : "text-left"
}`}
>
{caption}
</h3>
</div>
</div>
);
}
/** Skewed section heading (no rule underneath — sections are split by DIVIDER). */
function SectionHeading({ children }: { children: React.ReactNode }) {
return (
<div className="mb-8 md:mb-10 w-fit origin-left -skew-x-6">
<h2
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.5rem,1rem+2.5vw,2.5rem)]`}
>
{children}
</h2>
</div>
);
}
/**
* One showcase card: a cyan-bordered logo box above a linked title and a
* studio/team line. Logos render object-contain; screenshots (`cover`) fill the
* box. Teams without a logo yet fall back to their name set inside the box.
*/
function GameCard({
image,
title,
subtitle,
url,
cover = false,
}: {
image?: string;
title: string;
subtitle: string;
url?: string;
cover?: boolean;
}) {
const titleEl = url ? (
<a
href={url}
target="_blank"
rel="noopener noreferrer"
className="w-fit font-bold underline text-white leading-tight text-[clamp(1rem,0.85rem+0.8vw,1.5rem)] hover:text-[#00A3E0] transition"
>
{title}
</a>
) : (
<span className="font-bold text-white leading-tight text-[clamp(1rem,0.85rem+0.8vw,1.5rem)]">
{title}
</span>
);
return (
<div className="flex flex-col gap-3">
<div
className={`relative aspect-[3/2] border-4 border-[#00A3E0] overflow-hidden ${
cover ? "bg-black" : "bg-[#0E0F19]"
}`}
>
{image ? (
<Image
src={image}
alt={title}
fill
className={cover ? "object-cover" : "object-contain p-5 md:p-7"}
sizes="(max-width: 768px) 50vw, 25vw"
// next/image's optimizer rejects SVG (400) unless dangerouslyAllowSVG
// is enabled globally; serve SVG logos as-is instead.
unoptimized={image.endsWith(".svg")}
/>
) : (
<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>
{titleEl}
<span className="text-white/70 leading-tight text-[clamp(0.9rem,0.8rem+0.5vw,1.25rem)]">
{subtitle}
</span>
</div>
);
}
export default async function Expo({
params,
@@ -11,17 +159,120 @@ export default async function Expo({
const t = await getTranslations({ locale });
return (
<div className="bg-[#0E0F19] min-h-screen flex flex-col items-center justify-center">
<div className="bg-[#0E0F19] min-h-screen">
<div className="mx-auto w-full max-w-[1920px]">
{/* Page title */}
<div className={`${GUTTER} pt-12 md:pt-16 pb-8`}>
<h1
className={`${vipnagorgialla.className} font-bold italic text-[clamp(1.75rem,5vw,3rem)] text-[#EEE5E5] uppercase mb-4 text-center`}
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.75rem,1.4rem+3vw,3.5rem)]`}
>
{t("expo.title")}
</h1>
<p
className={`${vipnagorgialla.className} font-bold italic text-[clamp(2rem,8vw,4.5rem)] text-[#EEE5E5] uppercase text-center`}
</div>
{/* Venue maps */}
<div className={`${GUTTER} pb-12 md:pb-16`}>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 md:gap-8">
<MapCard
image="/images/messiala/fuajee-kaart.svg"
label={t("expo.mapFoyer")}
/>
<MapCard
image="/images/messiala/tudengimaja-kaart.svg"
label={t("expo.mapStudentHouse")}
/>
</div>
</div>
{/* Mini-tournaments feature (full-bleed) */}
<section
className={`relative overflow-hidden ${DIVIDER} min-h-[360px] md:min-h-[480px]`}
>
{t("expo.comingSoon")}
<Image
src="/images/landing/compete_teaser.jpg"
alt=""
fill
className="object-cover"
sizes="100vw"
/>
<div className="absolute inset-0 bg-gradient-to-r from-[#0E0F19] via-[#0E0F19]/85 to-[#0E0F19]/30" />
<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}`}
>
<h2
className={`${vipnagorgialla.className} font-bold italic uppercase text-[#EEE5E5] leading-none text-[clamp(1.75rem,1.4rem+2.5vw,3rem)]`}
>
{t("expo.miniTournaments.title")}
</h2>
<p className="text-[#EEE5E5] text-base md:text-lg max-w-md">
{t("expo.miniTournaments.description")}
</p>
<Link href="/turniirid" className="w-fit">
<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`}
>
{t("expo.miniTournaments.cta")}
</button>
</Link>
</div>
</section>
{/* Photo gallery: two faded tiles left, one tall faded tile right,
separated by thin cyan gaps (the band background shows through). */}
<section className={DIVIDER}>
<div className="grid grid-cols-1 md:grid-cols-2 gap-1 bg-[rgba(0,163,224,0.5)] md:h-[42vw] md:max-h-[760px]">
<div className="grid grid-cols-1 md:grid-rows-2 gap-1 min-h-0">
<FadedPhoto
image="/images/EXPO/chill_ala.jpg"
caption={t("expo.photos.chill")}
/>
<FadedPhoto
image="/images/EXPO/console.jpg"
caption={t("expo.photos.console")}
align="right"
/>
</div>
<FadedPhoto
image="/images/EXPO/baar.jpg"
caption={t("expo.photos.bar")}
valign="bottom"
/>
</div>
</section>
{/* Estonian game developers */}
<section className={`${DIVIDER} ${GUTTER} py-12 md:py-16`}>
<SectionHeading>{t("expo.developers")}</SectionHeading>
<div className="grid grid-cols-2 lg:grid-cols-4 gap-6 lg:gap-8">
{developers.map((dev) => (
<GameCard
key={dev.title}
image={dev.logo}
title={dev.title}
subtitle={dev.studio}
url={dev.url}
/>
))}
</div>
</section>
{/* Universities */}
<section className={`${DIVIDER} ${GUTTER} py-12 md:py-16`}>
<SectionHeading>{t("expo.universities")}</SectionHeading>
<div className="grid grid-cols-2 lg:grid-cols-4 gap-6 lg:gap-8">
{universities.map((uni) => (
<GameCard
key={uni.title}
image={uni.image}
title={uni.title}
subtitle={uni.team}
url={uni.url}
cover={!uni.contain}
/>
))}
</div>
</section>
</div>
</div>
);
}

173
src/data/expo.ts Normal file
View File

@@ -0,0 +1,173 @@
// 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).
//
// The developer list is sourced from the TipiLAN 2026 game-dev showcase signup
// sheet. University / TalTech GameCamp teams live in `universities` instead.
//
// Logos were downloaded from the signup sheet's Drive folder into
// public/images/EXPO/gamedev/. `logo` / `image` stay optional (one team has no
// logo yet); cards fall back to a text tile when absent.
export interface DeveloperCard {
/** Game / product name (proper noun, shown as-is). */
title: string;
/** Studio / team behind it. */
studio: string;
/** External link for the game (Steam, itch.io, etc.). Omitted when none yet. */
url?: string;
/** Logo image under /public. Rendered object-contain. Optional. */
logo?: string;
}
export interface UniversityCard {
/** Game name (proper noun, shown as-is). */
title: string;
/** Team / course that made it. */
team: string;
/** External link for the game. Omitted when none. */
url?: string;
/** Thumbnail under /public. Optional. */
image?: string;
/** Render the image object-contain (a logo) instead of object-cover (a screenshot). */
contain?: boolean;
}
// Studio / commercial teams (order follows the signup sheet).
export const developers: DeveloperCard[] = [
{
title: "ORMS",
studio: "Rhea Games",
url: "https://store.steampowered.com/app/3743150/ORMS/",
logo: "/images/EXPO/gamedev/orms.png",
},
{
title: "Grandpa's Bee Haven",
studio: "Kickstart Now",
url: "https://store.steampowered.com/app/3209160/Grandpas_Bee_Haven/",
logo: "/images/EXPO/gamedev/grandpas_bee_haven.png",
},
{
title: "walk",
studio: "bilge",
url: "https://store.steampowered.com/app/4563880/walk/",
logo: "/images/EXPO/gamedev/walk.png",
},
{
title: "War-Torn",
studio: "Moccer Interactive",
url: "https://kingoftheend.itch.io/war-torn",
logo: "/images/EXPO/gamedev/war_torn.png",
},
{
title: "Machine Party",
studio: "Mike Klubnika",
url: "https://store.steampowered.com/app/4108000/Machine_Party/",
logo: "/images/EXPO/gamedev/machine_party.png",
},
{
title: "Manala: Equinox War",
studio: "OÜ Kilbirivi",
url: "https://store.steampowered.com/app/4898080/Manala_Equinox_War/",
logo: "/images/EXPO/gamedev/manala.png",
},
{
title: "Toimkonna simulator",
studio: "M4rtenn",
url: "https://store.steampowered.com/app/4834280/Toimkonna_simulator/",
logo: "/images/EXPO/gamedev/toimkonna_simulator.png",
},
{
title: "MULTIMATUM",
studio: "DeepDevelopment Games",
logo: "/images/EXPO/gamedev/multimatum.png",
},
{
title: "SELF STORM",
studio: "Triple Trigger",
url: "https://taavippp.itch.io/self-storm",
logo: "/images/EXPO/gamedev/self_storm.svg",
},
{
title: "JazzWitch",
studio: "VuKaan",
url: "https://store.steampowered.com/app/4952960/JazzWitch/",
logo: "/images/EXPO/gamedev/jazzwitch.png",
},
{
title: "Hearthland",
studio: "Best mäng OÜ",
logo: "/images/EXPO/gamedev/hearthland.png",
},
{
title: "Bullosseum",
studio: "Pullivennad",
url: "https://bullosseum.richard.work/",
logo: "/images/EXPO/gamedev/bullosseum.png",
},
{
title: "Hardwired",
studio: "Lostbyte",
url: "https://store.steampowered.com/app/3682210/Hardwired/",
logo: "/images/EXPO/gamedev/hardwired.png",
},
{
title: "Osta",
studio: "Cup",
url: "https://store.steampowered.com/app/3997240/Osta/",
logo: "/images/EXPO/gamedev/osta.png",
},
{
title: "Midnight Clinic",
studio: "HRA Interactive",
logo: "/images/EXPO/gamedev/midnight_clinic.png",
},
{
title: "Midnight Souvenirs",
studio: "Path of Pixels",
url: "https://store.steampowered.com/app/3623230/Midnight_Souvenirs",
logo: "/images/EXPO/gamedev/midnight_souvenirs.png",
},
{
title: "Estonian Language Learning Games",
studio: "Estonian Language Self Study Club",
url: "https://www.instagram.com/estonian_studyclub/",
logo: "/images/EXPO/gamedev/estonian_language.png",
},
];
// University / TalTech GameCamp teams.
export const universities: UniversityCard[] = [
{
title: "Dwarf Escape",
team: 'TalTech GameCamp ("Mõmmid")',
url: "https://ihorsylin.itch.io/dwarf-escape",
image: "/images/EXPO/ylikoolid/dwarf_escape.png",
},
{
title: "Packet Tracers",
team: "TalTech IT-teaduskond",
url: "https://alacrisdevs.itch.io/packet-tracers",
image: "/images/EXPO/ylikoolid/packet_tracers.png",
},
{
title: "OH CRAP!",
team: 'TalTech GameCamp ("Skill Issue")',
url: "https://heavybro.itch.io/oh-crap",
image: "/images/EXPO/ylikoolid/oh_crap.png",
},
{
title: "Void of Hermes",
team: 'TalTech GameCamp ("OnlyFun")',
url: "https://ron88.itch.io/voidofhermes",
image: "/images/EXPO/ylikoolid/void_of_hermes.png",
},
{
title: "Eelloon",
team: "TalTech",
image: "/images/EXPO/gamedev/eelloon.png",
contain: true,
},
];

View File

@@ -868,6 +868,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",

View File

@@ -869,6 +869,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",