Skip to content
This repository was archived by the owner on Feb 3, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
b8f60db
change height of leaderboard so the footer isn't in the middle of the…
mc-rizzy Sep 30, 2025
d237de2
basic threejs stufuf
mc-rizzy Oct 7, 2025
19f4eb5
added smosoth animation for camera and wrote function to create train…
mc-rizzy Oct 7, 2025
be0db96
Added map loading algorithm and map loading functions
mc-rizzy Oct 17, 2025
4a9fd1b
un-impossible algorithm added and more models
mc-rizzy Oct 21, 2025
7b553cc
added another camera angle
mc-rizzy Oct 24, 2025
197a0c9
rigged model and added skeleton implementation
mc-rizzy Oct 27, 2025
eac7381
Bruh tf is ts? How did my model get so deformed. not happy |:c
mc-rizzy Oct 27, 2025
7e3636a
chore(e2e): move navigation fixes, test stabilization, docs consolida…
Jordan231111 Sep 8, 2025
ff3bae0
style: remove unnecessary overflow property from nav bar component fo…
Jordan231111 Sep 8, 2025
1662fe2
test: stabilize suites and registration CTA
Jordan231111 Nov 3, 2025
ac9b860
revert some changes
Jordan231111 Nov 3, 2025
0283860
chore: update package-lock.json and refactor components for improved …
Jordan231111 Nov 3, 2025
16f96d2
chore: update package-lock.json and refactor AboutUs and Schedule com…
Jordan231111 Nov 3, 2025
2311f28
chore: update package-lock.json and enhance test coverage for AboutUs…
Jordan231111 Nov 4, 2025
ffb1c94
chore: update package-lock.json and add data-testid attributes for im…
Jordan231111 Nov 4, 2025
f04f980
chore: add @aws-amplify/auth dependency and remove SchedulePage compo…
Jordan231111 Nov 4, 2025
2d53c82
created a train model in blender for a long long time and then import…
mc-rizzy Nov 4, 2025
d660dea
changes to file
GokulGH Nov 4, 2025
d3c351a
Added Jr Directors and changed colors
aarugaut Nov 7, 2025
21142af
Merge branch 'main' into Aaryan2025Again
BastedEggsRYummy Nov 7, 2025
1985a35
Merge pull request #153 from hack-rpi/Aaryan2025Again
BastedEggsRYummy Nov 7, 2025
35dd104
Update package-lock.json
BastedEggsRYummy Nov 7, 2025
389076d
Removed aws dependencies
BastedEggsRYummy Nov 7, 2025
499ad98
Update members.ts
BastedEggsRYummy Nov 8, 2025
7ce9d0c
Try try again (ampx)
BastedEggsRYummy Nov 8, 2025
54805c4
Ran npx husky init
BastedEggsRYummy Nov 8, 2025
d0b307f
Ampx trying again
BastedEggsRYummy Nov 8, 2025
a7cdad3
No package-lock
BastedEggsRYummy Nov 8, 2025
df9d8cf
Welcome back package-lock.json
BastedEggsRYummy Nov 8, 2025
cd0cbd5
Moved over package.json from other version
BastedEggsRYummy Nov 8, 2025
78085ef
I ran build
BastedEggsRYummy Nov 8, 2025
742fc56
Create .amplifyignore
BastedEggsRYummy Nov 8, 2025
73ac788
Trying out lazy loading images
BastedEggsRYummy Nov 8, 2025
f9bb69f
npm i sharp
BastedEggsRYummy Nov 8, 2025
53f7a72
Small optimizations
BastedEggsRYummy Nov 8, 2025
2bf7bf1
Image optimization attempt
BastedEggsRYummy Nov 8, 2025
35d54bd
Slightly optimized images
BastedEggsRYummy Nov 9, 2025
f39d893
Minor styling glitches
BastedEggsRYummy Nov 9, 2025
84cc251
Updated organizers
BastedEggsRYummy Nov 9, 2025
973bae2
Updated mentoring and volunteer form links
BastedEggsRYummy Nov 9, 2025
14b6ae2
Moved event info to faq section (bad solution) so the background colo…
BastedEggsRYummy Nov 9, 2025
49fc4df
Added back in globalFoundries logo
BastedEggsRYummy Nov 9, 2025
dd80ffb
Changed times, also made pixel sidebar say hackrpi XI
BastedEggsRYummy Nov 9, 2025
fe5a615
Added Photon & MLH Prizes to prize page
BastedEggsRYummy Nov 9, 2025
f74c91a
Added team back to nav-bar
BastedEggsRYummy Nov 9, 2025
c5f2bd5
pain
mc-rizzy Nov 9, 2025
8d733ef
Updated schedule from Logistics
BastedEggsRYummy Nov 9, 2025
6b80733
t3 stack not mern
BastedEggsRYummy Nov 9, 2025
4a3ac9c
Update members.ts
BastedEggsRYummy Nov 9, 2025
7b0fb83
stuff
mc-rizzy Nov 10, 2025
6c76c68
changed comment
mc-rizzy Nov 10, 2025
d91a40a
finished up
mc-rizzy Nov 10, 2025
ca6ccb4
added background Music
mc-rizzy Nov 10, 2025
86d65ed
Merge pull request #154 from hack-rpi/William-moreheaderchanges
BastedEggsRYummy Nov 11, 2025
227138c
Seperate FAQ data page
GokulGH Nov 11, 2025
46d82a1
Getting rid of old code
GokulGH Nov 11, 2025
b8d0592
Added backend to game
BastedEggsRYummy Nov 11, 2025
a8afa5a
Delete package-lock.json
BastedEggsRYummy Nov 11, 2025
cbdaa78
Delete page.tsx
BastedEggsRYummy Nov 11, 2025
e92826c
Update package.json
BastedEggsRYummy Nov 11, 2025
551aa63
Welcome back
BastedEggsRYummy Nov 11, 2025
98baa8f
Merge branch 'main' into subway-surfers-an-shi
BastedEggsRYummy Nov 11, 2025
13ef568
Merge pull request #155 from hack-rpi/subway-surfers-an-shi
BastedEggsRYummy Nov 11, 2025
ce99c72
Lot of little changes
BastedEggsRYummy Nov 11, 2025
5ec85ba
Three.js is back
BastedEggsRYummy Nov 11, 2025
eb1aedf
Got rid of aws reference
BastedEggsRYummy Nov 11, 2025
3ea7178
No more localhost
BastedEggsRYummy Nov 11, 2025
2578dd6
Using https instead, oops
BastedEggsRYummy Nov 11, 2025
6ea27b1
Trying to get the game to work
BastedEggsRYummy Nov 12, 2025
e5502c2
Added types/3, link update
BastedEggsRYummy Nov 12, 2025
900a5e3
Added amplify.yaml, hopefully that fixes things
BastedEggsRYummy Nov 12, 2025
b56f6a3
More debugging with env file
BastedEggsRYummy Nov 12, 2025
17291e3
We're trying again ig
BastedEggsRYummy Nov 12, 2025
7e43e96
Try try try try try try again
BastedEggsRYummy Nov 12, 2025
da772e4
Alright maybe this time
BastedEggsRYummy Nov 12, 2025
72e2244
Goddamn it I thought of something
BastedEggsRYummy Nov 12, 2025
df68904
Trtying the secrets route
BastedEggsRYummy Nov 12, 2025
80baf5c
merge conflict attempt number 1
BastedEggsRYummy Feb 3, 2026
a1463a5
Merge branch 'main' into chore/move-e2e-refactor-2025
BastedEggsRYummy Feb 3, 2026
d672aa6
Merge pull request #103 from Jordan231111/chore/move-e2e-refactor-2025
BastedEggsRYummy Feb 3, 2026
cd0c9c4
Merge branch 'main' into gokul-linting
BastedEggsRYummy Feb 3, 2026
8dbe6f4
Merge pull request #156 from hack-rpi/gokul-linting
BastedEggsRYummy Feb 3, 2026
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
6 changes: 6 additions & 0 deletions .amplifyignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
docs/
documentation/
e2e/
.vscode/
*.mp4
*.psd
11 changes: 3 additions & 8 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,9 +1,4 @@
# Run TypeScript check (excluding problematic test files)
#echo "🧪 Checking TypeScript..."
#npx tsc --noEmit
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

