12:00 PM EST 2/20/21
Although there are certainly contact tracing apps that presently exist, we feel that they lack multiple important components that can greatly aid in the contact tracing process.
Namely, a maps-based visualization is what COVIDTracer truly brings to the table. By clearly visualizing connections across different people, and keeping track of location as well as the time of the interaction, a clear network of potential covid-transferring interactions can be tracked, which would be key to ensuring that at-risk peoples get tested.
Furthermore, we sought to and achieved both an operating web-server and a mobile application to completely facilitate the covid-tracking process, making the information as digestible as possible for users.
What it does
COVIDTracer is able to autonomously detect when you are within the vicinity of another person who has the app. From there, the app sends information to a server that keeps track of these connections. If one user reports having tested positive for COVID-19, then the server automatically pings other users who have been in contact with the user, either directly or through a chain of interactions. Our website also features a map with all of our users and connections drawn, with both the location and time of the interaction visualized, to create a stylish visualization that can be easily understood.
How we built it
The app, through React Native’s API, scans the surrounding area for bluetooth devices. Reading their RSSI values, we can read the signal strength in decibels, which corresponds with a distance. From there, our app sends a post request to our server through a restful API in order to notify of a new connection with other data including time, GPS location, and the ID of the people they connected with.
On our server, we store our data with CSV files and a SQL database using Flask. To represent our connected components, we use a graph, with each user hosting their own adjacent list. If a user were to notify our server that they had tested positive, our server would run a Depth First Search Algorithm to find all people that have the potential to be infected. From there, the server would set a listening variable by the clients to notify users they may be at risk.
Challenges we ran into
One of the more troublesome issues was sending data from our database to our website. We used both CSV and a Flash SQL database for storing information through Python, but we needed for our website scripts to be able to access information, such as connected components and user location. To overcome this language barrier, we used jinja in order to send data from our Flask application to the website scripts, formatting them in JSON files. From there, it was much easier to use a JSON parser and access the encoded information.
Another major challenge we encountered was testing our product. Since we couldn’t buy a domain address, our website and server was hosted on local networks. This made it extremely difficult to debug our entire project, as being isolated from each other meant we couldn’t all work on the same server at once. To overcome this, we used version control with Git and established timelines throughout the day to ensure that we would complete this project in a timely manner.
Accomplishments that we're proud of
In the creation of our website, we created a maps visualization that we are very proud of, in which our automatically detected interactions between different users can be visualized on Google Maps, with additional information such as the time of the interaction being stored. While developing COVIDTracer, we were able to make a strong and comprehensive API and SQL database through Flask. Prior to this experience, we had never tried to store information in this way before. The process was surprisingly smooth and allowed us to communicate effectively between clients and the server. Now, we are able to use this tool in the future to further build upon our skills.
We were also able to optimize the process for contact tracing through the algorithm of depth first search, ensuring that our contact tracing was as efficient as possible. Although a simple algorithm, using it to solve this problem shows how simplicity can result in massive payoffs when used in the right context.
What we learned
In our development of COVIDTracer, we used multiple libraries as well as even languages that we had never been exposed to before. One major tool that all of us learned throughout the process was the usage of a web-server with Flask to connect the front-end and the back-end. Additionally, for our purposes of storing account information as well as storing interactions with users, we made use of databases in SQL that we weren’t experienced with.
For our back end, we learned more about the implementation of graphing algorithms such as depth first search, which we implemented to track the different networks of connections among users. Additionally, within our front end, we also learned a lot about React Native, better understanding how to communicate through json files, get and pull requests, and server proxies.
What's next for COVIDTracer
Although we’re very happy with how COVIDTracer has turned out, there’s plenty of room for improvement. The app and website UI, while functional, can be greatly enhanced to improve the user experience, through more stylish visualization. Server/client communication can be heavily optimized and improved upon. Most importantly, our app’s detection abilities can be considerably improved in order to increase the accuracy of information regarding a physical interaction between two users.