My passion for road trips is the inspiration behind my mobile application, "Ford Connected."

What it does

Ford Connected aims to make driving more fun and interactive by connecting Ford vehicle owners with each other. My mobile application allows vehicle owners to create posts about their experiences while driving.

In addition to this, drivers can add other drivers as friends and they can view information about the vehicles their friends have. This allows people to stay connected with each other and it also helps friends and families ensure that they are safe, by providing the real-time location of vehicles on an intuitive map interface.

How I built it

The mobile application was created using React-Native, Redux, Typescript, and Firebase Storage. The server application that is hosted on Heroku was built with Spring Boot, GraphQL, MongoDB, and Redis.

I used React-Native to create the mobile application since React-Native makes it easy to build cross-platform apps without the need to compromise quality and functionality. In addition to this, using Redux allowed me to share data throughout the entire app, thus, loading data from the server is done in the background and this data is shared in real-time throughout the entire mobile application. I chose Typescript to write the mobile application because in contrast to Javascript, it is more robust and easier to refactor. Firebase storage was also used to store images for posts and the profile pictures of users. I also took advantage of React's features to create a global light or dark theme for the User Interface (UI) of the app.

I chose Spring-Boot as the framework for my server since I needed a reliable and secure way to transfer and store large amounts of data. GraphQL was used instead of REST since the schema of data such as Vehicles was complex and contained many variables that would be unused for certain actions. Utilizing GraphQL allowed me to save bandwidth and reduce waterfall requests. In addition to this, I chose MongoDB to store users, vehicles, friend relationships, and posts since MongoDB is highly scalable and allows a humongous amount of data to be stored, as its name implies. MongoDB also makes it easy to implement database sharding, which will allow my service to support a large amount of users and posts. Finally, I used a Redis in-memory data structure storage system to associate Access Tokens provided by Ford with users in my MongoDB database. Redis allows for quick look-up times since all operations are completed in memory, which will aid my mobile application in scaling as many users login and refresh their Authentication Tokens on a twenty-minute basis. I made my GraphQL mutations and queries verify the Access Tokens with Redis to ensure that my service is secure.

All data is encrypted on both the mobile app and server. Access tokens for the mobile app are stored in encrypted storage to ensure that the user's account cannot be stolen.

Challenges I ran into

Since my application has many functionalities and lots of data needs to be transferred and managed, I took the time to plan out the database schemas and server algorithms. Nonetheless, the means did not outweigh the costs since my final product is well-designed and it follows Object Oriented programming principles like Encapsulation, Abstraction, Inheritance and Polymorphism. Thus, it is simple to add new features to this service.

Accomplishments that I'm proud of

I am proud that I was able to create a robust mobile application and resource server that can scale to support millions of users.

What I learned

I learned how to create a robust React Native app that utilizes Redux and Typescript, how to store files in Firebase storage, and how to use Redis with Spring Boot.

What's next for Ford Connected

Future features planned are support for Lincoln vehicles, support for Android, allowing vehicle owners to create video livestreams from the inside of their car while they are driving, and a smart assistant that will read out new posts while a user is driving.

I was only able to test the app on iOS, since I did not have an Android device. Adding support for Android would be a simple task since the only change required is ensuring that the Android manifest files allow permission for file storage access and encryption.

Built With

Share this project: