Portfolio application created to pass the selection process. This challenge is about creating an app capable of displaying the data obtained through a provided endpoint in the required way.
| Dashboard | Profile |
|---|---|
![]() |
The app is built according to the principles of Clean Architecture, Clean Code and SOLID.
These principles allow us to decouple the project into different layers (Presentation, Domain and Data), which provides better testability of the components, as well as improves control over the scalability of functionalities without losing control of the project.
The applied architecture is designed to be highly testable.
Dependency injection is implemented from the SwiftUI lifecycle.
This layer implements the MVVM + SwiftUI pattern.
On the presentation layer are the views organized by scenes.
- Dashboard: View showing the ring with the customer's score.
- Profile: View that shows the complementary information obtained by requesting the endpoint provided.
In this layer we have three use cases implemented.
- The use case to log the relevant events within the life cycle.
- The use case to obtain the customer's score.
- The use case to obtain the client's report.
In this layer we have the repositories and data sources necessary to satisfy the use cases.
- LogRepository
- ScoreRepository
- ReportRepository
These could scale to persistence or other services without altering the functionality of the project.
To obtain this decoupling we use the principle of Dependency Inversion. Thus being able to switch between data sources without altering the rest of the project.
This project does not use any external framework. Preferring for a completely native development.
As an external dependency, the project uses SwiftLint. It is a Linter that observes the code written by the developer, and applies certain rules to it to improve good practices and apply standardized conventions. In this case, we use the strictest rule model.

