During the Fall 2016 YCPHacks Hackathon, our team conceived the idea for an application that would meet the requirements of a platform benefiting the community and impacting the lives of those within it. The inspiration behind our minimalistic and concise app drew from our previous experiences with functionally diverse applications as well as our experiences with incorporating complexity such as third party APIs. Safety Net is meant to be able to interact with other applications with also being easy to use and to understand as a standalone mobile app.

What it does

Safety Net is a personal safety awareness application. Designed to work well as a standalone mobile application or in tandem with other larger applications, Safety Net is a valuable tool for developers and everyday users. As a standalone app, Safety Net can determine the general safety of a user's current location at the push of a button. Based on metrics such as geographic location, the number of recent local crimes and the time of day, the app assigns a value between one and five to represent the level of safety the user can expect. These features can also be used to create useful data sets such as heat maps for Google Maps to use in navigation around high-risk areas.

How we built it

We hosted our data on Amazon's Web Services with our mobile app being built on the iOS and Android platforms. Using AWS, we had a single backend database that was accessible by both mobile applications, incorporating a Redis database that was queried by functions written in Python. Using SpotCrime's API, we had our mobile application call the API, returning the user's geographic location while also returning crime statistics relevant to their current location. With our functions, we processed all the data to generate a safety rating for the user. Our algorithms also hold certain crimes such as shootings and arson, with more weight than crimes such as vandalism.

Challenges we ran into

A large challenge we came across was through using SpotCrime's API. Originally, our EC2 instance called the API and parsed through it, selecting specific sets of data for our functions. We were very comfortable having our instance performing these calculations and just posting the data to our mobile devices. During late Saturday afternoon, our connection with the API and our EC2 instance suddenly became severed, giving us 403 Forbidden errors every time we tried to call the API. After trying to switch our backend environment and not having success with that, our team decided to go back using AWS but called the API through the mobile devices, communicating back to our Linux instance and acting as a proxy. We were successful in this attempt to keep the environment we built a majority of the project on, while implementing a 'hack' to circumvent momentary confusion.

Accomplishments that we're proud of

In experiencing the hardships of almost having to restart our project due to unforeseen events, we are proud of our persistence in not giving up and playing around forces out of our control. Additionally, our project also functions as its own API, in which data sets that we parsed through machine learning to build informational value that can be accessed through methods built on the server. This allows other applications to query GETS towards Safety Net and derive their own analytics.

What we learned

A takeaway from this project is the intense processes of building a cross platform mobile application. It becomes vital that both applications can interact with our database functions, while being programmed in two different languages. Furthermore, we learned that being able to adjust after setbacks allows us to look at the project through a different perspective, which can be very beneficial.

What's next for Safety Net

Future plans for Safety Net include the ability to track different locations, heat maps, and a website displaying conglomerated data. We also plan to further refine both our iOS and Android applications, ensuring a consistent user experience while adding more features.

Share this project: