msh91/arch
69.3
Adequate · 21 September 2026
2.7k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This system is a cryptocurrency tracking application that allows users to view real-time market data, historical price charts, and detailed information for specific coins. It provides features for browsing a list of cryptocurrencies, switching between multiple currencies, and accessing deep-dive screens with live updates. The codebase has been modernized with a new dependency injection framework, updated build configurations, and a redesigned orange-themed UI.
Features
Add Bitcoin details screen with market data and currency selection
Users can now view detailed information about a specific cryptocurrency, including its name, symbol, and current price. The screen displays market data such as current price, market cap, and total volume, allowing users to switch between different currencies (EUR, USD, GBP) to view values in their preferred currency. The feature includes a top bar with a back button for navigation and handles loading, success, and error states for the displayed data.
feature/details · high confidence
Automated ktlint installation script added
A new shell script at scripts/install-ktlint.sh has been added to the repository. This script automates the installation of the ktlint static analysis tool (version 1.8.0) to a specified or default system directory, enabling consistent code style enforcement across the project.
scripts · high confidence
Introduce the History feature with live price updates and historical charts
The History feature is now available, allowing users to view a list of cryptocurrencies with their latest price, 24-hour change percentage, and historical price data. The implementation includes a new \api\ module for navigation keys, a \impl\ module containing the data layer (remote data source, repository, and mappers), domain layer (use cases for fetching chart and latest price), and UI layer (ViewModel and Compose screens). Users can navigate to a details screen for individual coins. The feature integrates with the \Metro\ dependency injection framework and uses Kotlin Flows for reactive state management.
feature/history · high confidence
Introduced date and price formatters with unit tests
Added new formatters for dates and prices within the core/formatter module. The date formatter now supports simplified outputs like 'Today' or 'Yesterday' for current and previous days, alongside standard formatting patterns. The price formatter converts numeric values into localized currency strings. Both formatters are registered via the new Metro dependency injection framework. Comprehensive unit tests have been added to verify the formatting logic for various date scenarios and currency formats.
core/formatter · high confidence
Behavioural changes
Migrate from Anvil to Metro for dependency injection
The project's build configuration has been updated to replace the Anvil plugin with the Metro plugin for dependency injection. This change updates the Gradle convention plugins to apply 'dev.zacsweers.metro' instead of 'com.squareup.anvil', removing the previous Anvil-specific extension configuration. Additionally, the Kotlin compiler language version has been upgraded to 2.2, and the Android compile/target SDK versions have been bumped to 36.
build-logic/convention · high confidence
Migrate from Anvil/Dagger to Metro for dependency injection
The project has switched its dependency injection framework from Anvil/Dagger to Metro, updating all related annotations and module definitions accordingly. This change includes migrating the \ErrorHandlerCallAdapterFactory\ and \RemoteModule\ to use Metro's \@Inject\ and \@ContributesTo\ annotations, and updating the \RemoteErrorMapper\ to receive a \StringProvider\ via injection rather than direct context access. Additionally, a new \StringProvider\ interface and implementation were added to the local data layer to centralize string resource retrieval, and unit tests were added to verify the \RemoteErrorMapper\'s error handling logic.
app/src, core/data/remote, core/di · medium confidence
Redesigned app theme with orange primary colors and new UI components
The app's visual identity has shifted from a purple-based palette to an orange one, with new theme colors (Orange, Orange60, Orange80, Orange20) replacing the previous Purple and Pink variants in both light and dark modes. This change is accompanied by the introduction of several new UI components in the design system, including ArcBitcoinIcon, ArcCryptoIcon, ArcDetailsListLoading, ArcLiveCircle, ArcPerformance, and ArcSwitcher, alongside a refactored ShimmerEffect and a renamed loading component (CardListLoading to ArcHistoricalListLoading).
core/design-system · high confidence
Refactor Coroutines utilities and add Calendar extension
The Coroutines utility functions have been refactored to improve code formatting and structure, specifically updating the \ChannelSharedFlow\ interface and implementation to use multi-line formatting for better readability. Additionally, new extension functions have been added to the \Calendar\ class, including \isSameDayAs\ for comparing calendar dates and \isToday\ for checking if a timestamp represents the current day.
core/tooling/extension · medium confidence
Upgraded Gradle wrapper to version 8.13
The Gradle wrapper has been updated to use Gradle version 8.13 (previously 8.9). This change ensures that the project uses a newer version of the Gradle build tool, which may include new features, performance improvements, and bug fixes.
gradle · high confidence
Test coverage
Migrate test rule implementation to Kotlin
The test rule implementation for the main dispatcher has been moved from the Java source directory to the Kotlin source directory, aligning the project's test utilities with the Kotlin codebase.
core/tooling/test · 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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 66 → 69 (+2.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.1)
- Architecture 100 → 90 (-9.8)
- Maturity 63 → 63 (+0.5)
- Readiness 57 → 57 (+0.0)
- Security 71 → 100 (+29.0)
- Domain Modelling 100 → 100 (+0.0)
Resolved (11)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (13 lines × 2) (core/design-system/src/main/kotlin/io/github/msh91/arcyto/core/design/component/ArcDetailsListLoading.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Small-team knowledge concentration
- Test reliability not included
New (11)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (14 lines × 2) (core/design-system/src/main/kotlin/io/github/msh91/arcyto/core/design/component/ArcDetailsListLoading.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No dependency advisory monitoring
- Workflow token permissions not restricted
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
msh91/arch 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 7917080c67c7425e56791bb4aecd3249691cc287 — 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.