From d0584af5955ef6b73718fb535b66183ef04a33cc Mon Sep 17 00:00:00 2001 From: Fiona Truong <151110138+fionaa-truong@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:43:14 -0600 Subject: [PATCH 01/14] merge main into prod (#253) Co-authored-by: burtonjong Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> Co-authored-by: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> From 30845d90d92808bbaad87c602881565c72e1a8ff Mon Sep 17 00:00:00 2001 From: simar kandola Date: Mon, 27 Oct 2025 13:55:30 -0600 Subject: [PATCH 02/14] fix assigned teams apge (#249) --- src/app/judging/assigned-teams/page.tsx | 87 +++++++++++++++++++++---- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/src/app/judging/assigned-teams/page.tsx b/src/app/judging/assigned-teams/page.tsx index f3f80d96..d43adf34 100644 --- a/src/app/judging/assigned-teams/page.tsx +++ b/src/app/judging/assigned-teams/page.tsx @@ -1,18 +1,81 @@ +"use client"; + +import React from "react"; +import { client } from "@/app/QueryProvider"; +import { useUser } from "@/components/contexts/UserContext"; +import KevinLoadingRing from "@/components/KevinLoadingRing"; +import { useQuery } from "@tanstack/react-query"; + const AssignedTeamsPage = () => { - const assignedTeams = [ - { id: 1, name: "Team Alpha" }, - { id: 2, name: "Team Beta" }, - { id: 3, name: "Team Gamma" }, - ]; + const { currentUser } = useUser(); + + const { data: roomData, isLoading: roomLoading } = useQuery({ + queryKey: ["RoomForJudge", currentUser?.JUDGE_roomId], + queryFn: async () => { + if (!currentUser?.JUDGE_roomId) + throw new Error("No room assigned to judge"); + const { data, errors } = await client.models.Room.get({ + id: currentUser.JUDGE_roomId, + }); + if (errors) throw new Error(errors[0]?.message || "Failed to load room"); + return data; + }, + enabled: !!currentUser?.JUDGE_roomId, + }); + + const { data: teamsForRoom, isLoading: teamsLoading } = useQuery({ + queryKey: ["TeamsForRoom", roomData?.id], + queryFn: async () => { + if (!roomData) return []; + const teamRooms = (await roomData.teamRoom())?.data; + if (!teamRooms) return []; + const teams = await Promise.all( + teamRooms.map(async (tr) => (await tr.team()).data), + ); + return teams; + }, + enabled: !!roomData, + }); + + if (!currentUser) + return
Please sign in to see assigned teams.
; + if (roomLoading || teamsLoading) + return ( +
+ +
+ ); + if (!roomData) + return
You have no room assigned yet.
; return ( -
-

Put assinged teams here Assigned Teams

-
    - {assignedTeams.map((team) => ( -
  • {team.name}
  • - ))} -
+
+

+ Your Teams: {roomData?.name ?? ""} +

+ {teamsForRoom && teamsForRoom.length > 0 ? ( +
+ {teamsForRoom.map((team: any) => ( +
+
+
+ {team.name} +
+
+ Team ID: {team.id} +
+
+
+ ))} +
+ ) : ( +
+ No teams assigned to your room yet. Check back later! +
+ )}
); }; From fde7a899c4b6047d561296f5a8abf1ffed40cc8e Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Mon, 27 Oct 2025 23:46:27 -0600 Subject: [PATCH 03/14] Hmt-192-scheduler-inifinite-load-on-prod (#256) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> --- src/app/judging/JudgingTable.tsx | 44 ++++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/app/judging/JudgingTable.tsx b/src/app/judging/JudgingTable.tsx index 76715f62..4b4cc630 100644 --- a/src/app/judging/JudgingTable.tsx +++ b/src/app/judging/JudgingTable.tsx @@ -20,7 +20,6 @@ export default function JudgingTable({ }) { const [selectedTeam, setSelectedTeamId] = useState(""); const [teamName, setTeamName] = useState(""); - const [teamsLeft, setTeamsLeft] = useState(0); const { currentUser } = useUser(); const { data: roomData, isFetching: roomIsFetching } = useQuery({ @@ -51,30 +50,31 @@ export default function JudgingTable({ return teams; }, }); - const isFetching = roomIsFetching && teamsForRoomIsFetching; + + const { data: teamsLeft = 0, isFetching: teamsLeftIsFetching } = useQuery({ + queryKey: ["TeamsLeftCount", teamsForRoomData, currentUser.username], + queryFn: async () => { + if (!teamsForRoomData) return 0; + const boolArray = await Promise.all( + teamsForRoomData.map(async (team) => { + const scores = await team?.scores(); + return ( + scores?.data.filter( + (score) => score.judgeId === currentUser.username, + ).length === 0 + ); + }), + ); + return teamsForRoomData.filter((_, i) => boolArray[i]).length; + }, + enabled: !!teamsForRoomData && !!currentUser.username, + }); + + const isFetching = + roomIsFetching || teamsForRoomIsFetching || teamsLeftIsFetching; if (isFetching || !roomData || !teamsForRoomData) { return ; } - async function getFilteredTeamsCount() { - // https://medium.com/@debbs119/array-filter-and-array-map-with-async-functions-9636e1ae8d6e --> why it needs to map to a boolean array first - if (!teamsForRoomData) { - return; - } - const boolArray = await Promise.all( - teamsForRoomData?.map(async (team) => { - const scores = await team?.scores(); - return ( - scores?.data.filter((score) => score.judgeId === currentUser.username) - .length === 0 - ); - }), - ); - setTeamsLeft( - teamsForRoomData?.filter((_, index) => boolArray[index]).length, - ); - } - - getFilteredTeamsCount(); const panelData = [ { From dd542a6407db2fc2c50b800aa7083745ed78de0d Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:48:59 -0600 Subject: [PATCH 04/14] Hmt 192 scheduler inifinite load on prod (#259) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> From 50531dc6eb44877a401c629ad545160d1a322533 Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Fri, 31 Oct 2025 08:17:44 -0600 Subject: [PATCH 05/14] Hmt 192 scheduler inifinite load on prod (#260) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> --- src/app/judging/JudgingTable.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/judging/JudgingTable.tsx b/src/app/judging/JudgingTable.tsx index 4b4cc630..1ceae524 100644 --- a/src/app/judging/JudgingTable.tsx +++ b/src/app/judging/JudgingTable.tsx @@ -52,7 +52,12 @@ export default function JudgingTable({ }); const { data: teamsLeft = 0, isFetching: teamsLeftIsFetching } = useQuery({ - queryKey: ["TeamsLeftCount", teamsForRoomData, currentUser.username], + queryKey: [ + "TeamsLeftCount", + teamsForRoomData, + currentUser.username, + teamsForRoomData?.map((t) => t?.id).join(","), + ], queryFn: async () => { if (!teamsForRoomData) return 0; const boolArray = await Promise.all( @@ -67,11 +72,20 @@ export default function JudgingTable({ ); return teamsForRoomData.filter((_, i) => boolArray[i]).length; }, - enabled: !!teamsForRoomData && !!currentUser.username, + enabled: !!teamsForRoomData?.length && !!currentUser.username, }); const isFetching = roomIsFetching || teamsForRoomIsFetching || teamsLeftIsFetching; + console.log( + "Is fetching", + isFetching, + "Room Data", + roomData, + "Teams For RoomData", + teamsForRoomData, + ); + console.log("Loading", isFetching || !roomData || !teamsForRoomData); if (isFetching || !roomData || !teamsForRoomData) { return ; } From 1341e042010628425add1a7b6d55be914a5bc816 Mon Sep 17 00:00:00 2001 From: simar kandola Date: Wed, 5 Nov 2025 11:07:04 -0700 Subject: [PATCH 06/14] fix: scheduler to use duration (#261) Co-authored-by: Fiona --- amplify/data/resource.ts | 1 + .../ScheduleTeamsAndJudges/handler.ts | 1 + amplify/graphql/API.ts | 3 +++ amplify/graphql/mutations.ts | 1 + amplify/graphql/queries.ts | 2 ++ src/app/judging/assigned-teams/page.tsx | 2 +- .../admin/Judging/JudgingSchedule.tsx | 5 +++- .../admin/Judging/JudgingTimeline.tsx | 12 ++++++--- src/components/admin/Judging/RoomAssigner.tsx | 26 +++++++++++++------ src/components/judging/Schedule/schedule.tsx | 10 ++++--- 10 files changed, 46 insertions(+), 17 deletions(-) diff --git a/amplify/data/resource.ts b/amplify/data/resource.ts index a7bb7644..abc90963 100644 --- a/amplify/data/resource.ts +++ b/amplify/data/resource.ts @@ -131,6 +131,7 @@ const schema = a id: a.id().required(), time: a.datetime().required(), zoomLink: a.string().required(), + duration: a.integer(), teamId: a.id().required(), roomId: a.id().required(), team: a.belongsTo("Team", "teamId"), diff --git a/amplify/function/BusinessLogic/ScheduleTeamsAndJudges/handler.ts b/amplify/function/BusinessLogic/ScheduleTeamsAndJudges/handler.ts index 3d8ce54c..b8352b3b 100644 --- a/amplify/function/BusinessLogic/ScheduleTeamsAndJudges/handler.ts +++ b/amplify/function/BusinessLogic/ScheduleTeamsAndJudges/handler.ts @@ -118,6 +118,7 @@ export const handler: Schema["ScheduleTeamsAndJudges"]["functionHandler"] = time: currTime.toISOString(), roomId: roomIds[column], zoomLink: "", + duration: presentationDuration, }, }, }), diff --git a/amplify/graphql/API.ts b/amplify/graphql/API.ts index 394c22af..dda5abab 100644 --- a/amplify/graphql/API.ts +++ b/amplify/graphql/API.ts @@ -122,6 +122,7 @@ export type TeamRoom = { time: string; updatedAt: string; zoomLink: string; + duration?: number | null; }; export type Room = { @@ -493,6 +494,7 @@ export type CreateTeamRoomInput = { teamId: string; time: string; zoomLink: string; + duration?: number | null; }; export type ModelUserConditionInput = { @@ -623,6 +625,7 @@ export type UpdateTeamRoomInput = { teamId?: string | null; time?: string | null; zoomLink?: string | null; + duration?: number | null; }; export type UpdateUserInput = { diff --git a/amplify/graphql/mutations.ts b/amplify/graphql/mutations.ts index 79099b55..20ddf45d 100644 --- a/amplify/graphql/mutations.ts +++ b/amplify/graphql/mutations.ts @@ -342,6 +342,7 @@ export const createTeamRoom = /* GraphQL */ `mutation CreateTeamRoom( time updatedAt zoomLink + duration __typename } } diff --git a/amplify/graphql/queries.ts b/amplify/graphql/queries.ts index f6f4ce73..3348ac36 100644 --- a/amplify/graphql/queries.ts +++ b/amplify/graphql/queries.ts @@ -186,6 +186,7 @@ export const getTeamRoom = /* GraphQL */ `query GetTeamRoom($id: ID!) { time updatedAt zoomLink + duration __typename } } @@ -427,6 +428,7 @@ export const listTeamRooms = /* GraphQL */ `query ListTeamRooms( time updatedAt zoomLink + duration __typename } nextToken diff --git a/src/app/judging/assigned-teams/page.tsx b/src/app/judging/assigned-teams/page.tsx index d43adf34..0e7fdb03 100644 --- a/src/app/judging/assigned-teams/page.tsx +++ b/src/app/judging/assigned-teams/page.tsx @@ -49,7 +49,7 @@ const AssignedTeamsPage = () => { return
You have no room assigned yet.
; return ( -
+

Your Teams: {roomData?.name ?? ""}

diff --git a/src/components/admin/Judging/JudgingSchedule.tsx b/src/components/admin/Judging/JudgingSchedule.tsx index b97e81e7..8cfe9986 100644 --- a/src/components/admin/Judging/JudgingSchedule.tsx +++ b/src/components/admin/Judging/JudgingSchedule.tsx @@ -168,7 +168,10 @@ export default function JudgingSchedule() { .join(", ") || "No Team Name", room_id: teamRoom.roomId, start: new Date(teamRoom.time), - end: new Date(new Date(teamRoom.time).getTime() + 15 * 60 * 1000), + end: new Date( + new Date(teamRoom.time).getTime() + + (teamRoom.duration ?? 10) * 60 * 1000, + ), zoomLink: teamRoom.zoomLink, })) : []; diff --git a/src/components/admin/Judging/JudgingTimeline.tsx b/src/components/admin/Judging/JudgingTimeline.tsx index 7bd8f221..28ea0c12 100644 --- a/src/components/admin/Judging/JudgingTimeline.tsx +++ b/src/components/admin/Judging/JudgingTimeline.tsx @@ -1,6 +1,7 @@ "use client"; import { Scheduler } from "@aldabil/react-scheduler"; +import RedirectIcon from "../../RedirectIcon"; type JudgeRoom = { roomName: string; @@ -48,11 +49,14 @@ export default function JudgingTimeline({ deletable={false} viewerExtraComponent={(fields, event) => { return ( -

+ {/* Replace with actual zoom link not the room id */} - Zoom Link:{" "} - {event.title} -

+ Zoom Link + + ); }} /> diff --git a/src/components/admin/Judging/RoomAssigner.tsx b/src/components/admin/Judging/RoomAssigner.tsx index d2da6fda..a87dd22a 100644 --- a/src/components/admin/Judging/RoomAssigner.tsx +++ b/src/components/admin/Judging/RoomAssigner.tsx @@ -21,6 +21,8 @@ export default function RoomAssigner({ const [loading, setLoading] = useState(false); const [error, setError] = useState(null); + const ZOOM_LINK = process.env.NEXT_PUBLIC_ZOOM_LINK; + const handleInputChange = (e: React.ChangeEvent) => { setInputValue(e.target.value); }; @@ -48,13 +50,21 @@ export default function RoomAssigner({ presentationDuration: Number(duration), }); - const meetingData = await createZoomMeeting( - formattedDate, - Number(duration), - ); + // dynamically create zoom links + // const meetingData = await createZoomMeeting( + // formattedDate, + // Number(duration), + // ); + + // setMeetingLink(meetingData.join_url); + // updateTeamRoomsWithZoomLink(); + + // temporary hardcoded zoom link + if (!ZOOM_LINK) { + throw new Error("Zoom link missing in .env."); + } - setMeetingLink(meetingData.join_url); - updateTeamRoomsWithZoomLink(meetingData.join_url); + updateTeamRoomsWithZoomLink(ZOOM_LINK); } catch (err) { setError("Failed to create Zoom meeting."); } finally { @@ -72,7 +82,7 @@ export default function RoomAssigner({ >
- +
- + (); @@ -94,7 +95,10 @@ export default function JudgingSchedule() { .join(", ") || "No Team Name", room_id: teamRoom.roomId, start: new Date(teamRoom.time), - end: new Date(new Date(teamRoom.time).getTime() + 15 * 60 * 1000), + end: new Date( + new Date(teamRoom.time).getTime() + + (teamRoom.duration ?? 10) * 60 * 1000, + ), zoomLink: teamRoom.zoomLink, })) : []; @@ -111,8 +115,8 @@ export default function JudgingSchedule() { ); return isLoading ? ( -
- Loading schedule... +
+
) : (
From d3231cf382835d6e3f736ff366e24ca1feab61fa Mon Sep 17 00:00:00 2001 From: simar kandola Date: Thu, 6 Nov 2025 18:14:33 -0700 Subject: [PATCH 07/14] add different text here (#262) Co-authored-by: Fiona --- src/components/judging/Schedule/schedule.tsx | 46 +++----------------- 1 file changed, 5 insertions(+), 41 deletions(-) diff --git a/src/components/judging/Schedule/schedule.tsx b/src/components/judging/Schedule/schedule.tsx index 40983e34..396e986f 100644 --- a/src/components/judging/Schedule/schedule.tsx +++ b/src/components/judging/Schedule/schedule.tsx @@ -103,57 +103,21 @@ export default function JudgingSchedule() { })) : []; - // State to manage the filter (all teams or assigned teams) - const [filter, setFilter] = useState<"all" | "assigned">("all"); - - // Filtered events based on the selected filter - const filteredEvents = - filter === "all" - ? judgingEvents - : judgingEvents.filter((event) => - judgeData?.some((judge) => judge.JUDGE_roomId === event.room_id), - ); - return isLoading ? (
) : (
- {/* Filter Buttons */}
- - +
Judging Schedule
- {/* Schedule Display */}
- {filteredEvents.length > 0 ? ( - - ) : ( -
Schedule not made yet
- )} +
); From a5868df1f1a31f1e4170157bbe905c364170418f Mon Sep 17 00:00:00 2001 From: simar kandola Date: Thu, 6 Nov 2025 18:56:21 -0700 Subject: [PATCH 08/14] fix totals to not include sidepots (#264) --- src/components/admin/RankingTable.tsx | 99 +++++++++++++++++++-------- 1 file changed, 70 insertions(+), 29 deletions(-) diff --git a/src/components/admin/RankingTable.tsx b/src/components/admin/RankingTable.tsx index 4341e479..1bd030d4 100644 --- a/src/components/admin/RankingTable.tsx +++ b/src/components/admin/RankingTable.tsx @@ -29,11 +29,13 @@ function TableRow({ components = {}, index = 0, total = 0, + scoringMetrics, }: { teamName?: string; components?: ITeamScores[string]["components"]; index?: number; total?: number; + scoringMetrics: Schema["Hackathon"]["type"]["scoringComponents"]; }) { const bgColor = index % 2 === 1 ? "bg-white" : "bg-dashboard-grey"; return ( @@ -41,19 +43,33 @@ function TableRow({ {teamName} - {Object.keys(components).map((componentId) => { - return ( - - {components[componentId]} - - ); - })} + {scoringMetrics + .filter((metric) => !metric.isSidepot) + .map((metric) => { + return ( + + {components[metric.id] || 0} + + ); + })} {total} + {scoringMetrics + .filter((metric) => metric.isSidepot) + .map((metric) => { + return ( + + {components[metric.id] || 0} + + ); + })} ); } @@ -101,7 +117,11 @@ export default function RankingTable({ Number(score.score[scoreComponentId]) : score.score[scoreComponentId]; - return total + Number(score.score[scoreComponentId]); + // Only add to total if it's not a sidepot + if (!metric.isSidepot) { + return total + Number(score.score[scoreComponentId]); + } + return total; }, 0); acc[score.teamId].total += teamScore; @@ -145,24 +165,25 @@ export default function RankingTable({
Team
- {scoringMetrics.map((metric) => { - return ( - -
- {metric.friendlyName} - {metric.isSidepot ? " (Sidepot)" : null} - -
- - ); - })} + {scoringMetrics + .filter((metric) => !metric.isSidepot) + .map((metric) => { + return ( + +
+ {metric.friendlyName} + +
+ + ); + })}
Total @@ -176,6 +197,25 @@ export default function RankingTable({
+ {scoringMetrics + .filter((metric) => metric.isSidepot) + .map((metric) => { + return ( + +
+ {metric.friendlyName} (Sidepot) + +
+ + ); + })} @@ -185,6 +225,7 @@ export default function RankingTable({ teamName={computedScores[teamId].name} components={computedScores[teamId].components} total={computedScores[teamId].total} + scoringMetrics={scoringMetrics} key={index} index={index} /> From 7b0d493a44a1c422b0e7716ccf1a4fb83ae031aa Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Thu, 6 Nov 2025 18:57:03 -0700 Subject: [PATCH 09/14] Hmt 192 scheduler inifinite load on prod (#263) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> --- src/app/judging/JudgingTable.tsx | 10 +--------- src/components/LandingPage/HeroSection.tsx | 4 ++-- src/components/teamRegistration/TeamConfirmation.tsx | 4 ++-- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/app/judging/JudgingTable.tsx b/src/app/judging/JudgingTable.tsx index 1ceae524..3ecde687 100644 --- a/src/app/judging/JudgingTable.tsx +++ b/src/app/judging/JudgingTable.tsx @@ -77,15 +77,7 @@ export default function JudgingTable({ const isFetching = roomIsFetching || teamsForRoomIsFetching || teamsLeftIsFetching; - console.log( - "Is fetching", - isFetching, - "Room Data", - roomData, - "Teams For RoomData", - teamsForRoomData, - ); - console.log("Loading", isFetching || !roomData || !teamsForRoomData); + if (isFetching || !roomData || !teamsForRoomData) { return ; } diff --git a/src/components/LandingPage/HeroSection.tsx b/src/components/LandingPage/HeroSection.tsx index e9bdb6e8..3ff619eb 100644 --- a/src/components/LandingPage/HeroSection.tsx +++ b/src/components/LandingPage/HeroSection.tsx @@ -19,8 +19,8 @@ export default async function HeroSection() { return
Hackathon hasn't been created yet
; } - const eventStartDate = new Date(hackathonData[0].startDate); - const eventEndDate = new Date(hackathonData[0].endDate); + const eventStartDate = new Date(2025, 10, 8, 9, 0, 0); // Month is 0-indexed → 10 = November + const eventEndDate = new Date(2025, 10, 9, 17, 0, 0); // Example: Sunday 5 PM return (
diff --git a/src/components/teamRegistration/TeamConfirmation.tsx b/src/components/teamRegistration/TeamConfirmation.tsx index e44bb4bc..14093447 100644 --- a/src/components/teamRegistration/TeamConfirmation.tsx +++ b/src/components/teamRegistration/TeamConfirmation.tsx @@ -23,8 +23,8 @@ export default async function TeamConfirmation({ return
Hackathon hasn't been created yet
; } - const eventStartDate = new Date(hackathonData[0].startDate); - const eventEndDate = new Date(hackathonData[0].endDate); + const eventStartDate = new Date(2025, 10, 8, 9, 0, 0); // Month is 0-indexed → 10 = November + const eventEndDate = new Date(2025, 10, 9, 17, 0, 0); // Example: Sunday 5 PM return ( <> From 127106dd218047e0d18e640e17f6ef5fe56f8caf Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:15:20 -0700 Subject: [PATCH 10/14] Merge-conflict-prod-to-main (#266) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> Co-authored-by: burtonjong Co-authored-by: Fiona Truong <151110138+fionaa-truong@users.noreply.github.com> Co-authored-by: Fiona Co-authored-by: simar kandola --- src/app/judging/JudgingTable.tsx | 10 ++-------- src/app/judging/assigned-teams/page.tsx | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/app/judging/JudgingTable.tsx b/src/app/judging/JudgingTable.tsx index 3ecde687..4b4cc630 100644 --- a/src/app/judging/JudgingTable.tsx +++ b/src/app/judging/JudgingTable.tsx @@ -52,12 +52,7 @@ export default function JudgingTable({ }); const { data: teamsLeft = 0, isFetching: teamsLeftIsFetching } = useQuery({ - queryKey: [ - "TeamsLeftCount", - teamsForRoomData, - currentUser.username, - teamsForRoomData?.map((t) => t?.id).join(","), - ], + queryKey: ["TeamsLeftCount", teamsForRoomData, currentUser.username], queryFn: async () => { if (!teamsForRoomData) return 0; const boolArray = await Promise.all( @@ -72,12 +67,11 @@ export default function JudgingTable({ ); return teamsForRoomData.filter((_, i) => boolArray[i]).length; }, - enabled: !!teamsForRoomData?.length && !!currentUser.username, + enabled: !!teamsForRoomData && !!currentUser.username, }); const isFetching = roomIsFetching || teamsForRoomIsFetching || teamsLeftIsFetching; - if (isFetching || !roomData || !teamsForRoomData) { return ; } diff --git a/src/app/judging/assigned-teams/page.tsx b/src/app/judging/assigned-teams/page.tsx index 0e7fdb03..d43adf34 100644 --- a/src/app/judging/assigned-teams/page.tsx +++ b/src/app/judging/assigned-teams/page.tsx @@ -49,7 +49,7 @@ const AssignedTeamsPage = () => { return
You have no room assigned yet.
; return ( -
+

Your Teams: {roomData?.name ?? ""}

From e1e5fd24e285d78d7ee7191db7a886baa3049876 Mon Sep 17 00:00:00 2001 From: simar kandola Date: Thu, 6 Nov 2025 19:37:44 -0700 Subject: [PATCH 11/14] use cognito userrole mutation (#267) --- src/app/admin/components/UsersTable.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/app/admin/components/UsersTable.tsx b/src/app/admin/components/UsersTable.tsx index 23d1c2a6..5ad38e0f 100644 --- a/src/app/admin/components/UsersTable.tsx +++ b/src/app/admin/components/UsersTable.tsx @@ -19,11 +19,21 @@ export default function UsersTable({ users }: { users: User[] }) { const deleteUser = async (id: Schema["User"]["deleteType"]) => client.models.User.delete(id); const updateUser = async (updatedData: Schema["User"]["updateType"]) => { + if (updatedData.role) { + const roleUpdateResult = await client.mutations.AddUserToGroup({ + userId: updatedData.id, + groupName: updatedData.role, + }); + + if (roleUpdateResult.errors) { + throw new Error("Failed to update user role in Cognito"); + } + } + return client.models.User.update({ id: updatedData.id, firstName: updatedData.firstName, lastName: updatedData.lastName, - role: updatedData.role, teamId: updatedData.teamId, }); }; From 3d9a8663b7543da0ff26d5a7c1acc2104dab1ed5 Mon Sep 17 00:00:00 2001 From: Oluwafisayo Adabs <116133322+fisayoadabs@users.noreply.github.com> Date: Fri, 7 Nov 2025 11:13:10 -0700 Subject: [PATCH 12/14] Countdown timer (#269) Co-authored-by: Anthony <88424536+anthonyych4n@users.noreply.github.com> Co-authored-by: Burton Jong <108391733+burtonjong@users.noreply.github.com> --- src/components/LandingPage/HeroSection.tsx | 4 ++-- src/components/teamRegistration/TeamConfirmation.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/LandingPage/HeroSection.tsx b/src/components/LandingPage/HeroSection.tsx index 3ff619eb..968f6c7c 100644 --- a/src/components/LandingPage/HeroSection.tsx +++ b/src/components/LandingPage/HeroSection.tsx @@ -19,8 +19,8 @@ export default async function HeroSection() { return
Hackathon hasn't been created yet
; } - const eventStartDate = new Date(2025, 10, 8, 9, 0, 0); // Month is 0-indexed → 10 = November - const eventEndDate = new Date(2025, 10, 9, 17, 0, 0); // Example: Sunday 5 PM + const eventStartDate = new Date(2025, 10, 8, 9, 30, 0); // Month is 0-indexed → 10 = November + const eventEndDate = new Date(2025, 10, 9, 18, 0, 0); // Example: Sunday 5 PM return (
diff --git a/src/components/teamRegistration/TeamConfirmation.tsx b/src/components/teamRegistration/TeamConfirmation.tsx index 14093447..e16a6638 100644 --- a/src/components/teamRegistration/TeamConfirmation.tsx +++ b/src/components/teamRegistration/TeamConfirmation.tsx @@ -23,8 +23,8 @@ export default async function TeamConfirmation({ return
Hackathon hasn't been created yet
; } - const eventStartDate = new Date(2025, 10, 8, 9, 0, 0); // Month is 0-indexed → 10 = November - const eventEndDate = new Date(2025, 10, 9, 17, 0, 0); // Example: Sunday 5 PM + const eventStartDate = new Date(2025, 10, 8, 9, 30, 0); // Month is 0-indexed → 10 = November + const eventEndDate = new Date(2025, 10, 9, 18, 0, 0); // Example: Sunday 5 PM return ( <> From 523ce783df7e1ace45e72d7209ac6f82cef9cfc6 Mon Sep 17 00:00:00 2001 From: simar kandola Date: Fri, 7 Nov 2025 20:22:05 -0700 Subject: [PATCH 13/14] Fix 100 user cap amplify (#271) --- src/app/admin/users/UserTablePage.tsx | 29 ++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/app/admin/users/UserTablePage.tsx b/src/app/admin/users/UserTablePage.tsx index 428dd1d4..d18b6f3e 100644 --- a/src/app/admin/users/UserTablePage.tsx +++ b/src/app/admin/users/UserTablePage.tsx @@ -14,9 +14,28 @@ const selectionSet = [ export type User = Pick; export default async function UserTablePage() { - const { data: users } = await client.models.User.list({ - selectionSet, - }); - if (!users || !Array.isArray(users)) return "No participants were found"; - return ; + //paginate incoming data + let allUsers: User[] = []; + let nextToken: string | null | undefined = undefined; + + do { + const { + data: users, + nextToken: token, + }: { data?: User[]; nextToken?: string | null } = + await client.models.User.list({ + selectionSet, + nextToken, + limit: 1000, + }); + + if (users && Array.isArray(users)) { + allUsers = [...allUsers, ...users]; + } + + nextToken = token; + } while (nextToken); + + if (!allUsers || allUsers.length === 0) return "No participants were found"; + return ; } From 4dfd1bd78a252a8a49d22d3c7a720ebf8635111b Mon Sep 17 00:00:00 2001 From: Fiona Truong <151110138+fionaa-truong@users.noreply.github.com> Date: Sat, 8 Nov 2025 02:03:01 -0700 Subject: [PATCH 14/14] Populate resources page (#272) --- src/app/participant/resources/page.tsx | 4 +-- src/components/Dashboard/UserBasedNav.tsx | 3 +- src/components/LandingPage/JudgeShowcase.tsx | 3 -- src/components/resources/eventsMembers.tsx | 30 ++++++++---------- src/components/resources/generalMembers.tsx | 15 ++++++--- src/components/resources/industryMembers.tsx | 32 ++++++++++++++++++-- src/components/resources/memberCards.tsx | 2 +- src/components/resources/mentors.tsx | 6 ++-- src/components/resources/techMembers.tsx | 18 ++++++----- 9 files changed, 69 insertions(+), 44 deletions(-) diff --git a/src/app/participant/resources/page.tsx b/src/app/participant/resources/page.tsx index b94dfe6c..c4131b50 100644 --- a/src/app/participant/resources/page.tsx +++ b/src/app/participant/resources/page.tsx @@ -21,13 +21,13 @@ export default function ResourcePage() { src="/svgs/resources/pinkSquiggly.svg" alt="Pink Squiggly" fill - className="pointer-events-none opacity-0 md:mt-[540px] md:opacity-100 lg:mt-[600px] xl:mt-[400px] 2xl:mt-52" + className="pointer-events-none opacity-0 md:mt-[540px] md:opacity-100 lg:mt-[600px] xl:mt-[400px] 2xl:mt-64" /> Orange Squiggly
diff --git a/src/components/Dashboard/UserBasedNav.tsx b/src/components/Dashboard/UserBasedNav.tsx index 0dcdb299..fccd2add 100644 --- a/src/components/Dashboard/UserBasedNav.tsx +++ b/src/components/Dashboard/UserBasedNav.tsx @@ -30,8 +30,7 @@ const navigationMap: Record = { { name: "Dashboard", route: "/participant" }, { name: "Food Ticket", route: "/participant/profile/food-ticket" }, { name: "Important Information", route: "/participant/important-info" }, - // ADD RESOURCES BACK IN NEAR THE HACKATHON DATE - // { name: "Resources", route: "/participant/resources" }, + { name: "Resources", route: "/participant/resources" }, ], }; diff --git a/src/components/LandingPage/JudgeShowcase.tsx b/src/components/LandingPage/JudgeShowcase.tsx index 555cf217..a95ef9ad 100644 --- a/src/components/LandingPage/JudgeShowcase.tsx +++ b/src/components/LandingPage/JudgeShowcase.tsx @@ -50,9 +50,6 @@ export default async function JudgeShowcase() {
))}
-

- Full List Coming Soon! -

); } diff --git a/src/components/resources/eventsMembers.tsx b/src/components/resources/eventsMembers.tsx index 6ad0f577..6bc1d606 100644 --- a/src/components/resources/eventsMembers.tsx +++ b/src/components/resources/eventsMembers.tsx @@ -2,34 +2,28 @@ import MemberCards from "./memberCards"; export default function EventsMembers() { const eventsMembers = [ - { name: "Simar Kandola", discord: "coming soon", role: "VP Events" }, - { name: "Tanvi Mahal", discord: "coming soon", role: "Jr VP Events" }, - { name: "May Liu", discord: "coming soon", role: "Events Commissioner" }, + { name: "Simar Kandola", discord: "_the_real_ninja", role: "VP Events" }, + { name: "Tanvi Mahal", discord: "tm.88", role: "Jr VP Events" }, + { name: "May Liu", discord: "pickupmay", role: "Event Coordinator" }, { name: "Adithya Sagar", - discord: "coming soon", - role: "Events Commissioner", + discord: "adithyasagar778", + role: "Event Coordinator", }, { name: "Anthony Chan", - discord: "coming soon", - role: "Events Commissioner", + discord: "anthonyych4n", + role: "Event Coordinator", }, { - name: "Sebastian Nieto", - discord: "coming soon", - role: "Events Commissioner", + name: "Hira Asad", + discord: "purplebarney84", + role: "Event Coordinator", }, - { name: "Hira Asad", discord: "coming soon", role: "Events Commissioner" }, { name: "Abudllah Yousaf", - discord: "coming soon", - role: "Events Commissioner", - }, - { - name: "Ana DuCristea", - discord: "coming soon", - role: "Events Commissioner", + discord: "nicetrylilbro", + role: "Event Coordinator", }, ]; diff --git a/src/components/resources/generalMembers.tsx b/src/components/resources/generalMembers.tsx index 52180b5a..a90c4f9c 100644 --- a/src/components/resources/generalMembers.tsx +++ b/src/components/resources/generalMembers.tsx @@ -2,11 +2,16 @@ import MemberCards from "./memberCards"; export default function GeneralMembers() { const generalMembers = [ - { name: "Fiona Truong", discord: "coming soon", role: "Co-President" }, - { name: "Nathan Phan", discord: "coming soon", role: "Co-President" }, - { name: "Victoria Wong", discord: "coming soon", role: "VP Design" }, - { name: "Ryan Obiar", discord: "coming soon", role: "VP Marketing" }, - { name: "Grace Ilori", discord: "coming soon", role: "VP External" }, + { name: "Fiona Truong", discord: ".fionaaa", role: "Co-President" }, + { name: "Nathan Phan", discord: "natphaan", role: "Co-President" }, + { name: "Victoria Wong", discord: "shib3", role: "VP Design" }, + { name: "Ryan Obiar", discord: "", role: "VP Marketing" }, + { name: "Grace Ilori", discord: "g542_542", role: "VP External" }, + { + name: "Hanna Cho", + discord: "hannagracec", + role: "Marketing Commissioner", + }, ]; const generalBackground = "bg-pastel-pink"; diff --git a/src/components/resources/industryMembers.tsx b/src/components/resources/industryMembers.tsx index 1bd37ef4..1568e21e 100644 --- a/src/components/resources/industryMembers.tsx +++ b/src/components/resources/industryMembers.tsx @@ -2,8 +2,36 @@ import MemberCards from "./memberCards"; export default function IndustryMembers() { const industryMembers = [ - { name: "Kevin", discord: "KevinTheKeycap", role: "Organizer" }, - { name: "Kevin", discord: "KevinTheKeycap", role: "Organizer" }, + { + name: "Alexandru Parcioaga", + discord: "alexandrumentor_87981_83719", + role: "Arcurve", + }, + { name: "Karam Baroud", discord: "yeezy.yeezus", role: "ZeroKey" }, + { + name: "Sankar Achary Jankoti", + discord: "sankarjankoti_38615", + role: "Infosys Limited", + }, + { name: "Anthony Dam", discord: "anthony.cs", role: "Prev @ IBM" }, + { + name: "Sidrah Abdullah", + discord: "degr8sid", + role: "University of Calgary", + }, + { + name: "Farnaz Sheikhi", + discord: "", + role: "University of Calgary", + }, + { + name: "Miti Mazmudar", + discord: "dettanym", + role: "University of Calgary", + }, + { name: "Burton Jong", discord: "j05ng", role: "Pason" }, + { name: "Anthony Chan", discord: "anthonyych4n", role: "Cisco" }, + { name: "Matthew Liu", discord: "degr8sid", role: "Enbridge" }, ]; const industryBackground = "bg-medium-grey"; diff --git a/src/components/resources/memberCards.tsx b/src/components/resources/memberCards.tsx index ceb05c72..1381dfe1 100644 --- a/src/components/resources/memberCards.tsx +++ b/src/components/resources/memberCards.tsx @@ -15,7 +15,7 @@ export default function MemberCards({ }: memberProps) { return (

{name}

diff --git a/src/components/resources/mentors.tsx b/src/components/resources/mentors.tsx index 018e323f..3e5e3b98 100644 --- a/src/components/resources/mentors.tsx +++ b/src/components/resources/mentors.tsx @@ -7,8 +7,8 @@ import IndustryMembers from "./industryMembers"; import TechMembers from "./techMembers"; export default function Mentors() { - const roles = ["events", "tech", "general", "industry"]; - const [isSelected, setIsSelected] = useState("events"); + const roles = ["event", "tech", "general", "industry"]; + const [isSelected, setIsSelected] = useState("event"); return (
@@ -24,7 +24,7 @@ export default function Mentors() {
))}
- {isSelected === "events" && } + {isSelected === "event" && } {isSelected === "tech" && } {isSelected === "general" && } {isSelected === "industry" && } diff --git a/src/components/resources/techMembers.tsx b/src/components/resources/techMembers.tsx index 18cadf9b..52fe5a52 100644 --- a/src/components/resources/techMembers.tsx +++ b/src/components/resources/techMembers.tsx @@ -2,14 +2,16 @@ import MemberCards from "./memberCards"; export default function TechMembers() { const techMembers = [ - { name: "Burton Jong", discord: "coming soon", role: "VP Tech" }, - { name: "Fisayo Adabs", discord: "coming soon", role: "Tech Lead" }, - { name: "Justin Pham", discord: "coming soon", role: "Developer" }, - { name: "Anthony Chan", discord: "coming soon", role: "Developer" }, - { name: "Ajay Sallh", discord: "coming soon", role: "Developer" }, - { name: "Hooriya Khan", discord: "coming soon", role: "Developer" }, - { name: "Simar Kandola", discord: "coming soon", role: "Developer" }, - { name: "Fiona Truong", discord: "coming soon", role: "Developer" }, + { name: "Burton Jong", discord: "j05ng", role: "VP Tech" }, + { + name: "Simar Kandola", + discord: "_the_real_ninja", + role: "HTC Developer", + }, + { name: "Fiona Truong", discord: ".fionaaa", role: "HTC Developer" }, + { name: "Matthew Liu", discord: "degr8sid", role: "Tech Lead" }, + { name: "Yahya Asmara", discord: "aphva", role: "Developer" }, + { name: "Jason Duong", discord: "plehhelp", role: "Developer" }, ]; const techBackground = "bg-fuzzy-peach";