Inspiration
After scrolling through my social media feeds, shifting pass the turbulent political climate that is the current year of 2020, I noticed many posts that were related to the Black Lives Matter Movement, and so of course, I clicked on a few to read through them and offer any support I could. However, as I scrolled more and more through these posts I noticed that many of them failed to provide an actual source on where you can help; either by signing a petition or donating. Moreover I noticed many comments where people were feeling rather down, wanting to provide support to these people and the movement itself but don't know where to look to find the best place to do so, and there was no easy solution to finding all the petitions, charities, merchandise, and BIPOC-owned stores.
What it Does
Alliance is an application that allows those who need a single, curated source of all the latest information on how and where to assist the Black Lives Matter movement as well as similar movements in a source. It allows for anyone to access the most important and rising petitions relating to the BLM Movement, filtering them to various topics, as well as accessing a cumulative source of products, victim funds, charities, donation sites, and BIPOC-operated stores, pulled from https://change.org and https://www.redbubble.com.
It also allows for various BLM-promoting products (i.e.; posters, designs, etc.) to be visualized in AR and assigned to any vertical surface (i.e.; a wall), allowing it to be shifted and scaled using the echoAR platform. This allows for individuals who are unsure whether they want to buy a specific product to support BLM to see how it would appear in the living space they would purchase it for.
How It Works
There are two major components to this application. The RESTful API backend (Django-Rest-Framework) as well as the front-end iOS Application, built between a mixture of Vanilla Swift and SwiftUI.
The API has two major partitions, one from change.org and one from redbubble.com. Since neither of these sites have a open-source API, I used selenium with headless Chrome in order to scrape the contents of the webpages, as well as BeautifulSoup4 (alongside lxml) to parse the HTML source content. This was necessary as both sites have javascript sources running in the background which needed to be loaded in with selenium before data is collected.
The API then formats this data, which the iOS Frontend collects using GET requests (Alamofire). It is then displayed and updated in real time onto the iOS application (including the AR components).
Challenges
One of the major challenges was handling all this asynchronous data loading. Specifically, I would have to load multiple GET requests from the API at the same time, while waiting for the selenium driver to boot, scrape, and format the data. This involved a lot of state management, and was an overall pain to get working to a desirable condition.
Another challenge was the AR component. EchoAR does not have support for SwiftUI natively (there is only a vanilla Swift SDK). Thus I had to essentially had to "hack" their Restful API calls in order to properly format and parse the data. Moreover, images aren't supported to Swift or SwiftUI ARKit or RealityKit either, which involved me having to create brand new meshes and objects dynamically in order to apply image textures to them.
Accomplishments
I managed to get the relatively complex backend linked asynchronously with the front-end, which is a huge accomplishment on my part and was nearly "more than I could chew" when it came to integrating both platforms together.
The echoAR aspect is also rather clean, and works well, something that had to be fine-tuned for quite some time for SwiftUI to properly detect and handle vertical alignments, as well as dynamically rendering image mesh textures.
Learning Experience
This was generally my first glimpse into the technology of AR, as well as the proper creation of a fully-fledged full stack application, something that taught me quite a bit about the delicate process of integrating the two distinct systems (back-end and front-end) as well as the process of keeping a rather clean code-base.
Future of Alliance
Hopefully in the future some partnership could be made between these BLM charities and organizations, as well as change.org to allow for a far smoother user-experience, and allowing all this heavily scattered public data to be even more compact and accessible then Alliance already has it as, giving it the maximum ability to spread to help keep people fighting against the racial injustice that is currently occurring within our political climate.
Log in or sign up for Devpost to join the conversation.