Inspiration

Land acknowledgments are a crucial first step in honoring the original residents of a site, and are inspired by the 94 suggested calls to action contained in the Truth and Reconciliation Commission of Canada (now known as the National Centre for Truth and Reconciliation, or NCTR). They also assist Canadians in recognizing and respecting Indigenous peoples' innate kinship beliefs when it comes to the land, which has been limited for so long. WhereAmI will help spread awareness and provide a way to recognize the traditional First Nations, Métis, and/or Inuit territories of a place.

What it does

WhereAmI app is a full-stack production-level solution. It tells it what native land you are on, gives you a long list of native lands to explore on the map, and the ability to add information about a specific place on the map. The information is then uploaded to the database after validation and is showed to other users only on approval of a moderator or admin.

How I built it

This app is used Flutter (frontend), Node.js (server), and Firestore (Database). Google Maps API is used for rendering the maps and Native Land API helps with information about native land and territories.

I built the node.js server first and tested it using Postman. Then I set up a firebase account and added Firestore code to the node.js controllers and testing that against Postman. Finally, I built the front end and hit the various endpoints accordingly. After the stack was working I put most of the frontend code in Bloc structure and wrote some data classes for incoming data from the server.

Challenges I ran into

Integrating Google maps while making sure that the application doesn't lag was a challenge. Making the node.js server was also time-consuming so making it before the deadline with all the other things was challenging

I had to get all the names of territories on Native land API but there was no such list. So I had to download the territories JSON file which had all the data then wrote a small python code to extract just the name and slug and copy-pasted it in my code.

import json
data = {}
with open('./Territories.json') as f:
  data = json.load(f)
for i in data["features"]:
    try:

        print('{"name":','"',i["properties"]["Name"],'"',',"slug":','"',i["properties"]["Slug"],'"',"}",sep="",end=",\n")
    except KeyError:
        pass

Accomplishments that I'm proud of

I am proud of making the moderation feature work. It required a fair bit of thinking when it came to the stack to make the implementation of this flow easier. I am also proud of the Logo used for the application.

What I learned

I learned how to draw polygons on google maps dynamically and also move and zoom Google maps camera.

What's next for Where Am I

  • Extend flutter app to run on Web and also as a PWA
  • Email verify all users before they can submit any information for approval
  • Add Firebase cloud messaging (Push notification) so that users get notified whenever their information is approved
  • Add an award system so that users get an incentive for using the app
  • Feature to post pdf of research papers, any interviews they did, or any images as information
  • Use All markers as a community feature where others can comment on information submitted by a user and make a thread and so on
Share this project:

Updates