Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const links: Link[] = [
{ href: "https://discord.com/invite/8vAQpFWCYH", children: "Discord" },
];

export default function InteractiveNavigationMap() {
export default function PixelSideBar() {
return (
<div className="relative w-full aspect-square flex items-center justify-center h-fit">
<div className="absolute z-10 flex flex-col text-[15px] lg:text-[20px] xl:text-[24px] 2xl:text-[25px] top-8 lg:top-10 2xl:top-12 left-[17.6%] lg:left-[16.1%] xl:left-[15.7%] 2xl:left-[14.5%]">
Expand Down
1 change: 0 additions & 1 deletion components/title-components/mobile-title.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"use client";

import TitleText from "./mobile-title-text";
import InteractiveNavigationMap from "../interactive-map/interactive-map";
import RegistrationButton from "@/components/themed-components/registration-link";

export default function MobileTitleComponent() {
Expand Down
89 changes: 53 additions & 36 deletions components/title-components/title-text.tsx
Original file line number Diff line number Diff line change
@@ -1,44 +1,64 @@
"use client";

import { useState, useEffect } from "react";
import RegistrationButton from "@/components/themed-components/registration-link";
import InteractiveNavigationMap from "../interactive-map/interactive-map";
import Image from "next/image";
import PixelSideBar from "../pixel-sidebar/pixel-sidebar";

export default function TitleText() {
const fullText = "HACK\u00A0\u00A0\u00A0RPI";
const [displayedText, setDisplayedText] = useState("");
const [isDeleting, setIsDeleting] = useState(false);
const [index, setIndex] = useState(0);
const [isGlitching, setIsGlitching] = useState(false);
const [glitchCount, setGlitchCount] = useState(0);

// Helper to make random glitch characters
const randomChar = () => {
const chars = "@#$%&*!?/";
return chars[Math.floor(Math.random() * chars.length)];
};

useEffect(() => {
const typingSpeed = isDeleting ? 100 : 150;
let timeout: NodeJS.Timeout;
const typingSpeed = isGlitching ? 50 : 120;

const handleTyping = setTimeout(() => {
if (!isDeleting) {
if (!isGlitching) {
// Normal typing phase
timeout = setTimeout(() => {
if (index < fullText.length) {
// Randomly start a glitch
if (Math.random() < 0.1 && index > 1) {
setIsGlitching(true);
setGlitchCount(0);
return;
}
setDisplayedText((prev) => prev + fullText[index]);
setIndex((prev) => prev + 1);
} else {
// finished typing, stop blinking
return;
}
} else {
if (index > 0) {
setDisplayedText((prev) => prev.slice(0, -1));
setIndex((prev) => prev - 1);
}, typingSpeed);
} else {
// Glitch phase — happens for a few cycles
timeout = setTimeout(() => {
if (glitchCount < 5) {
// Replace last character(s) with random junk
setDisplayedText((prev) => {
const base = prev.slice(0, -1);
return base + randomChar();
});
setGlitchCount((prev) => prev + 1);
} else {
setIsDeleting(false);
// End glitch, fix the text, and resume typing
setIsGlitching(false);
setDisplayedText(fullText.slice(0, index));
}
}
}, typingSpeed);
}, typingSpeed);
}

return () => clearTimeout(handleTyping);
}, [index, isDeleting]);
return () => clearTimeout(timeout);
}, [index, isGlitching, glitchCount]);

return (
<div className="relative w-full h-full flex justify-start items-start font-sans">
{/* Left side: Box with image */}
{/* Box with skyline image */}
<div className="relative z-10 w-[900px] h-[600px] bg-black p-0 rounded-2xl shadow-lg overflow-hidden">
<Image
src="/cityscape_background_retro_modern.png"
Expand All @@ -47,7 +67,7 @@ export default function TitleText() {
className="object-cover"
/>

{/* Overlayed typing text */}
{/* Typing + glitch text */}
<h1
className="absolute text-[95px] lg:text-[120px] font-modern font-extrabold drop-shadow-lg text-white"
style={{ top: "100px", left: "38px" }}
Expand All @@ -56,39 +76,36 @@ export default function TitleText() {
<span className="animate-pulse">|</span>
</h1>

{/* Overlayed typing text */}
<h1
className="absolute text-[95px] lg:text-[120px] font-modern font-extrabold drop-shadow-lg text-white"
style={{ top: "100px", left: "42px" }}
>
{displayedText}
<span className="animate-pulse">|</span>
</h1>

{/* Overlayed typing text */}
{/* Colored glow layers */}
<h1
className="absolute text-[95px] lg:text-[120px] font-modern font-extrabold drop-shadow-lg text-retro-purple-medium"
style={{ top: "100px", left: "40px" }}
>
{displayedText}
<span className="animate-pulse">|</span>
</h1>

{/* Subtitle */}
<h1>
<span className="absolute text-[20px] lg:text-[20px] font-modern font-extrabold drop-shadow-lg text-white" style={{ top: "50px", left: "20px" }}>
November 15-16, 2025 &#8226; Troy, NY
<span
className="absolute text-[20px] lg:text-[20px] font-modern font-extrabold drop-shadow-lg text-white"
style={{ top: "50px", left: "20px" }}
>
November 15-16, 2025 • Troy, NY
</span>
</h1>
<h1>
<span className="absolute text-[20px] lg:text-[40px] font-modern font-extrabold drop-shadow-lg text-white" style={{ top: "250px", left: "268px" }}>
<span
className="absolute text-[20px] lg:text-[40px] font-modern font-extrabold drop-shadow-lg text-white"
style={{ top: "250px", left: "268px" }}
>
Retro V. Modern
</span>
</h1>
</div>

{/* Right side: Map overlapping the box */}
{/* Sidebar */}
<div className="absolute top-0 left-[800px] z-20 w-[500px]">
<InteractiveNavigationMap />
<PixelSideBar />
</div>
</div>
);
Expand Down
18 changes: 9 additions & 9 deletions data/members.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import xenia from "../public/team/photos/Xenia_Khusid.jpg";
import cj from "../public/team/photos/CJ_Marino.jpg";
import matthew from "../public/team/photos/Xenia_Khusid.jpg";
import shankar from "../public/team/photos/Shankar_Palanickal.jpg";
import aaryan from "../public/team/photos/Aaryan_Gautam.jpg";
import tobias from "../public/team/photos/Xenia_Khusid.jpg";
import jackson from "../public/team/photos/Xenia_Khusid.jpg";
import suyash from "../public/team/photos/Suyash_Amatya.jpg";
import xenia from "../public/team/photos/xenia.jpg";
import cj from "../public/team/photos/cj.jpg";
import matthew from "../public/team/photos/matthew.jpg";
import shankar from "../public/team/photos/shankar.jpg";
import aaryan from "../public/team/photos/aaryan.jpg";
import tobias from "../public/team/photos/tobias.jpg";
import jackson from "../public/team/photos/jackson.jpg";
import suyash from "../public/team/photos/suyash.jpg";

export const executive = {
"Xenia Khusid": xenia,
Expand Down Expand Up @@ -65,7 +65,7 @@ export const team: Team = {
{
name: "Xenia Khusid",
role: "President",
image: "../public/team/photos/joerogansauna.jpg",
image: "xenia.jpg",
"team-color": teamColors.president,
teamDescription:
"The President leads the overall planning and execution of the hackathon, coordinating with all teams to ensure a successful event.",
Expand Down
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 public/sponsors/sponsor_logos/VelanStudios.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 3 additions & 2 deletions public/sponsors/sponsors.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@
],
"SILVER": [
{ "name": "Global Foundries", "logoPath": "/GlobalFoundries.png", "url": "https://gf.com/" },
{ "name": "Lutron", "logoPath": "/Lutron.jpeg", "url": "https://www.lutron.com/en-US/Pages/default.aspx" },
{ "name": "Accenture", "logoPath": "/AccentureWhite.png", "url": "https://www.accenture.com" },
{ "name": "Palantir", "logoPath": "/Palantir.png", "url": "https://www.palantir.com/" },
{ "name": "Rensselaer School of Science", "logoPath": "/RPI_SOS.png", "url": "https://science.rpi.edu/" }
{ "name": "Rensselaer School of Science", "logoPath": "/RPI_SOS.png", "url": "https://science.rpi.edu/" },
{ "name": "Velan Studios", "logoPath": "/VelanStudios.png", "url": "https://velanstudios.com/" }
],
"BRONZE": [
{
Expand Down
Binary file removed public/team/photos/Aaryan_Gautam.jpg
Binary file not shown.
Binary file removed public/team/photos/CJ_Marino.jpg
Binary file not shown.
Binary file removed public/team/photos/Shankar_Palanickal.jpg
Binary file not shown.
Binary file removed public/team/photos/Suyash_Amatya.jpg
Binary file not shown.
Binary file removed public/team/photos/Xenia_Khusid.jpg
Binary file not shown.
Binary file added public/team/photos/aaryan.JPG
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 public/team/photos/cj.JPG
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 public/team/photos/jackson.JPG
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 public/team/photos/matthew.JPG
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 public/team/photos/shankar.JPG
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 public/team/photos/suyash.JPG
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 public/team/photos/tobias.JPG
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 public/team/photos/xenia.JPG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading