Published on

Project: PUCRS App

Authors
PUCRS App

Introduction

The PUCRS App is a multi-user app to support teachers and students at PUCRS university. I had the opportunity to work on this project during my time at Lighthouse, where I gained experience with mobile app development using technologies such as React Native, Styled Components, Redux and Redux Saga, Firebase and Dynatrace.

Technical Challenges

This was my first experience with an application that needed to work 100% offline, as the app is used in environments where there is no internet connection. For this, Redux Persist was used in conjunction with Async Storage to persist the application data on the device. In addition, the app is multi-user and with multiple functions (roles), that is, both students and teachers can access the app, each with their respective functionalities.

But if the app is 100% offline, how do the data get to the server?

To solve this problem, an offline queue system was created, where requests are stored on the device and, when the user connects to the internet, the requests are sent to the server, one by one. This was done using Redux Saga, which is a middleware for Redux that allows you to handle side effects, such as asynchronous calls. A specific saga was created to handle offline requests, which constantly monitors the device's connection status and, when it detects that the device is online, sends the requests to the server.

Remote config

As the app's menu options needed to be dynamic, a remote config system was created (AKA feature toggles), where the app settings are stored in a JSON file on the server, and the app makes a request to get these settings. This was done using Firebase Remote Config, which allows you to store settings on the server and retrieve them in the app.

Conclusion

The PUCRS App project was a very enriching experience for me, as I was able to better understand how mobile app development works, and how to deal with challenges such as offline data persistence and remote app configuration. In addition, I was able to work with modern technologies, such as React Native, Styled Components, Redux and Redux Saga, and I was also able to learn how to use Firebase Remote Config, which was a very useful tool for implementing the app's remote settings.