mirror of
https://github.com/Lapikud/tipilan.git
synced 2026-09-22 15:22:59 +00:00
Added gamedev game photos
This commit is contained in:
@@ -77,20 +77,39 @@ function SectionHeading({ children }: { children: React.ReactNode }) {
|
||||
);
|
||||
}
|
||||
|
||||
/** One game card: bordered thumbnail, a linked title, and a subtitle line. */
|
||||
/**
|
||||
* 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,
|
||||
cover = false,
|
||||
}: {
|
||||
image: string;
|
||||
image?: string;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
url: string;
|
||||
cover: boolean;
|
||||
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
|
||||
@@ -98,25 +117,29 @@ function GameCard({
|
||||
cover ? "bg-black" : "bg-[#0E0F19]"
|
||||
}`}
|
||||
>
|
||||
<Image
|
||||
src={image}
|
||||
alt={title}
|
||||
fill
|
||||
className={cover ? "object-cover" : "object-contain p-5 md:p-7"}
|
||||
sizes="(max-width: 768px) 50vw, 25vw"
|
||||
/>
|
||||
{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>
|
||||
<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>
|
||||
<p className="text-white/70 leading-tight text-[clamp(0.9rem,0.8rem+0.5vw,1.25rem)]">
|
||||
{titleEl}
|
||||
<span className="text-white/70 leading-tight text-[clamp(0.9rem,0.8rem+0.5vw,1.25rem)]">
|
||||
{subtitle}
|
||||
</p>
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -217,7 +240,6 @@ export default async function Expo({
|
||||
title={dev.title}
|
||||
subtitle={dev.studio}
|
||||
url={dev.url}
|
||||
cover={false}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
@@ -234,7 +256,7 @@ export default async function Expo({
|
||||
title={uni.title}
|
||||
subtitle={uni.team}
|
||||
url={uni.url}
|
||||
cover={true}
|
||||
cover={!uni.contain}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
152
src/data/expo.ts
152
src/data/expo.ts
@@ -4,20 +4,22 @@
|
||||
// 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.
|
||||
// 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 behind it. TODO: confirm the two "Placeholder Gameworks" entries. */
|
||||
/** Studio / team behind it. */
|
||||
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;
|
||||
/** 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 {
|
||||
@@ -25,62 +27,150 @@ export interface UniversityCard {
|
||||
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;
|
||||
/** 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: "Broken Alliance",
|
||||
studio: "Placeholder Gameworks",
|
||||
logo: "/images/EXPO/GameDev%20logos/broken_alliance.png",
|
||||
url: "https://placeholder.games/",
|
||||
title: "White Phosphorus: An Explosive Escape",
|
||||
studio: "Fire!",
|
||||
},
|
||||
{
|
||||
title: "Buckshot Roulette",
|
||||
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",
|
||||
logo: "/images/EXPO/mklubi.jpg",
|
||||
url: "https://store.steampowered.com/app/2835570/Buckshot_Roulette/",
|
||||
url: "https://store.steampowered.com/app/4108000/Machine_Party/",
|
||||
logo: "/images/EXPO/gamedev/machine_party.png",
|
||||
},
|
||||
{
|
||||
title: "CraftCraft Simulator",
|
||||
studio: "Placeholder Gameworks",
|
||||
logo: "/images/EXPO/GameDev%20logos/craftcat_sim.png",
|
||||
url: "https://placeholder.games/",
|
||||
title: "Manala: Equinox War",
|
||||
studio: "OÜ Kilbirivi",
|
||||
url: "https://store.steampowered.com/app/4898080/Manala_Equinox_War/",
|
||||
logo: "/images/EXPO/gamedev/manala.png",
|
||||
},
|
||||
{
|
||||
title: "CYBER DOC ROGUE",
|
||||
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%20logos/Cyber_Doc_Rogue.png",
|
||||
url: "https://drive.google.com/drive/folders/1R6_3s92byAeHlKMeBP8f5ZnclUl5Wpj5?usp=sharing",
|
||||
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",
|
||||
logo: "/images/EXPO/gamedev/estonian_language.png",
|
||||
},
|
||||
];
|
||||
|
||||
// University / TalTech GameCamp teams.
|
||||
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",
|
||||
image: "/images/EXPO/ylikoolid/dwarf_escape.png",
|
||||
},
|
||||
{
|
||||
title: "Packet Tracers",
|
||||
team: "TalTech IT-teaduskond",
|
||||
image: "/images/EXPO/ylikoolid/packet_tracers.png",
|
||||
url: "https://alacrisdevs.itch.io/packet-tracers",
|
||||
image: "/images/EXPO/ylikoolid/packet_tracers.png",
|
||||
},
|
||||
{
|
||||
title: "OH CRAP!",
|
||||
team: 'TalTech GameCamp ("Skill Issue")',
|
||||
image: "/images/EXPO/ylikoolid/oh_crap.png",
|
||||
url: "https://heavybro.itch.io/oh-crap",
|
||||
image: "/images/EXPO/ylikoolid/oh_crap.png",
|
||||
},
|
||||
{
|
||||
title: "Void of Hermes",
|
||||
team: 'TalTech GameCamp ("OnlyFun")',
|
||||
image: "/images/EXPO/ylikoolid/void_of_hermes.png",
|
||||
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,
|
||||
},
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user