hackgt / timber Goto Github PK
View Code? Open in Web Editor NEWA mystical judging system for hackathons
Home Page: https://expo.hexlabs.org
License: MIT License
A mystical judging system for hackathons
Home Page: https://expo.hexlabs.org
License: MIT License
For the admin panel under the epicenter tab, create a new card for each judge (There is a new way to check if a person is a judge. Rather than having a judge role, I changed the database to use an isJudging
field. Make sure you migrate your database with yarn migrate:dev
so you have these latest changes). Take a look at the backend code, and make sure you can get everyone thats a judge with a route. You may have to add a new route.
Then, on the frontend for every judge and their assignments, create a card that displays a box for each project with different status indicators (like faded, or bolded) if they have already been judged or are currently judging.
This is a bigger task, but we want to migrate over the backend code from submit that checks user project data in different steps, and creates a project at the end. The main file to reference is here.
We should keep the endpoints to check that they are confirmed in registration. You can keep the code related to devpost for now, since we are not entirely sure if we will still use it. You don't need to worry about permissions right now, just that the main functionality still works. Also, you can leave out the eligible prize checking code, since we haven't figured out how we will store that data in prisma yet.
For this route, please keep it all project submission related, as in, don't include any code to retrieve projects by id, or retrieving all projects. We will create admin routes to edit projects in a different issue as well.
For the project squares on the admin dashboard, add functionality so that when you click on them, a popup comes up using https://ant.design/components/popover/. See the screenshot below to see what information was included in the old version of ballot.
If you could include all the categories submitted for, and average score for each category they are being judged for kind of in a list format, that would be much better. Additionally, at the bottom if you could include small form with inputs to change the expo/round, that would be great.
Using private routes, add permissions routing for the frontend based on user role and if they're judging
Category groups essentially encompass a group of categories. For this route, create routes to create a category group, edit a category group (by passing in a list of categories or if you want to update a name), and finally deleting a category group. Look at the other routes to see how things were implemented.
For each of the projects, add an average row that will take all the judge data scores and show the average scores. Then, using https://ant.design/components/tabs/, lets add another view similar to this, that will show a different table for each category. Each row should be a project that submitted for that category, the average score this project received, and the number of times it's been judged for that category. All in all, it should have 3 columns. Additionally, this table should be sorted from highest score to least score.
This view is really important because this is how we'll be able to tell who the winners are for each category.
Under the epicenter tab, create a dashboard view similar to the screenshot below. It should display each project, and for each project, there should be a table for each category the project submitted for. Then, it should include each judges name, along with the total score they gave. This way, we can reference this and see what scores judges gave at a quick glance.
It might be helpful to use these components
Add routes to create/edit assignments for judges to projects. The get all route should be able to filter by hackathon, expo, and round. And also, you should be able to filter by project category groups. This route should have much more error checking than usual, since this will be a core part of our system functionality. Some things to check is that the user is actually a judge, that the user does not already have an assignment for this project already (they can't judge/be queued for the same project twice). It should check they don't have multiple projects started at once.
Somewhere on the page:
Add two routes for creating/editing criteria to a new criteria routes. On the existing project route, add ability to filter projects by category. For the existing categories routes, pass along all the criteria associated with each category on all routes. You'll have to use Prisma include. Feel free to add anything else you think we need in these routes.
With in person judging, we want to make it especially clear to judges where to go for their next assignment.
Since projects are assigned on reload, when the judge clicks the "submit" or "skip" button after judging a project, we want to take them to an intermediary page which tells the judge where to go.
On the intermediary page, include the following information:
On the bottom of the page, have a button that says "I'm here" or something along those lines. When the judge clicks that button, they will be taken to the standard judging page with the project's respective criteria.
MAKE SURE THIS INFORMATION IS ONLY REVEALED WHEN FINALIZED (ie use is judging on flag)
On the projects page, if a user is an admin, allow functionality for a user to update the details for a project. Similar to how it works for submit here, open a modal that will allow you to edit the project details.
Sometimes when filling in the min and max value for criteria modal, the minScore and maxScore values glitch out to like -2 or some random value.
Using the /ballots
endpoint that Edmund made, allow judges to submit scores and save the ballot scores to the backend. You'll likely have to look at how to the endpoint works, and might have to make changes to how the data is sent to the backend and edit the backend route. Work with the frontend and have the best way to submit the data. After the ballot data is saved, also send a new request to the backend to update the current assignment and say the Assignment is finished. Overall by the end, you should be able to submit your scores to the backend and update the assignment table.
This will be a little more involved, but setup the backend to use Postgres and socket.io for websockets. You should use Postgres to store client connections to be persisted across server restarts and multiple parallel servers. This will allow us to facilitate multiple connections to clients. You can look at tutorials like this with help, and also reach out to the check in team (ie Mohan) for help since they are implementing something similar. The old system was using Redis, but we are going to use Postgres instead.
On the frontend, create a new dynamic route /category-group/[category group id]
that will use React routers to get the category group. Then on this page, use ProjectCard.tsx
to display each of the projects that are submitted for this route. You'll have to likely create a new backend route for project.ts
that when passed in a category group, it'll send back all of the projects associated with this category group. This way, sponsors can have essentially their own status page, that'll show all of the projects for a project category.
On each category group, add raw data tables for each project that submitted to that category group. Show the judges that are part of that category group and the total score they gave. Make sure you only show the categories and users that are a part of this category group.
On the epicenter page where all the judge scores are listed for each project, add a new column with an edit button, and when pressed it’ll open a modal. This modal should allow us to edit the scores and will save the new ballot score **for each of the criteria. Additionally, add a delete button thatll allow us to delete ballot scores for all of the associated ballots. This should also change the assignments table to a status "SKIPPED" so it looks like the judge skipped the project.
On the judging screen, create a new button next to the submit button that will skip the current project. It should just update the assignment for a project to Skipped, and not submit any scores.
Create a route to create/update/delete ballots. The create route should create multiple rows in the database depending on the multiple criteria passed in (since one category has multiple criteria, the frontend will send multiple scores back at once, so this route should handle that). The update route should handle manually updating the score of one ballot at a time, since this feature will only be used on the admin side as needed. Finally, the delete route should be used to delete a group of ballots, if on the admin panel we need to delete a judge's scores. Again, like the create route, this should handle deleting a group of ballots associated with a certain set of criteria and judging. This should use a "silent delete" instead of actually deleting the data, by adding a new column called deleted
that is a boolean flag. Finally, we should implement some sort of safe checking to ensure we are creating/deleting the right group of ballots.
Create a new modal form for the admin side (on epicenter screen) that will allow us to assign a judge to a project. It should have two fields, the first one should be a dropdown of all the projects. Once you select a project, it should request the backend and get a list of judges that are able to judge this project based on their assigned category group. Then, the user is able to select a judge. When you submit the form, it should create a new assignment with status Queued.
Sometimes, a category will have different rubrics. Think about this kind of rubric. Essentially, this table will map a score (integer) to a description. For this route, can you create a function to get all rubrics for a specific criteria, a route to add a rubric, a route to edit a rubric, and a route to delete a rubric.
Make auto assign work on the basis of job scheduling
Add backend routes to create/edit and retrieve hackathons.
Additionally, create a new route for setting the config. The config is a weird type, since it is a table that will only have one row. To add this row, pull the latest changes and run yarn seed
. As such, there shouldn't be any create routes, only routes to update each of the columns. Ideally, there should be one different route for each of the config columns, except for current round and current expo which will be set together in one route. All of these routes can be POST requests. You will have to update these values only using the first row (which you can hardcode).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.