SkillAgentSearch skills...

Closetalk.app

App Template | Android, Kotlin, Jetpack Compose, Jetpack Navigation, feature modules, MVI, Koin, Coil, Proto DataStore, GitHub Actions

Install / Use

/learn @mobiledevpro/Closetalk.app

README

Android Chat App entirely built with Jetpack Compose (in development)

Run Unit Tests CodeFactor Quality Gate Status

Kotlin Version Compose Bom Gradle Plugin API Target SDK License Android Studio

GitHub last commit

Try demo:

<img src="https://github.com/mobiledevpro/closetalk.app/assets/5750211/56e09ffa-faa5-4ad1-8ad8-4ee35957870b" width="250" alt="Demo"/>

closetalk_github_social_preview

Youtube

Apps built from this template:

Tech. stack

Speed up Gradle build time

Article 1 - How to speed up Gradle build time

Doc - Optimize your buid speed

Article 2 - How I Cut My Gradle Build Time by 50%

Get Gradle build report

./gradlew --profile

Notes

Plugin to generate Compose Compiler metrics (root/build.gradle.kts)

Interpreting Compose Compiler Metrics

subprojects {
    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().all {
        compilerOptions.freeCompilerArgs.addAll(
            "-P",
            "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" +
                    project.layout.buildDirectory.get().asFile.absolutePath + "/compose_metrics"
        )
        compilerOptions.freeCompilerArgs.addAll(
            "-P",
            "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" +
                    project.layout.buildDirectory.get().asFile.absolutePath + "/compose_metrics"
        )
    }
}

To debug Firebase Analytics events call it in the terminal

adb shell setprop log.tag.FA VERBOSE
adb shell setprop log.tag.FA-SVC VERBOSE
adb logcat -v time -s FA FA-SVC

UI testing with Maestro:

  • Install Maestro: run in terminal curl -Ls "https://get.maestro.mobile.dev" | bash
  • Install the app on emulator (doesn't work with physical device)
  • Run the flow: run in terminal maestro test -c maestro/people-profile-flow.yaml
  • Sample config

Module Graph

%%{
  init: {
    'theme': 'base',
    'themeVariables': {"primaryTextColor":"#fff","primaryColor":"#5a4f7c","primaryBorderColor":"#5a4f7c","lineColor":"#f5a623","tertiaryColor":"#40375c","fontSize":"12px"}
  }
}%%

graph LR
  subgraph :core
    :core:navigation["navigation"]
    :core:ui["ui"]
    :core:di["di"]
    :core:domain["domain"]
    :core:coroutines["coroutines"]
    :core:util["util"]
    :core:analytics["analytics"]
    :core:database["database"]
  end
  subgraph :feature
    :feature:home["home"]
    :feature:onboarding["onboarding"]
    :feature:subscription["subscription"]
    :feature:chat_list["chat_list"]
    :feature:people["people"]
    :feature:user_profile["user_profile"]
    :feature:people_list["people_list"]
    :feature:people_core["people_core"]
    :feature:people_profile["people_profile"]
  end
  :core:navigation --> :core:ui
  :core:navigation --> :core:di
  :core:navigation --> :core:domain
  :core:navigation --> :feature:home
  :core:navigation --> :feature:onboarding
  :core:navigation --> :feature:subscription
  :core:navigation --> :feature:chat_list
  :core:navigation --> :feature:people
  :core:navigation --> :feature:user_profile
  :feature:people_list --> :core:ui
  :feature:people_list --> :core:di
  :feature:people_list --> :core:domain
  :feature:people_list --> :core:coroutines
  :feature:people_list --> :core:util
  :feature:people_list --> :core:analytics
  :feature:people_list --> :feature:people_core
  :feature:people_core --> :core:database
  :feature:people_core --> :core:ui
  :feature:people_core --> :core:di
  :feature:people_core --> :core:domain
  :feature:people_core --> :core:coroutines
  :feature:people_core --> :core:util
  :feature:people_core --> :core:analytics
  :app --> :core:navigation
  :feature:people --> :feature:people_list
  :feature:people_profile --> :feature:people_core

classDef focus fill:#FA8140,stroke:#fff,stroke-width:2px,color:#fff;
class :core:navigation focus
class :feature:people_list focus
class :feature:people_core focus

How to create the module graph

  • Apply plugin https://github.com/iurysza/module-graph

  • Configure in the root build.gradle.kts file:


moduleGraphConfig {
    readmePath.set("${rootDir}/README.md")
    heading = "## Module Graph"
    orientation.set(Orientation.LEFT_TO_RIGHT) //optional
    setStyleByModuleType.set(false)

    focusedModulesRegex.set(".*(navigation|home).*")

    theme.set(
        Theme.BASE(
            mapOf(
                "primaryTextColor" to "#fff",
                "primaryColor" to "#5a4f7c",
                "primaryBorderColor" to "#5a4f7c",
                "lineColor" to "#f5a623",
                "tertiaryColor" to "#40375c",
                "fontSize" to "12px",
            ),
            focusColor = "#FA8140"
        ),
    )
}
  • Run the following command to generate the module graph and update the README file:
 ./gradlew createModuleGraph

Author:

<a href="https://github.com/dmitriy-chernysh" target="_blank"> <img src="https://s.gravatar.com/avatar/72c649d298a8f0f088fd0850e19b9147?s=400" width="70" align="left"> </a>

Dmitri Chernysh

Instagram Youtube Patreon Linkedin Upwork

License:

Copyright 2025 Dmitri Chernysh

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License

View on GitHub
GitHub Stars334
CategoryDevelopment
Updated7d ago
Forks37

Languages

Kotlin

Security Score

100/100

Audited on Mar 18, 2026

No findings