From 666a8cf216b73782fe0dc473561d82398e0c6c59 Mon Sep 17 00:00:00 2001 From: ErpingS Date: Sat, 25 Oct 2025 17:37:18 -0700 Subject: [PATCH 1/7] update charity submission blurb to dynamically pull hackathon name --- src/components/Judging/SubmissionForm.jsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/components/Judging/SubmissionForm.jsx b/src/components/Judging/SubmissionForm.jsx index e003eca2..db5e1db9 100644 --- a/src/components/Judging/SubmissionForm.jsx +++ b/src/components/Judging/SubmissionForm.jsx @@ -13,6 +13,7 @@ import { Button, Dropdown, Select, TextArea, TextInput } from '../Input' import Toast from '../Toast' import { A, ErrorMessage, H1, H3, Label, P, ErrorSpan as Required } from '../Typography' import { useHackathon } from '../../utility/HackathonProvider' +import { copyText } from '../../utility/Constants' const FormSection = styled.div` display: flex; @@ -168,6 +169,8 @@ const SubmissionForm = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [project]) + const { activeHackathon } = useHackathon() + const updateMember = (index, field, value) => { const newMembers = [...members] newMembers[index][field] = value @@ -360,10 +363,11 @@ const SubmissionForm = ({

- Every project submitted at HackCamp 2024, regardless of completion, will be eligible for - a $5 donation to the charity of your choice from a curated list by the HackCamp team! - This is done so as to emphasize HackCamp's mission of focusing on the learning and - growth aspect of hackathons! + Every project submitted at {copyText[activeHackathon].hackathonName}, regardless of + completion, will be eligible for a $5 donation to the charity of your choice from a + curated list by the {copyText[activeHackathon].hackathonNameShort} team! This is done so + as to emphasize {copyText[activeHackathon].hackathonNameShort}'s mission of focusing on + the learning and growth aspect of hackathons!

Click   From 6b2118c43af33b55d0894f4591d4d2d728482b46 Mon Sep 17 00:00:00 2001 From: Erping <111095333+ErpingS@users.noreply.github.com> Date: Sat, 25 Oct 2025 23:36:50 -0700 Subject: [PATCH 2/7] [HC2025] update charities (#745) * update charity submission blurb to dynamically pull hackathon name * update charities for hackcamp 2025 * fix notion link to public version --- src/components/Judging/SubmissionForm.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/Judging/SubmissionForm.jsx b/src/components/Judging/SubmissionForm.jsx index db5e1db9..93feba44 100644 --- a/src/components/Judging/SubmissionForm.jsx +++ b/src/components/Judging/SubmissionForm.jsx @@ -70,16 +70,16 @@ const ButtonContainer = styled.div` const charities = [ { - value: 'BC Children’s Hospital', - label: 'BC Children’s Hospital', + value: 'AMS Food Bank', + label: 'AMS Food Bank', }, { - value: 'Alzheimer Society of Canada', - label: 'Alzheimer Society of Canada', + value: 'GiveInternet.Org', + label: 'GiveInternet.Org', }, { - value: 'Nature Trust of British Columbia', - label: 'Nature Trust of British Columbia', + value: 'Michael Cuccione Foundation', + label: 'Michael Cuccione Foundation', }, ] @@ -374,7 +374,7 @@ const SubmissionForm = ({ here From d1cb028d0a2eceac4c7d9775ab47b98a48909bd2 Mon Sep 17 00:00:00 2001 From: Erping <111095333+ErpingS@users.noreply.github.com> Date: Sun, 26 Oct 2025 00:40:00 -0700 Subject: [PATCH 3/7] [HC 2025] Add superlative prize submission (#746) * update charity submission blurb to dynamically pull hackathon name * add superlative prize submission (hacker view) * add superlative prize submission (admin view) --- .../Judging/Admin/SuperlativeSubmissions.jsx | 82 +++++++++++++++++++ src/components/Judging/SubmissionForm.jsx | 39 ++++++++- src/containers/JudgingPanel.jsx | 40 ++++++++- src/utility/firebase.js | 12 +++ 4 files changed, 168 insertions(+), 5 deletions(-) create mode 100644 src/components/Judging/Admin/SuperlativeSubmissions.jsx diff --git a/src/components/Judging/Admin/SuperlativeSubmissions.jsx b/src/components/Judging/Admin/SuperlativeSubmissions.jsx new file mode 100644 index 00000000..2f29e308 --- /dev/null +++ b/src/components/Judging/Admin/SuperlativeSubmissions.jsx @@ -0,0 +1,82 @@ +import React from 'react' +import styled from 'styled-components' +import { StyledCSVLink } from '../../../containers/JudgingPanel' +import Accordion from '../../Accordion' +import { CardLike } from '../../Common' +import { Button } from '../../Input' +import { H1 } from '../../Typography' +import { useHackathon } from '../../../utility/HackathonProvider' + +const SuperlativePrize = styled.div` + ${CardLike}; + padding: 0.25em 0.5em; + margin: 0.5em; +` + +const EntriesList = styled.ul` + color: ${p => p.theme.colors.foreground}; + margin-top: 0; + cursor: default; +` + +const LinkContainer = styled.div` + padding: 0.5em; +` + +const SuperlativeSubmissions = ({ superlativePrizes }) => { + const { activeHackathon } = useHackathon() + const getCsvFriendlyData = projects => { + const formattedProjects = projects.map(project => { + const portalLink = window.location.origin // to support local development as well + const projectInfo = { + 'Title': project.title, + 'Link': `${portalLink}/app/${activeHackathon}/projects/${project.id}`, + 'Devpost': project.links.devpost, + 'Charity choice': project.charityChoice, + } + project.teamMembers.forEach((member, index) => { + projectInfo[`Member ${index + 1} Name`] = member.name + projectInfo[`Member ${index + 1} Email`] = member.email + projectInfo[`Member ${index + 1} Discord`] = member.discord + }) + return projectInfo + }) + return formattedProjects + } + + return ( +

+

Projects by Superlative Prizes

+ {Object.keys(superlativePrizes).map( + (prize, i) => + superlativePrizes[prize].length > 0 && ( + + + + {superlativePrizes[prize].map((submission, i) => ( +
  • + {submission.title}{' '} + {submission.draftStatus === 'public' ? 'Published (Submitted)' : 'Draft Only'} +
  • + ))} +
    + +
    +
    + ) + )} +
    + ) +} + +export default SuperlativeSubmissions diff --git a/src/components/Judging/SubmissionForm.jsx b/src/components/Judging/SubmissionForm.jsx index 93feba44..6701912e 100644 --- a/src/components/Judging/SubmissionForm.jsx +++ b/src/components/Judging/SubmissionForm.jsx @@ -7,7 +7,7 @@ import { validateURL, validateYoutubeURL, } from '../../utility/Validation' -import { getSponsorPrizes } from '../../utility/firebase' +import { getSponsorPrizes, getSuperlativePrizes } from '../../utility/firebase' import { findElement } from '../../utility/utilities' import { Button, Dropdown, Select, TextArea, TextInput } from '../Input' import Toast from '../Toast' @@ -131,18 +131,27 @@ const SubmissionForm = ({ const [members, setMembers] = useState(project.teamMembers || defaultMembers) const [links, setLinks] = useState(project.links || {}) const [sponsorPrizes, setSponsorPrizes] = useState([]) + const [superlativePrizes, setSuperlativePrizes] = useState([ + 'Most Accessible Design', + 'Future Startup', + 'Best Pitch', + 'Best Hack for Social Good', + ]) const [mentorNomination, setMentorNomination] = useState(project.mentorNomination || '') const [charityChoice, setCharityChoice] = useState(project.charityChoice || '') const [selectedPrizes, setSelectedPrizes] = useState(project.sponsorPrizes || []) + const [superlativeSelectedPrizes, setSuperlativeSelectedPrizes] = useState( + project.superlativePrizes || [] + ) const [draftStatus, setDraftStatus] = useState(project.draftStatus || 'draft') const [errors, setErrors] = useState({}) const { dbHackathonName } = useHackathon() - // Fetch list of sponsor prizes from Firebase + // Fetch list of sponsor and superlative prizes from Firebase useEffect(() => { async function getPrizes() { - const prizes = await getSponsorPrizes(dbHackathonName) - setSponsorPrizes(prizes) + const sponsorPrizes = await getSponsorPrizes(dbHackathonName) + setSponsorPrizes(sponsorPrizes) } getPrizes() }, [dbHackathonName]) @@ -156,6 +165,7 @@ const SubmissionForm = ({ setMentorNomination(project.mentorNomination || '') setCharityChoice(project.charityChoice || '') setSelectedPrizes(project.sponsorPrizes || []) + setSuperlativeSelectedPrizes(project.superlativePrizes || []) setDraftStatus(project.draftStatus || 'draft') const newArray = project.teamMembers ? [...project.teamMembers] : [] @@ -274,6 +284,7 @@ const SubmissionForm = ({ teamMembers: filteredMembers, links, sponsorPrizes: selectedPrizes, + superlativePrizes: superlativeSelectedPrizes, charityChoice, mentorNomination, uid: project.uid, @@ -411,6 +422,26 @@ const SubmissionForm = ({
    )} + {superlativePrizes && ( + + Superlative Prizes +
    + {superlativePrizes.map(prize => { + return ( + - setSuperlativeSelectedPrizes(prev => (prev.includes(prize) ? [] : [prize])) - } - /> + <> +