Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added client/public/godot-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/godot-2.png
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please delete one of these and change the name to godot.png! We only need one :)

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/trophy.png
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use the different coloured version of this from the figma. You can export the image from the figma and swap it out for this one.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added client/public/unity-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
196 changes: 196 additions & 0 deletions client/src/pages/landing.tsx
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move this into index.tsx. We can move the existing content in index.tsx into another page, maybe /healthcheck?

Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
import Image from "next/image";

export default function Landing() {
const pageTitle = "Game Development UWA";
const description =
"Little eye catching intro about what the club does here. Maybe " +
"something about the purpose of the club, maybe something about the " +
"type of events that the club runs.";
Comment on lines +4 to +8
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As these only get used once, they don't need to be defined as constants. Constants should only really be used for things that get reused. Instead, you can just write the title and description wherever you would use the constants.

const btnList = [
{ name: "More about us", link: "" },
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please link this to the committee/about page!

{ name: "Join our Discord", link: "" },
];
const mainPic = {
url: "/placeholder.png",
alt: "placeholder",
};

Comment on lines +13 to +17
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This probably also doesn't need to be defined as a const unless we resuse this information somewhere else

type cardImage = {
url: string;
width: number;
height: number;
alt: string;
};

type cardType = {
id: number;
title: string;
description: string;
type: string;
image: cardImage | null;
row: number;
gridColumn: string;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the gridColumn value ever actually gets used when rendering the cards. Please either remove it or use it when rendering the cards.

};
const eventCards = [
{
id: 1,
title: "Game Jams",
description:
"Compete with a team over a short time period to develop your own game! Each game jam has a different theme so be prepared to think creatively.",
type: "default",
image: {
url: "/trophy.png",
width: 97,
height: 121,
alt: "Trophy",
},
row: 1,
gridColumn: "702fr",
},
{
id: 2,
title: "Social Events",
description:
"Meet other folks interested in game dev, play games, and maybe even recruit members for your next game jam team :P",
type: "default",
image: null,
row: 1,
gridColumn: "513fr",
},
{
id: 3,
title: "Other Event Type",
description:
"Some other event type that the club runs! I'm not sure what, but this section might look better with four boxes…",
type: "default",
image: null,
row: 2,
gridColumn: "233fr",
},
{
id: 4,
title: "Workshops",
description:
"Learn core Game Development technologies, such as Godot, Unity and more. Most workshops are presented by committee members with the chance to produce your own small game.",
type: "special-border",
image: null,
row: 2,
gridColumn: "275fr",
},
];

const logoImages = [
{ url: "/godot-1.png", alt: "Godot Logo", position: "start" },
{ url: "/unity-logo.png", alt: "Unity Logo", position: "end" },
{ url: "/godot-1.png", alt: "Godot Logo", position: "start" },
];

const row1Cards = eventCards.filter((card) => card.row === 1);
const row2Cards = eventCards.filter((card) => card.row === 2);

const renderCardHeader = (card: cardType) => {
if (card.type === "special-border") {
return (
<div
style={{
clipPath:
"polygon(0% 0%, 71% 0%, 78% 8px, 100% 8px, 100% calc(100% - 8px), 0% calc(100% - 8px))",
}}
className="relative bg-purple-400 p-[1px]"
>
<div
style={{
clipPath:
"polygon(1px 1px, calc(71% - 1px) 1px, calc(78% - 1px) 8px, calc(100% - 1px) 8px, calc(100% - 1px) calc(100% - 8px - 1px), 1px calc(100% - 8px - 1px))",
}}
className="bg-[#0d1025] p-4 pt-3 font-jersey10 font-semibold text-purple-300"
>
{card.title}
</div>
</div>
);
}

return (
<div className="rounded-md border border-purple-400 px-4 py-2 font-jersey10 font-semibold text-purple-300">
Copy link
Contributor

@laurenpudz laurenpudz Dec 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Text in the title of the event type cards should be white, as in the figma. The background of the card title section should also be a dark purple. Please also change this over for the card with the special border. It may also look better if you increase the font size of the title a bit.
Please try increasing the border width a little so it more closely matches the figma and the width of the border of the specially shaped box.

{card.title}
</div>
);
};

const renderCard = (card: cardType) => (
<div key={card.id} className="flex flex-col">
{renderCardHeader(card)}

<div className="mt-4 rounded-md border border-[#1B1F4C] bg-[#0f132e] p-4 text-gray-200">
<div className="flex gap-2">
<span>▶</span>
<p>{card.description}</p>
{card.image && (
<Image
src={card.image.url}
width={card.image.width}
height={card.image.height}
alt={card.image.alt}
className="opacity-60"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think changing the opacity is necessary here. We should be able to get the desired colour by using the image imported from the figma

Suggested change
className="opacity-60"

/>
)}
</div>
</div>
</div>
);

return (
<div>
<section className="flex w-full justify-center bg-[#182150] px-12 py-10">
<div className="flex w-full max-w-[1440px] flex-col items-center justify-between gap-12 md:flex-row">
<div className="flex max-w-lg flex-col gap-6 text-white">
<h1 className="font-jersey10 text-4xl font-bold">{pageTitle}</h1>
<p className="font-sans text-base leading-relaxed text-white/80">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that font-sans should already be the default, so you don't need to apply the font-sans class here

{description}
</p>
<div className="mt-4 flex gap-4">
{btnList.map((item, i) => (
<button
key={i}
className="rounded-lg border border-[#9CA4FD] px-6 py-3 font-jersey10 font-medium text-white transition hover:bg-[#9CA4FD]"
>
{item.name} &gt;
</button>
Comment on lines +154 to +159
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use the existing button component here, so you wont need to include all the styling. The first button should have the filled variant (which should already be the default) and the second button should have the outline variant. Don't worry if the buttons don't look like the figma yet, they should be updated in an upcoming PR

))}
</div>
</div>

<div className="flex h-[280px] w-[400px] items-center justify-center rounded-xl bg-[#cfc2ff]">
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use tailwind utility classes here, instead of arbitrary px classes. This will be better for scaling and is generally better practice. Please also change over all other uses of arbitrary classes in this file that you can :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use the custom project colours wherever you can. There should be a matching colour for this somewhere. If one doesn't exist (and you are reusing this colour in other places), you can create one.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also - the main image should take up the entire space of the div here, inside of being centered inside of the div. You should be able to remove the div that is wrapping the image and just use an Image component.
You can export the placeholder image from the figma and add it to the repo to use here.

<Image src={mainPic.url} width={80} height={80} alt={mainPic.alt} />
</div>
</div>
</section>

<section className="bg-[#0d1025] py-16">
<div className="container mx-auto px-6 lg:px-12">
<div className="grid grid-cols-1 gap-10 md:grid-cols-2">
{row1Cards.map(renderCard)}
</div>

<div className="mt-10 grid grid-cols-1 gap-10 md:grid-cols-[233fr_275fr_111fr]">
{row2Cards.map(renderCard)}

<div className="flex flex-row items-center justify-center gap-4 md:hidden lg:flex lg:flex-col lg:items-start">
{logoImages.map((logo, index) => (
<Image
key={index}
src={logo.url}
width={135}
height={46}
alt={logo.alt}
className={`${index < logoImages.length - 1 ? "lg:mb-5" : ""} ${logo.position === "end" ? "lg:self-end" : ""}`}
/>
))}
</div>
</div>
</div>
</section>
</div>
);
}