princessdharmy/FootballFixturesApp
47.0
Weak · 22 September 2026
2.7k
lines of production code
Kotlin
primary language
7
measurements over time
What this system is
This system is an Android application for browsing sports competitions and fixtures, structured around a clean architecture with distinct core, domain, data, and feature modules. It leverages AndroidX Navigation for screen management and employs a local caching strategy using Room to store and retrieve competition, team, and player data. The app exposes business logic through domain use cases that fetch data from a repository, supporting offline access and background updates.
Features
Added core application infrastructure and dependency injection setup
The core module now includes the foundational application class (MainApplication) that initializes the Dagger-based dependency injection container (CoreComponent). This component wires up the application context, the Room-based database (FootballDatabase), and the CompetitionsRepository, enabling the rest of the app to access these dependencies through the DI framework. Additionally, standard Android build configuration files (.gitignore, proguard-rules) and unit/instrumented tests have been added to support the new structure.
core · medium confidence
Added use cases for fetching competition players, standings, and team details
New domain use cases have been introduced to retrieve competition-related data: GetPlayersUseCase, GetTableUseCase, and GetTeamUseCase. These components wrap calls to the CompetitionsRepository to fetch player lists, league standings, and team information respectively, exposing the data through a consistent NetworkStatus interface.
domain/src/main/java/com/example/domain/usecases/competitiondetails · medium confidence
Initial domain layer structure and repository interfaces
The domain module has been initialized with a new directory structure, including an AndroidManifest, ProGuard rules, and test scaffolding. The core addition is the CompetitionsRepository interface, which defines the domain's contract for fetching match, competition, standings, team, and player data, establishing the foundation for the application's business logic layer.
domain · high confidence
Initial navigation graph setup for bottom navigation and view pager
The navigation module now includes the foundational navigation graphs for the application's bottom navigation bar and a view pager. The bottom navigation graph defines the start destination as 'Today's Fixture' and includes a route to the 'Competitions' section, which can navigate to competition details. Additionally, a separate navigation graph is introduced for the view pager, allowing the 'ViewPagerFragment' to receive competition data as an argument. This establishes the structural routing for these UI components.
navigation · high confidence
Introduce domain entities, mappers, and presentation layer for competition details
The app now defines a set of domain entities for matches, competitions, teams, players, and standings, alongside corresponding data models in the presentation layer. A new bottom sheet UI displays a team's squad, while viewmodels and mappers bridge the domain and presentation layers. Utility functions for date formatting and network status have been updated to use the new models, and the codebase has been refactored to use coroutines and Flow for asynchronous data handling.
presentation · high confidence
Introduce domain use cases for fetching competition and fixture data
Added new domain use cases (GetCompetitionsUseCase and GetTodayFixturesUseCase) that retrieve competition and fixture data from the local database via the CompetitionsRepository, exposing the results as Kotlin Flows.
domain/src/main/java/com/example/domain/usecases/competition · medium confidence
Introduced modularized competition details feature with tabbed navigation
The competition details functionality has been restructured into a new \features/competitiondetails\ module, separating the UI, data binding, and dependency injection (Dagger) from the main application. Users can now view competition information through a tabbed interface (using ViewPager) that displays the standings table, upcoming fixtures, and team rosters. The implementation includes dedicated fragments for each tab, a bottom sheet for team details, and a view model module for dependency injection.
features/competitiondetails · high confidence
Introduced the Competitions feature module
Added a new Competitions feature module containing the UI for browsing competitions and viewing today's fixtures. This includes the CompetitionsFragment and TodayFixturesFragment, their respective adapters, and layout files. The module also includes Dagger 2 dependency injection components and view model bindings to support the feature's data flow.
features/competitions · high confidence
Shared UI and utility components moved to common module
The \common\ module now contains shared Android components, including base \Activity\ and \Fragment\ classes for consistent UI behavior, utility classes for network status and constants, and a set of drawable resources and string resources. This refactoring centralizes reusable UI logic and assets, allowing other modules to leverage these shared implementations.
common · high confidence
Behavioural changes
Centralized dependency and version management in buildSrc
The buildSrc module now includes a centralized Kotlin file (Dependencies.kt) that defines all third-party library coordinates and their corresponding version numbers. This includes dependencies for AndroidX components (AppCompat, Core KTX, Fragment, Navigation, Room), networking libraries (Retrofit, OkHttp, Moshi), and testing tools (Espresso, JUnit). By consolidating these values, the project ensures consistent versions across all modules and simplifies future updates.
buildSrc · high confidence
Gradle build tool upgraded to version 6.1.1
The Gradle wrapper has been updated from version 4.10.1 to 6.1.1. This upgrade brings the project's build system to a newer version of Gradle, which may introduce changes in build behavior, plugin compatibility, and task execution.
gradle · high confidence
Introduced local caching for competition data
The data layer now implements a local database cache for competition data using Room. The \CompetitionsRepositoryImpl\ utilizes a \networkBoundResource\ pattern that first queries the local database and then fetches fresh data from the remote API, saving the response to the local store. This allows the application to serve cached data while updating the database in the background, improving responsiveness and supporting offline access to competition information.
data · high confidence
Migrated HomeActivity to AndroidX Navigation Component
The app's main activity has been refactored to use the AndroidX Navigation Component for managing screen transitions. This replaces the previous manual FragmentTransaction-based navigation with a declarative approach using NavController, enabling features like automatic back-stack handling and deep linking. The old Dagger-based Activity and Fragment providers, along with the legacy Repository and ViewModel classes, have been removed as part of this architectural shift.
app/src · high confidence
Dependencies
Migrate Android project to multi-module architecture with centralized dependency management
The project has been refactored from a single-module structure into a multi-module architecture, introducing distinct modules for core, data, domain, presentation, and feature-specific components (competitions, competition details). Build configuration is now centralized in a shared 'commons.gradle' script, and all module dependencies are managed through a shared 'Libraries' and 'AndroidLibraries' catalog, replacing individual versioned dependency declarations in each module's build.gradle file. The app module now depends on these internal modules rather than directly declaring third-party libraries.
(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 41 → 47 (+5.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 → 95 (-5.3)
- Maturity 42 → 40 (-1.8)
- Readiness 24 → 36 (+11.7)
- Security 100 → 100 (+0.0)
- Domain Modelling 38 → 45 (+6.3)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (11 lines × 2) (presentation/src/main/java/com/example/presentation/mappers/Mapper.kt)
- No exposed public API
- Test reliability not included
- single-maintainer — knowledge-concentration (bus factor) risk
New (6)
- 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 (13 lines × 2) (presentation/src/main/java/com/example/presentation/mappers/Mapper.kt)
- No ADRs found
- TodoComment (common/src/main/java/com/example/common/utils/glide/SvgDecoder.kt)
Architecture
- Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 2 added · 0 removed
Added bounded contexts (2)
- competitiondetails
- domain
Added dependency edges (2)
- competitiondetails → presentation (coupling)
- presentation → domain (coupling)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
princessdharmy/FootballFixturesApp 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 22 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 2e5e64a084af5e3d64ecd97087c176185287605a — 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-821afab8930d.