Home

Awesome

Slack Android Clone with Compose is now in Kotlin Multiplatform!

Status: Active Development happening here https://github.com/oianmol/SlackComposeMultiplatform

This is a jetpack compose sample app written in Kotlin following clean architecture principles.

The purpose of this app to showcase:

Screenshots

ScreenshotsIn Progress
<img src="art/art1.png" alt="drawing" style="width:300px;"/><img src="art/art2.png" alt="drawing" style="width:300px;"/>
<img src="art/art3.png" alt="drawing" style="width:300px;"/><img src="art/art4.png" alt="drawing" style="width:300px;"/>
<img src="art/art5.png" alt="drawing" style="width:300px;"/><img src="art/art6.png" alt="drawing" style="width:300px;"/>
<img src="art/art10.png" alt="drawing" style="width:300px;"/><img src="art/art11.png" alt="drawing" style="width:300px;"/>
<img src="art/art_pref1.png" alt="drawing" style="width:300px;"/><img src="art/art_pref2.png" alt="drawing" style="width:300px;"/>
<img src="art/art_pref3.png" alt="drawing" style="width:300px;"/><img src="art/art_pref4.png" alt="drawing" style="width:300px;"/>
<img src="art/animated_start.gif" alt="drawing" style="width:300px;"/><img src="art/gesture_vertical_drag_chatbox.gif" style="width:300px;"/>
<img src="art/art8.gif" alt="drawing" style="width:300px;"/><img src="art/art9.png" alt="drawing" style="width:300px;"/>

TODOs and questions to self

🏗️️ Built with ❤️ using Jetpack Compose 😁

WhatHow
🎭 User Interface (Android)Jetpack Compose
🏗 ArchitectureClean
💉 DI (Android)Hilt
🌊 AsyncCoroutines + Flow
🌐 NetworkingRetrofit
📄 ParsingKotlinX

Languages, libraries and tools used

Architecture

SlackClone follows the principles of Clean Architecture with Android Architecture Components.

Architecture's layers & boundaries:

<img src="art/architecture.jpeg" />

UI Layer contains UI (Activities, Composables, Fragments) that are coordinated by _ ViewModels which execute 1 or multiple UseCases._ Presentation Layer depends on Domain Layer.

Domain Layer is the most INNER part of the circle (no dependencies with other layers) and it contains Entities, Use cases & Repository Interfaces. Use cases combine data from 1 or multiple Repository Interfaces.

Data Layer contains Repository Implementations and 1 or multiple Data Sources. Repositories are responsible to coordinate data from the different Data Sources. Data Layer depends on Domain Layer.

Notes: Mapping between response models and transformed models will happen via extension functions defined in transformed model file

When writing a new ui module

Conventions:

Files are suffixed with be defined Class types.

Conclusion

This project can be used as a template for new apps. This project is continually evolving to integrate other libraries and techniques to keep it up to date.