Skip to content

Project architecture

enteraname74 edited this page May 15, 2025 · 3 revisions

In this Page, I will explain how the project is structured.

General structure

Soul Searching is divided in multiple modules and follows the Clean Architecture pattern.

Modules

app

All the app is in this module (views, UI logic,...).
This module also contains the entry point of the Android and Desktop app.
More detailed information here: app

core-ui

This module contains reusable UI components (more globally, the design system of the app) and UI/UX utils (loading manager, color theme manager,...).
More detailed information here: core-ui

domain

The main part of the application. It contains the model of the app, its use cases, repositories interface and other utils.
More detailed information here: domain

features

This folder contains multiple modules. Each of these modules contain logic for a specific subject that needs specific dependencies and/or that are reused throughout the app.

1. filemanager

Used for updating the metadata of a music file and managing the file covers of the app.
More detailed information here: filemanager

2. musicmanager

Handles the fetching of musics on a device. It also contains the logic for handling multiple artists.
More detailed information here: musicmanager

3. playback

This module contains all the playback logic (player, notification,...).
More detailed information here: playback

4. serialization

Serialization logic for each platform.
More detailed information here: serialization

local-android

Local database implementation for Android (DAOs, entities, data source implementation...).
More detailed information here: local-android

local-desktop

Local database implementation for desktop (DAOs, entities, data source implementation...).
More detailed information here: local-desktop

remote

Contains all elements related to remote calls (specific data sources, http client).
More detailed information here: remote

repository

This module holds the implementation of the repositories, and the interface of the data sources
More detailed information here: repository

shared-di

The module that contains all the dependency injection logic and provides a global DI module for the app to abstract all the other module's DI modules.
More detailed information here: shared-di

Clone this wiki locally