We were inspired to build Locality after witnessing the debacle that the COVID-19 pandemic had brought to small businesses. We wanted to do our part to support the backbone of our economy, since small businesses account for half of the GDP. Specifically, we noticed that some of favorite restaurants in Toronto were shutting down for good, due to their inability to cover overhead expenses such as rent. We thought that if we we're able to create a "crowdfunding" platform for our community's businesses, we would be able to mitigate the economic damage from this outbreak.

What It Does

Locality is a platform to promote local businesses during this COVID-19 Pandemic. As many are now relying on online and delivery companies such as Amazon and eBay, local businesses are losing customers and shutting down very rapidly. The purpose of Locality is to allow users to view and support local businesses instead of large corporations and chains. GoFundMe pages of various businesses are embedded on the site, allowing users to donate money for a good cause. Locality also features a news feed about small businesses in the users location, to help keep everyone educated about the current situations in their communities.

How We Built It

Locality was built with Python, HTML, CSS, and JavaScript. The micro-web Python framework Flask was used to build the backend.

The APIs we used include:

To host Locality, we used Heroku and for our custom domain, provided by MLH.


The custom modules used:

  • requests==2.22.0
  • flask
  • gunicorn
  • flask_simple_geoip
  • flask-googlemaps

Steps and Commands To Run The Code

git clone (or download the files)

This will download the files to your local system.

cd into the folder via Terminal (Mac) or CMD (Windows)

This will direct your terminal window to the folder where the code resides.

pip3 install -r requirements.txt

This will install all the modules required for our Flask back-end to function. Without these, the file will not run.


This will execute our website and will open a local version for you to view on localhost:5000 or

Challenges We Ran Into

  • The first challenge we ran into was finding good API's to source our data to our specifications, however after thorough research we were able to find what we needed.
  • We were also experiencing issues with some of the overall CSS, especially for the interactive Google Maps widget.
  • Another challenge we had was implementing actual direct donation links. In order to resolve this, we added static interactive donation features and a "Add Business" button which demonstrates the concept of having businesses providing information to be used for features such as donations.

Accomplishments That We're Proud Of

  • We were able to make around 85% of the website dynamic. This is evident throughout features that adapt based on user location, such as the nearby local businesses and the local news. This improves the user experience, by making Locality a personalized and tailored experience for every user which uses our platform.
  • We're proud of the final appearance of out platform; it has a very modern and slick interface, which is visually appealing for users and prevents distractions.
  • We were able to implement a large majority of the features from the initial brainstorm of the app in a seamless and efficient manner, such as the interactive Google Maps API, or personalized news feed, as well as the LinkedIn Oauth feature.

What We Learned

  • How to utilize the Flask framework to efficiently build a web platform, which includes the Jinja web template engine.
  • How to implement the LinkedIn Oauth Sign in onto a web page with the use of cookies to store login data.
  • How to integrate a domain from into Heroku using DNS Records and CNAME.
  • How to properly use the GIT commands in terminal to push and pull, along with GitHub's collaborative features.
  • How to properly utilize several API's such as the ones listed in the "Built With" section.

What's Next For Locality

  • We were planning on adding personalized job recommendations for users who logged in via LinkedIn, however, this was not possible since we needed to email and request for access to this API feature, which could take up to 2 weeks. Instead, we added static jobs to prove the concept. We want to add this feature in the nearby future.
  • We also want to add a way to encourage consumer spending at particular locations, one way this could have been done was by using the API to help users generate gift cards for the favorite businesses. This was not possible through the sandbox API which we initially thought would be possible during brainstorm.

Built With

Share this project: