Hack the North Backend Challenge README

Hosted API: Hack the North Backend Challenge.

Overview

This application is designed with MongoDB, Express, Node, and PineconeDB to address the challenges of managing users and skills, with an additional focus on group formation and management during the hackathon.

Getting Started

To begin interacting with the API, follow these steps:

Group Formation Explanation

One of the challenges that I wanted to tackle in my API is the problem of finding compatible team members in hackathons, particularly for newcomers who may have limited skillsets and want to work with others that have similar skills as them. This was the inspiration for the development of a system that facilitates the formation of groups based on similarities in skills and interests! By leveraging a vector database, this system significantly improves the efficiency of matching participants. Although currently focused on finding teammates for the hackathon, this feature is easily extendible to matching mentors, sponsors and friends. 🙂

Group Formation Steps:

  1. Vector Representation

  2. Insertion into Pinecone

  3. Similarity Search

  4. Group Formation

Design Choices

One of the decisions I had to make when designing the API was how to separate the skills from the users. Originally, I had the skills as part of the user model but I ultimately decided to create a separate model for the flexibility of querying the skills. This was eventually helpful with the group formation portion of the project because I was able to query the number of skills and form the vector accordingly. Additionally, by creating a separate table for the skills, additional metrics are able to be tracked such as the number of users with certain skills. In the context of a hackathon, I thought that this would be helpful for event planning and narrowing down what workshops would be most relevant to the participants!

Another design choice I made was to use MongoDB instead of a traditional SQL database and using REST instead of GraphQL. The database decision was primarily influenced by the flexibility and development speed that MongoDB provides. For a hackathon backend I thought that this was the best decision because of the constantly evolving data requirements, importance of streamlined development process and because the data requirement is limited to a relatively small size (number of entries is limited by the number of attendees). This thought process was also the reason why I decided against using a GraphQL backend, as I didn't deem the number of user properties to be enough to require efficient data retrieval for specific properties.

File Structure

API Endpoints

Users

Groups

Skills

Environment Variables