# Run Prettier + ESLint on staged files
#echo "🧹 Formatting and linting staged files..."
#npx lint-staged

#echo "✅ Pre-commit checks passed!"
#npm test
12 changes: 9 additions & 3 deletions __tests__/__mocks__/mockRegistry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,15 @@ import extendedMocks from "./extendedMocks";
*/
export const MockRegistrationLink = ({ className }: { className?: string }) => {
return (
<div data-testid="registration-link" className={className} role="link" aria-label="Registration Link">
Registration Link
</div>
<a
data-testid="registration-link"
className={className}
href="https://hackrpi2025.devpost.com/"
target="_blank"
rel="noopener noreferrer"
>
Register Here!
</a>
);
};

Expand Down
44 changes: 12 additions & 32 deletions __tests__/components/about-us.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@ jest.mock("next/navigation", () => ({
usePathname: () => "/",
}));

jest.mock("@/components/themed-components/registration-link", () => {
return {
__esModule: true,
default: ({ children, className }: { children?: React.ReactNode; className?: string }) => (
<div data-testid="registration-link" className={className} role="link" aria-label="Registration Link">
{children || "Registration Link"}
</div>
),
};
});

// Define the current theme and year for better test maintainability
const CURRENT_THEME = "Retro vs. Modern";
const HACKRPI_YEAR = getCurrentHackrpiYear();
Expand Down Expand Up @@ -109,22 +98,16 @@ describe("AboutUs Component", () => {
expect(parentContainer).toContainElement(venueElement);
});

