Rank-a-thon Milestone 3
===
## Table of Contents
[TOC]
## Note to Milestone 3 Reviewers
Rankathon is NOW LIVE at https://rankathon.io
Also, do watch our milestone 3 demo video at: https://youtu.be/RQk5vQnAklw
NOTE: Only the **mobile-optimized version of the webapp is available**. We chose to work on mobile first because at Hackathons, people will most likely be moving around with their phones.
There are plans to include a desktop version as users will probably prefer to submit their projects on a computer.
## GitHub Link
https://github.com/rank-a-thon/rank-a-thon
## Demo Video
Milestone 3: https://youtu.be/RQk5vQnAklw
Milestone 2: https://www.youtube.com/watch?v=eU2yFXLwfN8
## User Testing
Tested with 4 users creating submissions and 1 judge evaluating and ranking submissions
User feedback is used to make improvements to UI
## Project Log
### Yitao
**Role:** Backend developer, DevOps
| Tasks | Duration (hours) |
|-|-|
| Learning Golang| 15 |
| Learning Gin | 5 |
| Meetings | 15 |
| Writing README and Documentation | 15 |
| Wireframing on Figma | 10 |
| Making Poster and Video | 10 |
| Setting up Gin backend | 5 |
| Setting up Postgres and Redis | 5 |
| Setting up docker and hot reload | 10 |
| Setting up Postman API testing | 5 |
| Write backend authentication | 10 |
| Create models and controllers for user, team and team invite | 15 |
| Create models and controllers for submission and evaluation | 10 |
| Write logic for normalising judges scores per category and ranking | 15 |
| Write image upload to backend | 5 |
| Configuring SSL for production using Lets Encrypt | 5 |
| Configuring Nginx | 5 |
| Fixing bugs | 15 |
| Writing go tests | 10 |
|**Total**|**185**|
### Chris
**Role:** Frontend developer, DevOps
| Tasks | Duration (hours)|
|-|-|
|Learning about TypeScript|5|
|Learning about React|3|
|Learning about Next.js|2|
|Preparing writeup, poster, video for M1|4|
|Setting Up Development Environment|2|
|Bootstrapping Webapp with Next.js|3|
|Meeting with mentor|2|
|Initial wireframing|10|
|Interviewing users about app concept|3|
|Designing project graphic assets|5|
|Exploring UI frameworks|3|
|Setting up initial webapp landing page|10|
|Learning about Docker and docker-compose|10|
|Dockerise all parts of the stack for dev build|5|
|Setting up webapp authentication|4|
|Authentication UI flow|3|
|Designing post-auth UI components|4|
|Write user dashboard|2|
|Write Explore page|2|
|Write Map page|2|
|Write Schedule page|2|
|Write Announcements page|2|
|Write logging out flow|2|
|Write first static draft of teams page|2|
|Write logic for team creation|2|
|Learn about GCP and deployment on Google Compute Engine|5|
|Dockerise all parts of the stack for prod build|5|
|Create a GCP server and download all dependencies|5|
|Fail to deploy because the instance I chose was too inadequate (did not have enough memory) to build the prod build|1|
|Remake larger GCP instance and retry deployment|2|
|First prod deployment complete!|1|
|Preparing writeup, poster, video for M2|4|
|Add more logic for team creation|5|
|Add logic for project submission|2|
|Attempt to upload files to a REST endpoint (spent super long because we were trying to fix an annoying backend bug)|10|
|Complete logic for project submission|5|
|Add data fetching for Explore page|5|
|Working on Judges UI|10|
|Fix weird bugs related to Judges authentication|5|
|Add logic to judging UI|10|
|Write tests|20|
|Preparing writeup, poster, video for M3|4|
|**Total**|**193**|
Tech Stack
---
1. HTTPS-Secured with Let's Encrypt CA
2. Server-rendered React frontend
3. Golang Gin and GORM backend
4. JWT web tokens for authentication
5. Semantic UI design system
6. PostgreSQL database
7. Redis for database caching
8. Jest, `react-testing-library` and `go test` for Testing
9. Deployment infra uses Docker and `docker-compose`
10. Deployment on Google Compute Engine
<!-- 11. GitHub actions for CI/CD and Google Cloud Build for CD -->
### End of Milestone 3 Updates
## Motivation
In large-scale hackathons such as Hack&Roll (a hackathon organised by NUS Hackers which has over 500 participants), it is always a challenge to ensure a fair and transparent judging process within time constraints due to the sheer number of judges and participants involved. Rank-a-thon is a web application that facilitates large scale judging by providing judges with a platform to rank their assigned submissions using smart and efficient pairwise comparison algorithms.
## Figma Prototype
Click [here](https://www.figma.com/file/9iEO7VrMaJvtcWYQ82XQCp/Prototype?node-id=27%3A406) to view the prototype.
User Stories
---
### Hackathon Participants
```gherkin=
Feature: Making hackathon submission
Scenario: Participant wants to make a hackathon submission
Given Submission details have been filled (Team name, GitHub link,
project description etc)
When I click on submit
Then My submission should be recorded
Feature: Explore (and vote for) other projects
Scenario: Participant wants to check out other projects in the hackathon
When I click on explore tab
Then I should be able to view other hackathon projects (and vote for them)
Feature: Be informed of announcements
Scenario: Participant wants to be informed of hackathon announcements
When I click on "View Announcements"
Then I should be able to view important announcements
Feature: View amenities near me and event schedule
Scenario: Participant wants to know where amenities are and view event schedule
When I click on "Map" / "Schedule"
Then I should be able to view the event map / the event schedule accordingly
```
### Hackathon Judges
```gherkin=
Feature: View assigned teams for judging
Scenario: Hackathon judge wants to view his/her assigned teams
Given I'm a logged-in User
When I go to the "View assigned Teams" page
Then I should be able to see the teams assigned to me to judge
Feature: Assign scores to a team
Scenario: Judge visits an assigned team's booth to check out their project
Given I have checked out the assigned team's booth
When I rate the submission on different criteria
Then The application will record my scores
Feature: Easily ask judging related questions
Scenario: Judge has questions about judging / cannot find team
Given Certain queries / problem faced with the event
When I click on the "Get Help" button
Then I should expect to be contacted by an organiser soon
Feature: Browse other projects
Scenario: Judge has finished judging his assigned teams and wants to browse other teams
Given Completion of judging
When I click on the "Explore" tab
Then I should expect to easily browse and locate other projects
Feature: View amenities near me and event schedule
Scenario: Judge wants to know where amenities are and view event schedule
When I click on "Map" / "Schedule"
Then I should be able to view the event map / the event schedule accordingly
```
### Hackathon Organisers
```gherkin=
Feature: Generate list of winning teams
Scenario: Judges finished judging and time for prize presentation
Given all the judges have finished judging
When I click on "Generate winners"
Then I should be able to get a list of the winning projects for each category
```
Project Timeline
---
```mermaid
gantt
title Timeline
section Milestones
MVP :a1, 2020-06-01, 30d
Additional features :after a1 , 30d
section Features
Site skeleton :2020-06-01 , 12d
Core features : 18d
Venue Map and booth location: 10d
Event schedule page: 5d
Participants voting: 10d
```
## Appendix and FAQ
:::info
**Find this document incomplete?** Leave a comment!
:::