Skip to content
CAI
Software that uses CAICheck a score

kursatkumsuz/crypto-portfolio-jetpack-compose

46.1

Weak · 21 September 2026

4.5k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This is a cryptocurrency portfolio tracking and management application that allows users to monitor market data, manage a personal investment portfolio, and maintain a list of favorite coins. The system provides core functionalities including user authentication, real-time price tracking with visual charts, and local data persistence for favorites and portfolio history. It also includes onboarding, search, and settings features to support a complete user lifecycle from sign-up to active portfolio management.

Features

Add detail screen with navigation and portfolio management

A new detail screen has been added to the application, allowing users to view specific asset information including price, 24-hour change, and 1-hour change. The feature includes a bottom sheet for adding assets to a portfolio or favorites, with navigation support to transition between screens.

feature/detail · high confidence

Added onboarding screen with navigation and state management

The onboarding feature has been extracted into its own module, introducing a new WelcomeScreen that displays a three-page carousel of introductory content. The implementation includes an OnBoardingViewModel that checks the user's login status to determine whether to navigate to the market or sign-in screen, and a navigation route for the welcome screen.

feature/onboarding · high confidence

Added search, settings, sign-in, and sign-up features with updated coin list display

The app now includes new feature modules for search, settings, sign-in, and sign-up, each with their own UI screens, ViewModels, and navigation routes. The search feature allows users to filter a list of coins by name or symbol. The settings screen displays user information and notification preferences. The sign-in and sign-up screens handle authentication flows. Additionally, the coin list component has been refactored to include a last-day change indicator with color-coded icons for positive or negative price changes.

(repo-wide) · high confidence

Introduce Favorites feature and reusable UI components

Users can now view and manage their list of favorite coins on a dedicated Favorites screen, which displays coin details, prices, and 24-hour changes, and allows removal of favorites. This change also introduces a suite of reusable UI components in the core UI module, including a bottom navigation bar, custom text and password input fields, a search bar, a circular loading indicator, a toast notification helper, and a shimmer loading effect, alongside a reorganization of the app's theme and navigation structure.

core/ui, feature/favorites · high confidence

Introduce new Portfolio feature with Material 3 UI

A new Portfolio feature has been added to the application, providing users with a dedicated screen to view their investment portfolio. The implementation includes a main screen displaying current balance, buying price, and profit/loss metrics, alongside a list of individual portfolio items. Each item can be expanded to show detailed pricing information and a pie chart visualizing the portfolio's composition. The UI has been redesigned using Material 3 components, including cards, tabs, and swipe-to-dismiss interactions for deleting items.

feature/portfolio · medium confidence

Introduce the Market feature with a redesigned UI and circular chart

The Market feature is introduced, providing a new screen that displays a user's portfolio balance, a list of cryptocurrencies, and a circular chart visualizing portfolio distribution. The UI has been redesigned to use a dark theme with Material 3 components, featuring a swipe-to-refresh list of coins with animated shimmer loading states and a horizontal scrollable row of popular coins. A new circular chart component renders portfolio allocation using custom Canvas drawing, supported by a list of colored segments and a progress indicator.

feature/market · high confidence

New utility classes and extensions for the app

The core/util module now includes several new components to support the application's functionality. A sealed class Response has been added to handle data states (Success, Error, Loading). A Notification utility has been introduced to display Bitcoin price updates via Android notifications. Additionally, extension functions for Float animations and price formatting, along with constants for API URLs and preferences, have been added to the utility package. The existing Resource class has been moved to this core module.

core/util · high confidence

Refactor app into core/domain and data modules with new domain models and repository implementations

The application has been restructured into a multi-module architecture, separating domain logic from data access. New domain models have been introduced for user authentication (UserModel), portfolio management (PortfolioModel, PieChartModel), favorites (FavoritesEntity), and market data (LineChartModel, CoinItem, CoinResponse). Corresponding repository interfaces and implementations have been added: AuthRepository with Firebase and Firestore integration, FavoritesRepository backed by a Room database (FavoritesDatabase), DataStoreRepository for local preferences, and CoinRepository for remote API calls. Use cases have been created for all major features including authentication (SignIn, SignUp, GetUserInfo), portfolio operations (AddToPortfolio, DeletePortfolio, GetPortfolio), favorites management, and background workers (NotificationWorker) that fetch coin data and display notifications. The API service now includes a hardcoded API key for the cryptocurrency listing endpoint.

core/domain, data · high confidence

Behavioural changes

Major app architecture overhaul and feature expansion

The app's navigation has been restructured to support a new bottom navigation bar with five tabs (Market, Search, Favorite, Portfolio, Settings) and a dedicated navigation graph. The previous inline navigation logic was replaced with a modular \SetupNavGraph\ and \BottomNavigationBar\ components. Under the hood, the dependency injection layer was significantly expanded to include Firebase (Auth, Firestore), Room database for favorites, and DataStore for notifications. Several legacy components were removed, including the old \MarketScreen\, \GetCoinUseCase\, and utility classes like \Constants\ and \FormatCoinPrice\. The application now initializes background workers via Hilt and configures WorkManager.

app/src · high confidence

Dependencies

Migrate to multi-module architecture with Gradle version catalog

The project has been restructured into a multi-module architecture, introducing separate modules for core functionality (domain, ui, util), data layer, and distinct feature modules (onboarding, signin, signup, market, favorites, detail, search, portfolio, settings). This change is supported by the introduction of a Gradle version catalog (libs.versions.toml) which centralizes dependency management for libraries such as Hilt, Room, Firebase, and Compose, replacing previously hardcoded version strings in the build scripts.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 50 → 46 (-3.6)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 97 (-0.2)
  • Architecture 100 → 98 (-2.2)
  • Maturity 57 → 57 (+0.0)
  • Readiness 15 → 15 (+0.0)
  • Security 100 → 100 (+0.0)
  • Domain Modelling 100 → 74 (-25.6)

Resolved (13)

  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (11 lines × 3) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (14 lines × 2) (feature/market/src/main/java/com/kursatkumsuz/market/component/CoinList.kt)
  • Duplicated block (14 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • Duplicated block (14 lines × 4) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (15 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • Duplicated block (15 lines × 3) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (17 lines × 2) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (19 lines × 2) (feature/market/src/main/java/com/kursatkumsuz/market/component/CoinList.kt)
  • Duplicated block (9 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • No exposed public API
  • early-stage repository — too little history to judge knowledge freshness
  • single-maintainer — knowledge-concentration (bus factor) risk

New (16)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • Duplicated block (10 lines × 3) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (12 lines × 2) (feature/market/src/main/java/com/kursatkumsuz/market/component/CoinList.kt)
  • Duplicated block (13 lines × 4) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (14 lines × 3) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (15 lines × 2) (feature/settings/src/main/java/com/kursatkumsuz/settings/SettingsScreen.kt)
  • Duplicated block (15 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • Duplicated block (17 lines × 2) (feature/signin/src/main/java/com/kursatkumsuz/signin/SignInScreen.kt)
  • Duplicated block (20 lines × 2) (feature/market/src/main/java/com/kursatkumsuz/market/component/CoinList.kt)
  • Duplicated block (52 lines × 2) (feature/market/src/main/java/com/kursatkumsuz/market/component/CoinList.kt)
  • MethodTooLong: PortfolioPieChartKt.PieChart (feature/portfolio/src/main/java/com/kursatkumsuz/portfolio/component/PortfolioPieChart.kt)
  • No ADRs found

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

kursatkumsuz/crypto-portfolio-jetpack-compose was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 664e597b49a981867966dab9a292c02e28cc61cf — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.