This project manages frontend & backend applications for the Trackee time tracking & integration app.
Trackee allows creating and managing users, clients and projects, supports tracking and managing work time and supports several integration options. Whether you need to track your work time for financial purposes or strictly analytical purposes, Trackee will give you plenty of options to simplify your workflows.
Note
This project contains projects for a Kotlin Multiplatform shared library, an iOS app and a ktor server.
Note
The backend app is currently deployed on Railway on https://api.trackee.app
- Frontend apps template: https://github.com/MateeDevs/devstack-native-app
- Backend app template: https://start.ktor.io
The app supports basic features needed for tracking and managing timer entries. Timer entries belong to a specific project, which belongs to a specific client. Timer entries can also contain a description.
The user of the app can manage their clients and projects, which can be later edited or deleted.
The app also allows basic integration. Timer control can be controlled via the Shortcuts app and timer entries can be exported to CSV. The user can also create integrations for auto-exporting entries to Clockify.
The iOS app is available via public testing on the following link: https://testflight.apple.com/join/cTRdRkBc
Caution
Firebase credentials are needed for a sucessful build & deployment of the backend app.
Important
The Testflight iOS app is connected to the Railway backend app. The backend app and the Firestore database are deployed in Oregon, USA. If you're furhter away from that location and you run the backend server locally, you may encounter longer request times due to a long distance between the backend server and the database server.
Important
The Railway backend app has sleeping enabled. If the server isn't used for a while, you may encounter delays and temporary errors due to the service being unavailable.
- In order to build and run the backend application locally, you can run
./gradlew backend:run
- In order to build and run the iOS appliaction locally, navigate to the
ios
directory viacd ios
, run the setup script viascripts/setup.sh
and then you should be able to build the project via Xcode. Updates to signing & certificates setting may be needed. - To make the client app connect to a custom backend URL, update the
NetworkClient.kt
file in the KMP shared module, comment out the lines specifying the Railway server URL and uncomment the lines specifying the local/custom URL. Rebuild the shared module (e.g. viascripts/build-kmp.sh
in theios
directory) and re-build the iOS app to reflect the KMP module change.
Clean (common modules) + MVVM (platform-specific modules) architecture is used for its testability and ease of modularization. Code is divided into several layers:
- infrastracture (
Source
/Provider
) - data (
Repository
) - domain (
UseCase
)
The backend modules manages a Ktor server which handles all communication with the client. Backend uses Cloud Firestore for data storage.
Shared module handles networking, persistence and contains UseCases which bridge platform specific code with common code. Module structure is organized with Clean architecture in mind to several layers of abstraction where everything is marked as internal to prevent confusion between domain and data layer.
Note
The whole project relies heavily on dependency injection
- more info in the iOS readme