1. Conectados - Overview

Conectados was a mobile app that notified news, events, or important dates regarding the Faculty of Physical, Mathematical, and Natural Sciences from the National University of San Luis (Argentina).

The Faculty at that time, needed an app that could run either in iOS and Android to keep the students updated regarding events, news or anything related to the faculty.

Conectados - Details View Conectados - Home View Conectados - Events View

2. Our Solution

We decided to go with Flutter in that since was the technology we already had knowledge on, and because it allowed us to share some common functionalities between web client and mobile, thanks to Flutter. For the Backend, we decided to go with a Java Based, Spring Boot server using MongoDB, since a NoSQL database made sense at that time, because data structure needed to be flexible to be easy to adapt to any new requirement coming from the needs of the Faculty.

So the components were the following:

  1. Web-Client - for Faculty members to notify students regarding events, news and more.
  2. Mobile-Client - for Faculty students to be up-to-date with faculty related information.
  3. Backend Server - Running in the University Server.

3. Development

For the application development, we used GetX as state manager, for both web and mobile projects. We made use of Firebase Messaging to handle notifications as well Firebase Hosting to host the web client, so faculty members could access the website easily.

Regarding the Backend Server, we developed it using Spring Boot, since it has some integrations already done within the framework, like support for MongoDB, security features, we set up JWT (JSON Web Tokens), good support from community, and then we made use of Firebase SDK for Java, to handle all the logic related to notifications within the server.

4. Setting up the server in the Faculty

For the deployment of the system, I recall that the faculty provided us with a Debian-based Virtual Machine, which we had to configure from scratch. To establish a CI/CD pipeline and automate as much as possible whenever a new release of the back-end was available, we decided to use Jenkins. We set up a trigger connected to the GitHub repository to listen for changes. Whenever a new change was introduced in the release branch, Jenkins would rebuild and restart the server to deploy the new version automatically.

In addition to this, we set up the MongoDB database and automated it to ensure everything was operational and available from the very first moment without requiring manual intervention, except for commits to the release branch. Unfortunately, we encountered some issues, such as the server lacking HTTPS support. As a result, we had to adapt the browser to accept HTTP requests, as well as modify the mobile clients by updating the AndroidManifest.xml for Android and Info.plist for iOS.

5. Releasing Apps to PlayStore(Android) and AppStore(iOS)

For the Android version of the app, the release to the Play Store was successful. However, for iOS, we faced issues with payment methods, so at that time, we couldn’t upload the app to the App Store. Flutter facilitated the generation of the .apk for Android and the .ipa for iOS. Although we successfully tested the app on an iOS device, we ultimately lacked the time and resources to complete the upload to the App Store.

6. Experience

After developing an application from start to finish and having control over every aspect of the project—from design to development and deployment—we gained a more realistic understanding of resources that are sometimes taken for granted. We learned the importance of asking the right questions regarding requirements and available resources when creating a budget. Additionally, we learned to estimate the time required for each task, including configuring and managing the server.

Overall was a great and real life learning experience, where we got real insights on what is needed, what should be estimated and included when doing a budget for a given client/company and also consider what are the available resources that all the parties could be assuming.

Asking the right questions often leads to the right answers!

One thing I would have done different was making the project open-source at the time of release. This would have allowed the university community to contribute and help the project grow. Unfortunately, after we completed our work, each team member went their separate ways, and the project was no longer maintained.

The full source code and documentation are in private repositories:

We are very thankful to the FCFMyN Faculty - UNSL for trusting us and giving us the opportunity to work on a real use case, as well as for providing access to the resources they had at that time.