What is Social Siren?
A social distancing tool that alerts the app user when they're in proximity of a sick person. Created using geolocation in Flutter, which livestreams GPS data to a Node.js server that uploads to MongoDB Atlas. It is a powerful application because it has the ability to instantly go cross-platform and everything is stored/backed up in the cloud.
With the novel coronavirus, social distancing is essential. When leaving the house for grocery shopping and other essential activities, we get exposed to others. For the at-risk population, it is essential that if they've ever been potentially exposed they are alerted immediately.
What It Does
The application monitors all users through a centralized MongoDB Atlas database and notifies them when they’re around a person who is sick. The latitude and longitude of each user is captured every second and if a healthy user happens to be near a sick user, the healthy user would be notified of a potential threat to their health. It focuses on anonymity and privacy by storing random user ids in the cloud rather than any names.
How We Built It
We used Flutter to create the frontend and tested it on both Android and iOS with no issues. We used Node.js/Express for our server, and of course the amazing MongoDB Atlas for our database. We chose Mongo and Node since JSON formatting is super intuitive and user-friendly.
What we learned
Two of our team members learned Flutter/Dart for the first time. We all learned how to collaborate remotely using design tools such as Figma and using repository tools such as Github. One of our team members also taught another how to use Git Bash and push/pull/commit to project branches. It was a very fun experience, but I’m sure it would have been more fun in person!
What's next for SocialSiren
We hope to improve the Node.js Schema model to only PATCH/PUT the longitude and latitude rather than the entire user schema and improve anonymity measures through bcryptjs. Ideally, we'd want to decentralize and let each phone communicate/find distances through Bluetooth since at scale doing all of those calculations would be impossible. Another advantage of Bluetooth would be the more accurate distances it returns rather than the standard longitude and latitude GPS positions. Calculating people within proximity for thousands of users could be very well optimized but our current model is simply a demo concept and is not meant for any sort of production or testing. In terms of computing power, we could put the Node.js server on a cloud computer like a DigitalOcean Droplet and use physical emulators to decrease our latency since everything was running on one computer.