My work with the Virginia Youth Climate Cooperative has shown me the importance of local, grassroots activism, and this was at odds with what I saw people in my social circles promoting on social media in support of Black Lives Matter -- they largely promoted national petitions, and writing to national leaders (like representatives and senators), even though we can be much more effective on a local scale.

Additionally, as someone interested in activism, I've noticed that information is very decentralized -- most information about specific chapters is found on organization sites or on networks of some groups, like the Action Network.

What it does

The app uses a user's location to shift the map and show chapters of popular organizations for a variety of causes -- for this hackathon, I included BLM, Generation Ratify, and Extinction Rebellion as they represent three major social issues -- racial justice, feminism, and environmentalism. Because it is a starting place for people, it also has more information about these organizations as well as information on safety and rights for protesters.

How I built it

I built this app on MIT App Inventor, but I also used to make geojson files for the various chapter locations of all of the organizations. I used a map component and FeatureCollection components to import the geojsons as layers in the app.

Because I had over 100 unique markers in my application, I made use of the AnyComponent capabilities of AppInventor to ensure that I could effectively account for all unique chapters without tediously hardcoding every possible event that could occur.

Challenges I ran into

Initially, I had planned to use zip codes as a means of locating the user -- however, App Inventor's map component works purely off of coordinates, so I had to switch to using a location sensor for identifying the user's location.

Additionally, configuring the UI so that it looked proportional on my phone (which is longer and thinner than most phones) was challenging as what looks normal on my phone looks completely out of line in the online emulator -- I had to make minute adjustments to the UI while my phone was connected to App Inventor.

There is also a glitch I struggled with in the app with the map, as when tapped, it resized into a much smaller window despite none of my code changing the size of the map beforehand -- to guarantee usability, I added a safeguard by making it so that the map resizes to its original size whenever it is double-tapped.

Though it wasn't very challenging, hardcoding each chapter locations into geojsons was very time consuming and took multiple hours.

Accomplishments that I'm proud of

I initially struggled to figure out how to code for each of the features/markers and was at one point seriously contemplating hardcoding all marker presses as individual events -- however, I then figured out how to use the AnyComponent feature -- which I had never used before -- and successfully streamlined over 100 individual markers/potential events into a single event handler.

I'm also proud of myself for using the WebViewer component for the first time, which involved me looking deep into App Inventor FAQs/resources to figure out the appropriate command for opening an external browser.

What I learned

I learned so much about geojsons -- this is my first time working with them so closely -- as well as maps on App Inventor. Though I've used maps in other applications before, never has an app of mine been so map-focused. Additionally, I learned about AnyComponent features for the first time, which was incredibly helpful in keeping my code efficient.

What's next for Maptivist

As I learn more about how to use Android Studio, and transfer what I've learned about Java in AP Computer Science, I hope to be able to code a more advanced version of this app in Android Studio, possibly with zip code compatibility as well as a newsfeed with relevant information about issues in a user's area.

Share this project: