The Skintker project

Skintker application image

In January 2022 I started developing my biggest project yet called Skintker. The idea of the project was to allow any user to track different data of their days in order to track skin problems and what might be the cause of them.

As I was developing the main features, more ideas came up: storing the data not only in the local Room database but also in a backend, setting up a reminder to push a notification to the user to remind them to use the app or building some statistics about the data.

Finally, I implemented the above features. I started using Firebase for the authentication and for the backend part, but I found that I needed more control. That's where the second part of the journey began: building my first backend to expose an API.

In January 2023, a year after when I started this project, I began the development of the API. Creating the API was affordable, but the most difficult part was deploying the solution. For this, I invested many hours in learning about Docker, setting up a machine, buying a domain and doing my best to create a useful and secure solution.

Skintker Android application

One of the objectives to build this project was also to practice in a project fully built in Jetpack-Compose, so that's what I did. I used Kotlin with Koin as the dependency injection framework and the views were built 100% in Jetpack-Compose. I followed an MVVM architecture, and it were also important to me to have a lot of Unit Testing along the application.

The application communicates with the API, and it allows the user to do the following actions:

Skintkvault API

The development of the backend was done with Kotlin, using the Ktor framework. It was my first backend solution and the idea of the API is to expose different methods to add, edit, delete and list the reports of each user. The backend communicates with Firebase to validate the user that is performing the operations and its token, so it's intenteded to be used only along with the application.

When sufficient data is available, the application can fetch statistics derived from backend calculations. Additionally, users have the option to erase their data.

In terms of deployment, I used Docker to build different containers: Skintkvault application, Postgres database and Nginx.