|
| 1 | +SwampHacks has a few major events which the tech team is required to provide |
| 2 | +services for. |
| 3 | + |
| 4 | +--- |
| 5 | +## Pre-applications release |
| 6 | + |
| 7 | +Coming Soon Page |
| 8 | + |
| 9 | + * A landing page will be needed to inform people that SwampHacks will indeed |
| 10 | + be happening soon. More importantly however, this page allows us to begin |
| 11 | + constructing an email list of people who are interested early on, which we can |
| 12 | + send emails to later asking them to apply. |
| 13 | + |
| 14 | + A simple form with an email input will be needed. Make sure to validate |
| 15 | + emails appropriately (preferrably on both the front and back end) and return |
| 16 | + visible errors to the user. |
| 17 | + |
| 18 | + * Note: you should also try to use last year's emails (participants, people |
| 19 | + from the interest list, everyone) in your email list. |
| 20 | + |
| 21 | +## Applications Release |
| 22 | + |
| 23 | +This is when we open the forms for people to start registering for the |
| 24 | +hackathon. While MLH gives some basic guidelines for what information should |
| 25 | +be included (including the stuff that they specifically need to know), the form |
| 26 | +data you include beyond this can help make deciding who to accept easier. |
| 27 | + |
| 28 | +Note that while you are probably wanting as many people to apply as possible, |
| 29 | +you only will be letting a certain number of people participate after decisions. |
| 30 | +More people signing up means more people will be rejected, and this will |
| 31 | +ultimately affect a lot of people's self-perception of skill, career potential, |
| 32 | +etc. During XI we tried to keep things as fair as possible by also prioritizing |
| 33 | +people in "early-career," as well as their passion for engineering on top of |
| 34 | +experience. We will get into this more later, but at the very least, you need |
| 35 | +to carefully consider what information will let you make the most informed, fair |
| 36 | +decisions later on. |
| 37 | + |
| 38 | +Also, it might be a good idea to get data that allows you to track some |
| 39 | +statistics for getting an understanding of what kind of people are applying, |
| 40 | +as well as some stuff to compare to for future years. For example, you could |
| 41 | +get info on who is applying inside and outside of UF, and who is attempting |
| 42 | +to join their first hackathon. |
| 43 | + |
| 44 | + * Data that can show a person's experience |
| 45 | + |
| 46 | + * This is pretty simple. Have them upload their resume. We then stored the |
| 47 | + resume in an amazon S3 bucket (using cloudflare r2 as a wrapper), using their |
| 48 | + userID as the filename. Files should be able to be replaced, preferably under |
| 49 | + the last filename as before. Please make sure that only platform admins (the |
| 50 | + people who will be making decisions based off of resumes) and the uploaders are |
| 51 | + the only people able to see these resumes. For XI this was implemented with |
| 52 | + [pre-signed objects returned from S3](). |
| 53 | + # TODO: add link |
| 54 | + |
| 55 | + * Data that can show a person's passion |
| 56 | + |
| 57 | + * This is a bit trickier. We had people answer a couple of essay questions |
| 58 | + that we thought would get a good understanding on if people actually like what |
| 59 | + they do or are just in it for the money. There's also some benefit in |
| 60 | + filtering out people who aren't willing to write something to apply. |
| 61 | + A GPT-ed response should (...hopefully) be obvious as well. |
| 62 | + |
| 63 | + * Email compliance laws |
| 64 | + |
| 65 | + * You should also include a check box & togglable setting for |
| 66 | + knowing whether or not certain candidates want emails from SwampHacks. |
| 67 | + This is to comply with laws that prevent businesses from spamming people. |
| 68 | + https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-bu |
| 69 | + siness |
| 70 | + |
| 71 | +## Decisions |
| 72 | + |
| 73 | +Decisions happened in XI like this: |
| 74 | + |
| 75 | + 1. Have staff individually review each application, and assign each person an experience and passion score on a 1-5 scale |
| 76 | + |
| 77 | + * NOTE NOTE NOTE NOTE NOTE: |
| 78 | + |
| 79 | + * PLEAAASE do not just make a 1-5 button for each one. Instead (say for |
| 80 | + Experience) make 1 = "Never programmed before", 3 = "Has had an internship", |
| 81 | + 4 = "Has had multiple internships", 5 = "Has worked at FAANG or big tech". |
| 82 | + This way, *everyone* grading applications have a clear idea of what a 1, 2, |
| 83 | + 3, 4, and 5 mean, and aren't going to grade people differently. Represent the |
| 84 | + values 1-5 internally, but on the UI just show what they mean pls |
| 85 | + |
| 86 | + 1. After all applications are done, run an algorithm that turns the raw scores |
| 87 | + into a ranked list, where every person is above and below someo else. Take the |
| 88 | + first X amount of values you want to hit your admissions quota. |
| 89 | + |
| 90 | + * We also accounted for certain quotas we had to hit, like having 40% |
| 91 | + acceptances be people in early career, and 60% of people be from UF. Alex Wala |
| 92 | + wrote a [pretty good blog post]() about how we did it. |
| 93 | + # TODO: add link |
| 94 | + |
| 95 | + 1. Send out acceptance and rejection letters to everyone |
| 96 | + |
| 97 | + 1. If there are some rejected people you want part of the hackathon, change |
| 98 | + their user's status, and send them an email saying that they're actually |
| 99 | + accepted now |
| 100 | + |
| 101 | + * We didn't have a system in place for this, but because there are some |
| 102 | + people you are certain you may want accepted or rejected no matter what (perhaps |
| 103 | + excluding them from the quota used by the admissions algo too) you should make a |
| 104 | + feature for flagging people |
| 105 | + |
| 106 | + 1. Now, for all of the accepted people, they will have to click a button to |
| 107 | + confirm their attendance. Not everyone will do this, so we need a way to let |
| 108 | + some of the rejected people back in. Which leads us to... |
| 109 | + |
| 110 | +## Waitlist |
| 111 | +When a person is rejected, they should be able to click a button somewhere that |
| 112 | +allows them to join a waitlist. The waitlist might grow a lot and become very |
| 113 | +big. |
| 114 | + |
| 115 | +At some point before the event begins, you will need to let people off of the |
| 116 | +waitlist, accept them, and allow them to confirm their acceptance just like |
| 117 | +before. Again, not everyone who is accepted will confirm. |
| 118 | + |
| 119 | +The way you let people off of the waitlist is up to you. We did it in a |
| 120 | +rolling fashion in which, about a couple weeks before the hackathon, we |
| 121 | +would let 50 people off of the waitlist every couple of days, with the first |
| 122 | +people who signed up for the waitlist being the first people to be let off |
| 123 | +(first-come-first-serve). Everyone who had not been confirmed before a cycle was |
| 124 | +also automatically added to the back of the waitlist. |
| 125 | + |
| 126 | +Again, when they are accepted, they get an email. As of XI we already have a |
| 127 | +system that handles this, but it is your job to test it and make sure that it |
| 128 | +works they way you and your team expects it to, and modify things as needed. |
| 129 | + |
| 130 | +## Check-in & Redeemables |
| 131 | +### Background |
| 132 | +Now it's the day of the event. There are a few people lined up outside of a |
| 133 | +door, and many people just drove a long distance to get here. How are you going |
| 134 | +to make sure that anyone who hasn't actually signed up and been confirmed isn't |
| 135 | +let in? |
| 136 | + |
| 137 | +On top of this, each person is going to get certain things like a t-shirt, |
| 138 | +and food throughout the event. We need to make sure we don't give out too many |
| 139 | +things and be able to track our inventory. Further, we might also want to know |
| 140 | +who attends what workshops, especially ones run by sponsor companies who might |
| 141 | +also want to know the specific people who attended. We call each t-shirt, food |
| 142 | +item, and workshop a "redeemable". When we check for them, we need to make sure |
| 143 | +the line also moves quickly. |
| 144 | + |
| 145 | +For XI we solved this problem with a pretty cool badge system. Essentially, |
| 146 | +when you sign in you get a badge with a lanyard that also has a thin NFC |
| 147 | +sticker on it. When people got redeemables we scan the nfc sticker (which is |
| 148 | +very very quick, quicker than aligning a camera for a QR-code) and our database |
| 149 | +automatically updates, subtracting 1 from an item's counter and also updating a |
| 150 | +user to say that they received a redeemable. |
| 151 | + |
| 152 | +NFC stickers are quite simple. They are a small circuit with a bit of memory (a |
| 153 | +stored unique identifier) that can be accessed by near-field radio. Most modern |
| 154 | +smartphones have support for this, but (at the time) API support on the web was |
| 155 | +very new, unlike RFID, a similar technology. |
| 156 | + |
| 157 | +Our organizers thought that the RFID stickers looked too bulky, so they |
| 158 | +bought the NFC ones instead. Because there is very bad web support for NFC |
| 159 | +we had to build out a react native app for the scanning. That is why the |
| 160 | +swamphacks/xi-checkin-nfc repository exists. |
| 161 | + |
| 162 | +### Anyways, on to check-in |
| 163 | + |
| 164 | +Since users don't already have something like an NFC tag, QR-codes were our |
| 165 | +best option for quickly moving a line of people while having proof that people |
| 166 | +have been accepted and confirmed. We had the QR-code show up in the portal, but |
| 167 | +we also put them inside of emails sent out several days before the event. This |
| 168 | +was done by storing the QR codes as images in S3, and putting their appropriate |
| 169 | +links inside the sent emails (if you do this again, please test this |
| 170 | +rigorously). |
| 171 | + |
| 172 | +During the check-in line, people would show the QR-code to someone with a phone. |
| 173 | +The person would scan the QR-code, verify that the user's name and profile icon |
| 174 | +was theirs, be assigned a badge after scanning it, and on they went to hack. |
| 175 | + |
| 176 | +However, there are some edge cases you should know: |
| 177 | + |
| 178 | + * Some people will arrive late |
| 179 | + |
| 180 | + * Have a simple late form people can fill out *before* arriving late, with |
| 181 | + their expected time and preferably a Discord/phone number to contact. Make sure |
| 182 | + to have someone check them in once they arrive. |
| 183 | + |
| 184 | + * Some people will show up without having submitted an application, and we are |
| 185 | + under quota |
| 186 | + |
| 187 | + * Have them register on a form, accept them internally and check them in |
| 188 | + if everything looks good. |
| 189 | + |
| 190 | + * Some people will show up still on the waitlist / rejected, and we are under quota |
| 191 | + |
| 192 | + * If using the XI system, get the email associated with their Discord |
| 193 | + account, look them up in the database, change their status to accepted, and |
| 194 | + check them in. We should have a SQL script that does this btw |
| 195 | + |
| 196 | +## Judging |
| 197 | + |
| 198 | +### Process |
| 199 | + |
| 200 | +The awards are organized like this: |
| 201 | + |
| 202 | + * You will have multiple "tracks" that people submit their projects for |
| 203 | + |
| 204 | + * One general one for everyone, as well as specific ones. The organizers |
| 205 | + are going to pick these out, and some can be in line with the hackathon's |
| 206 | + theme. |
| 207 | + |
| 208 | + * There will also be smaller awards, like "least vibe-coded" and "best game design". |
| 209 | + |
| 210 | +For the general track, all of the judges will review a list of projects that |
| 211 | +they are assigned according to a set scale. Projects should have multiple judges |
| 212 | +look at them, and their scores should be combined via some algorithm. |
| 213 | + |
| 214 | +For other tracks, the same process holds. But rather than have all of the judges |
| 215 | +reviewing for every track, only the ones with the most relevant experience will |
| 216 | +judge for a track. |
| 217 | + |
| 218 | +To this end, in XI we broke up judging into two rounds: one general and one |
| 219 | +track round. Judges had to review for both rounds but with the requirements for |
| 220 | +general and the specific assigned track in mind, respectively. |
| 221 | + |
| 222 | +How did they input their scores for each project? We used a platform: |
| 223 | + |
| 224 | +--- |
| 225 | + |
| 226 | +### Judging platform |
| 227 | +It's up to you if you want to make your own judging platform. That can also |
| 228 | +be quite an in-depth project though, and hackathon judging is a problem |
| 229 | +already solved by a good few repos out there. So for XI we used one called |
| 230 | +[hackutd/jury](https://github.com/hackutd/jury?tab=readme-ov-file). |
| 231 | + |
| 232 | +While its ranking system allowed for multiple prize types, its authentication system |
| 233 | +was pretty bad. Multiple accounts had to be made for each judge for every prize |
| 234 | +that they judged for, and during the second round we also ran into an issue that |
| 235 | +prevented us from creating accounts that had to be quickly solved. You might |
| 236 | +want to try out a different platform. |
| 237 | + |
| 238 | +We also set it up pretty quickly for XI and weren't able to test it before the |
| 239 | +event (yikes!) |
| 240 | + |
| 241 | +Please test your judging platform before everything happens, please. |
| 242 | + |
| 243 | +## After |
| 244 | + |
| 245 | +Congratulations, at this point, the hackathon is over! Yippee! I hope that the |
| 246 | +experience is overall something that teaches you a lot and is enjoyable. There |
| 247 | +are a lot of moving parts, features, and testing, but you will come out as |
| 248 | +a much more experienced engineer as a part of this team, and hopefully have some |
| 249 | +stories to tell. A lot of people will have a direct benefit from the services |
| 250 | +that the tech team provided, whether they know it or not. |
| 251 | + |
| 252 | +If you want some advice on making sure that all of the major points of this |
| 253 | +article goes well, please take a look at "Letter To New Tech Teams" in the main |
| 254 | +section of this documentation. |
| 255 | + |
| 256 | +Good Luck Have Fun :) |
0 commit comments