it("renders the registration link with correct styling", () => {
// 2025 best practice: Render the component and get the container
it("renders the registration banner with correct styling", () => {
const { container } = renderWithProviders(<AboutUs />);

// 2025 best practice: Use data-testid for more reliable selection
const registrationLink = screen.getByTestId("registration-link");
expect(registrationLink).toBeInTheDocument();
expect(registrationLink).toHaveClass("text-xl");

// 2025 best practice: Find the REGISTER NOW text using a pattern
const registerNowText = screen.getByText(/REGISTER NOW!/i);
expect(registerNowText).toBeInTheDocument();
const registerBanner = screen.getByTestId("register-now-banner");
expect(registerBanner).toBeInTheDocument();
expect(registerBanner).toHaveTextContent(/REGISTER NOW!/i);
expect(registerBanner).toHaveClass("bg-hackrpi-secondary-orange");
expect(registerBanner).toHaveClass("text-white");

// Verify they are both in the document but don't assert they're in the same container
expect(container).toContainElement(registrationLink);
expect(container).toContainElement(registerNowText);
expect(container).toContainElement(registerBanner);
});

it('renders the scrolling "REGISTER NOW!" text with correct styling', () => {
Expand All @@ -137,7 +120,7 @@ describe("AboutUs Component", () => {

// Check styling directly on the element with data-testid
expect(registerBanner).toHaveClass("bg-hackrpi-secondary-orange");
expect(registerBanner).toHaveClass("text-black");
expect(registerBanner).toHaveClass("text-white");
expect(registerBanner).toHaveClass("overflow-hidden");
expect(registerBanner).toHaveClass("whitespace-nowrap");
});
Expand All @@ -164,11 +147,8 @@ describe("AboutUs Component", () => {
const { container } = renderWithProviders(<AboutUs />);

// 2025 best practice: Test for basic accessibility patterns
const links = screen.getAllByRole("link");
expect(links.length).toBeGreaterThan(0);
links.forEach((link) => {
expect(link).toHaveAccessibleName();
});
const links = screen.queryAllByRole("link");
expect(links.length).toBe(0);

const headings = screen.getAllByRole("heading");
expect(headings.length).toBeGreaterThan(1);
Expand All @@ -187,7 +167,7 @@ describe("AboutUs Component", () => {

// Check that key elements are still visible on mobile
expect(screen.getByRole("heading", { name: /About HackRPI/i })).toBeInTheDocument();
expect(screen.getByTestId("registration-link")).toBeInTheDocument();
expect(screen.getByTestId("register-now-banner")).toBeInTheDocument();

// Clean up mobile test and set up desktop test
cleanup();
Expand All @@ -197,7 +177,7 @@ describe("AboutUs Component", () => {

// Verify desktop layout elements
expect(screen.getByRole("heading", { name: /About HackRPI/i })).toBeInTheDocument();
expect(screen.getByTestId("registration-link")).toBeInTheDocument();
expect(screen.getByTestId("register-now-banner")).toBeInTheDocument();
});

// 2025 Best Practice: Add automated accessibility testing
Expand Down
10 changes: 4 additions & 6 deletions __tests__/components/event.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jest.mock("next/image", () => ({
}));

// Import the component after all mocks are defined
import EventPage from "@/app/event/page";
import EventPage from "@/app/(with-layout)/event/page";

describe("Event Page", () => {
beforeEach(() => {
Expand All @@ -71,11 +71,9 @@ describe("Event Page", () => {
it("renders the main layout components", () => {
render(<EventPage />);

// Check if the navbar component is rendered
expect(screen.getByTestId("nav-bar")).toBeInTheDocument();

// Note: Footer is imported but not actually used in the component
// so we should not expect it in the test
// Verify key structural headings render
expect(screen.getByText("Location:")).toBeInTheDocument();
expect(screen.getByText("Need Help?")).toBeInTheDocument();
});

it("renders the map component", () => {
Expand Down
17 changes: 12 additions & 5 deletions __tests__/components/faq.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@ import "@testing-library/jest-dom";
jest.mock("@/components/themed-components/registration-link", () => {
return {
__esModule: true,
default: ({ children, className }: { children?: React.ReactNode; className?: string }) => (
<div data-testid="registration-link" className={className} role="link" aria-label="Registration Link">
{children || "Registration Link"}
</div>
default: ({ className }: { className?: string }) => (
<a
data-testid="registration-link"
href="https://hackrpi2025.devpost.com/"
target="_blank"
rel="noopener noreferrer"
className={className}
>
Register Here!
</a>
),
};
});
Expand Down Expand Up @@ -95,8 +101,9 @@ describe("FAQ Component", () => {
fireEvent.click(registrationFAQ);

// Check if the registration link is rendered
const registrationLink = screen.getByTestId("registration-link");
const registrationLink = screen.getByRole("link", { name: /register here!/i });
expect(registrationLink).toBeInTheDocument();
expect(registrationLink).toHaveAttribute("href", "https://hackrpi2025.devpost.com/");
});

it("renders the contact information at the bottom", () => {
Expand Down
17 changes: 12 additions & 5 deletions __tests__/components/footer.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ jest.mock("next/image", () => ({
}));

// Mock logo import
jest.mock("@/public/HackRPI_Logo_Yellow_Arrow.png", () => ({
default: "mock-logo-path",
jest.mock("@/public/Retro_HackRPI_Logo.png", () => ({
default: "mock-retro-logo",
}));

jest.mock("@/components/socials-links/social-links", () => {
Expand All @@ -24,9 +24,15 @@ jest.mock("@/components/socials-links/social-links", () => {
jest.mock("@/components/themed-components/registration-link", () => {
return function MockRegistrationLink({ className }: { className?: string }) {
return (
<div data-testid="registration-link" className={className}>
Registration Link
</div>
<a
data-testid="registration-link"
className={className}
href="https://hackrpi2025.devpost.com/"
target="_blank"
rel="noopener noreferrer"
>
Register Here!
</a>
);
};
});
Expand Down Expand Up @@ -72,6 +78,7 @@ describe("Footer Component", () => {
expect(registrationLink).toBeInTheDocument();
expect(registrationLink).toHaveClass("text-xl");
expect(registrationLink).toHaveClass("mb-4");
expect(registrationLink).toHaveAttribute("href", "https://hackrpi2025.devpost.com/");
});

it("renders the social links", () => {
Expand Down
19 changes: 18 additions & 1 deletion __tests__/components/last-year.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,23 @@ jest.mock("@/components/themed-components/hackrpi-link", () => {
};
});

jest.mock("@/components/prev-projects/LastYearCollage", () => {
return function MockLastYearCollage() {
return (
<div data-testid="photo-gallery">
{Array.from({ length: 12 }).map((_, index) => (
<img
key={index}
data-testid="mock-image"
src={`/lastYearPhotos/photo-${index + 1}.jpg`}
alt={`HackRPI XI Photo ${index + 1}`}
/>
))}
</div>
);
};
});

jest.mock("next/image", () => ({
__esModule: true,
default: (props: any) => {
Expand All @@ -88,7 +105,7 @@ jest.mock("next/image", () => ({
}));

// Import the component after all mocks are defined
import PastYearProjects from "@/app/last-year/page";
import PastYearProjects from "@/app/(with-layout)/last-year/page";

describe("Last Year Projects Page", () => {
beforeEach(() => {
Expand Down
32 changes: 5 additions & 27 deletions __tests__/components/nav-bar.test.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from "react";
import { render, screen, cleanup } from "@testing-library/react";
import NavBar from "@/components/nav-bar/nav-bar";
import NavBar, { links as navLinks } from "@/components/nav-bar/nav-bar";
import { renderWithProviders, resetAllMocks, setWindowDimensions } from "../test-utils";

/**
Expand Down Expand Up @@ -42,29 +42,6 @@ jest.mock("@/data/nav-bar-links", () => {
};
});

// Mock the links directly in the NavBar component
jest.mock("@/components/nav-bar/nav-bar", () => {
const originalModule = jest.requireActual("@/components/nav-bar/nav-bar");
return {
__esModule: true,
...originalModule,
links: [
{
name: "Home",
links: [
{ href: "/", children: "Home" },
{ href: "/#about", children: "About" },
],
},
{
name: "HackRPI XI",
links: [{ href: "/last-year#winners", children: "Winners" }],
},
],
default: originalModule.default,
};
});

// Mock MLH Banner
jest.mock("@/components/mlh-banner/mlh-banner", () => {
return function MockMlhBanner() {
Expand Down Expand Up @@ -134,9 +111,10 @@ describe("NavBar Component", () => {
// Act - Render the component
renderWithProviders(<NavBar showOnScroll={true} />);

// Assert - Check if links are passed correctly - we expect 2 links based on our mock
// Assert - Check if links are passed correctly based on the exported navigation data
const mobileNav = screen.getByTestId("nav-bar-mobile");
expect(mobileNav.textContent).toContain("2 links");
const expectedCount = navLinks.length;
expect(mobileNav.textContent).toContain(`${expectedCount} links`);

// Clean up before rendering again
cleanup();
Expand All @@ -146,7 +124,7 @@ describe("NavBar Component", () => {
renderWithProviders(<NavBar showOnScroll={true} />);

const desktopNav = screen.getByTestId("nav-bar-desktop");
expect(desktopNav.textContent).toContain("2 links");
expect(desktopNav.textContent).toContain(`${expectedCount} links`);
});

it("should handle showOnScroll prop correctly", async () => {
Expand Down
19 changes: 5 additions & 14 deletions __tests__/components/nav-bar/desktop/nav-bar-desktop.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { render, screen } from "@testing-library/react";
import "@testing-library/jest-dom";

// Mock the image imports
jest.mock("@/public/HackRPI_Logo_Yellow_Arrow.png", () => "logo-image-stub");
jest.mock("@/public/Retro_HackRPI_Logo.png", () => "logo-image-stub");
jest.mock("next/image", () => ({
__esModule: true,
default: (props: any) => {
Expand All @@ -12,11 +12,6 @@ jest.mock("next/image", () => ({
}));

// Mock the registration button
jest.mock("@/components/themed-components/registration-link", () => ({
__esModule: true,
default: () => <div data-testid="registration-button">Register Now</div>,
}));

// Mock NavGroupComponent
jest.mock("@/components/nav-bar/desktop/nav-group", () => ({
__esModule: true,
Expand Down Expand Up @@ -70,19 +65,15 @@ describe("DesktopNavBar Component", () => {

// Check direct links
expect(screen.getByText("Sponsor Us")).toBeInTheDocument();
expect(screen.getByText("Event Info")).toBeInTheDocument();
expect(screen.getByText("Schedule")).toBeInTheDocument();
expect(screen.getByText("Announcements")).toBeInTheDocument();
expect(screen.getByText("Prizes")).toBeInTheDocument();
expect(screen.getByText("2048 Leaderboard")).toBeInTheDocument();
expect(screen.getByText("Code of Conduct")).toBeInTheDocument();
});

it("includes registration button", () => {
it("includes registration link", () => {
render(<DesktopNavBar links={mockLinks} />);

// Check for the registration button
expect(screen.getByTestId("registration-button")).toBeInTheDocument();
const registerLink = screen.getByRole("link", { name: /register/i });
expect(registerLink).toHaveAttribute("href", "https://hackrpi2024.devpost.com/project-gallery");
expect(registerLink).toHaveAttribute("target", "_blank");
});

it("applies correct styling to the navbar", () => {
Expand Down
8 changes: 4 additions & 4 deletions __tests__/components/resources.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jest.mock("next/image", () => ({
}));

// Import the component after all mocks are defined
import ResourcesPage from "@/app/resources/page";
import ResourcesPage from "@/app/(with-layout)/resources/page";

describe("Resources Page", () => {
beforeEach(() => {
Expand All @@ -56,9 +56,9 @@ describe("Resources Page", () => {
it("renders the main layout components", () => {
render(<ResourcesPage />);

// Check if the main structural components are rendered
expect(screen.getByTestId("nav-bar")).toBeInTheDocument();
// Footer is imported but not actually used in the component
// Verify primary headings render
expect(screen.getByText("Web Development")).toBeInTheDocument();
expect(screen.getByText("Submitting Your Project")).toBeInTheDocument();
});

it("renders all resource section headings", () => {
Expand Down
Loading
Loading