Skip to content
CAI
Software that uses CAICheck a score

rrifafauzikomara/NewsApp

46.7

Weak · 21 September 2026

1.8k

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform mobile application built with Flutter, designed to display and manage news articles and user bookmarks. It implements a modular architecture that separates feature modules (home, news list, detail, bookmarks, settings) from shared infrastructure (core, dependencies, shared UI components). The app supports both Android and iOS with platform-specific UIs, manages state using the BLoC pattern, and handles user preferences for themes and language.

Features

Add article card widget with image handling and navigation

A new CardArticle widget is introduced in the shared library, rendering an article's title, author, and optional image. The component uses CachedNetworkImage to display the article's image, with a fallback error icon when the image URL is null or fails to load. Tapping the card navigates to a detail page via the Modular router, passing the article entity as an argument.

libraries/shared/lib/widget/card · high confidence

Add home module for bottom navigation and page routing

The home module now provides the main application shell, featuring a bottom navigation bar that switches between the news list and bookmark pages. The implementation includes platform-specific navigation (Cupertino for iOS, Material for Android) and registers the necessary dependency injection bindings for the article flow.

features/home · high confidence

Add news bloc observer for debugging

A new NewsBlocObserver class has been introduced to log Bloc and Cubit state transitions, events, and errors to the console, enabling easier debugging of the application's state management.

lib/bloc · high confidence

Add news detail view and webview navigation

Users can now view the full content of a news article within the app, displaying the title, author, date, description, and main content. The interface adapts to the platform, using a Material Design layout on Android and a Cupertino-style layout on iOS. Additionally, a 'Read More' button is provided to open the original article in an in-app web view.

_features/detail\news · high confidence

Add news header sliver widget

A new \NewsHeader\ widget has been added to the shared library, providing a scrollable header for news articles. It displays the article's image with a loading spinner and error state, overlays a 'Release' label, and shows the article title with text overflow handling.

libraries/shared/lib/widget/sliver · high confidence

Add settings page for theme and language preferences

A new Settings page has been added, allowing users to toggle between light and dark themes and switch the app's language between English and Indonesian. The implementation introduces separate BLoC classes for managing theme and language states, persisting user choices to shared preferences, and rendering platform-specific UIs (Material for Android, Cupertino for iOS) with adaptive switches for each setting.

features/settings · high confidence

Add shared utility classes for images, routes, and localization keys

The shared utilities library now includes new files that define image asset paths, named application routes, and localization keys. These constants provide a centralized way to access image assets, navigate between screens, and retrieve localized strings for features like home, news, bookmarks, and settings.

libraries/shared/lib/common/utils · high confidence

Add size context extension for screen dimensions

A new Dart extension on Flutter's BuildContext is introduced to provide convenient access to screen dimensions. The extension adds getters for width and height, allowing developers to easily retrieve the current screen's width and height without directly accessing the MediaQuery.

libraries/shared/lib/common/extensions · high confidence

Add smooth dialog widget with customizable buttons and media modes

A new shared dialog widget has been added that supports three content modes: Lottie animations, local assets, and network images. The dialog includes customizable title, content, and button configurations, allowing users to display animated or static media with standard cancel/submit actions.

libraries/shared/lib/widget/dialog · high confidence

Added Flutter library scaffolding for core, dependencies, and shared modules

Introduced new Flutter package structures for core, dependencies, and shared components, each containing a .metadata file for Flutter tooling and a placeholder test file. This establishes the foundational layout for these library modules within the project.

libraries · high confidence

Added bookmark feature module with platform-specific UI

Introduced a new 'bookmark' feature module that registers a route for a 'BookmarkPage'. The page displays a title and a settings icon, with the UI adapting to the platform: Android uses a Material 'Scaffold' with an 'AppBar', while iOS uses a 'CupertinoPageScaffold' with a 'CupertinoNavigationBar'. The module also includes a basic test file.

features/bookmark · high confidence

Added dependencies module for managing library updates

A new Dart module has been added at libraries/dependencies/lib/dependencies.dart to handle dependency updates. This module serves as a central point for managing and checking the pubspec.yaml file for this specific module.

libraries/dependencies · high confidence

App now supports separate development and production environments with dynamic theming

Users can now distinguish between development and production builds, each connecting to different API endpoints. The app also implements dynamic light and dark theme support, allowing the interface to adapt to the user's preferred color scheme. A new splash screen displays the app version number during startup.

lib/ui · medium confidence

Consolidated widget library exports

The shared widget library now explicitly exports a set of UI components including article cards, custom and platform-specific scaffolds, a news header sliver, and a smooth dialog, making these widgets available for use across the application.

libraries/shared/lib/widget · high confidence

Introduce CoreModule for dependency injection and shared preferences

A new CoreModule has been added to the core library, establishing a child module for dependency injection using the Flutter Modular framework. This module registers bindings for SharedPreferences, a SharedPrefHelper, and a DioClient configured with a provided base URL, enabling consistent access to local storage and network clients across the application.

libraries/core/lib · medium confidence

Introduce network layer with configurable base URL and HTTP client

Adds a new network abstraction consisting of an API constants file defining base URLs for debug and production environments, and a Dio-based HTTP client that configures timeouts and logging interceptors. This provides a reusable, configurable foundation for making API calls throughout the application.

libraries/core/lib/network · high confidence

Introduce news list feature with BLoC state management and platform-specific UI

Users can now view a list of news articles. The feature implements a clean architecture with a BLoC pattern to manage loading, success, and error states. The UI adapts to the platform: Android uses a Material Design AppBar, while iOS uses a Cupertino-style navigation bar. The list displays articles fetched from a remote API, with a header for the first article and a scrollable list of the rest. A settings icon is included in the header to navigate to the settings page.

_features/list\news · high confidence

Introduce shared common library with extensions, styles, and utilities

A new shared library at libraries/shared/lib/common is introduced, acting as a central export point for three internal modules: extensions (likely for media queries and other helpers), styles (supporting Android/iOS theming), and utils. This change provides a unified entry point for common Dart code used across the application.

libraries/shared/lib/common · high confidence

Introduce shared module for Flutter Modular dependency injection

A new shared module for the Flutter Modular architecture has been added, registering bindings for ImageAssets, LocaleKeys, NamedRoutes, and ColorPalettes. This change provides a centralized location for shared dependencies and routing configuration within the application's dependency injection container.

libraries/shared/lib · medium confidence

Introduces reusable UI components for consistent navigation and platform-specific rendering

The shared widget library now includes two new components: a \CustomScaffold\ that provides a unified navigation header with a back button and title, and a \PlatformWidget\ that conditionally renders different UIs for Android and iOS. These additions establish a consistent header style across the app and enable platform-specific widget selection, improving visual coherence and user experience on each operating system.

libraries/shared/lib/widget/scaffold · high confidence

Behavioural changes

Introduce platform-specific theming for light and dark modes

Added new style definitions for light and dark themes, including color palettes and text styles. The light theme uses a white background with purple accents, while the dark theme uses a dark background with teal accents. These themes are applied to the app's UI components, including app bars and bottom navigation bars.

libraries/shared/lib/common/styles · high confidence

Local storage for app theme and language preferences

Added SharedPrefHelper to persist user preferences for dark mode and Indonesian language settings using shared\_preferences.

libraries/core/lib/local · medium confidence

Removed default Flutter counter app template

The default Flutter application entry point (lib/main.dart) has been removed. This eliminates the standard 'counter' demo app that is typically generated by the Flutter SDK, indicating the project has moved away from the initial template scaffolding to a custom architecture.

lib · high confidence

Support for app localization and dynamic display names

The iOS app now supports localization by adding English (en) and Norwegian Bokmål (nb) to the supported localizations list, and enables dynamic display names via the CFBundleDisplayName key.

ios/Runner · high confidence

iOS build configuration updated to include CocoaPods

The iOS build configuration has been updated to integrate CocoaPods dependencies. Debug and Release build configurations now include their respective Pods support files, and the Xcode workspace has been updated to reference the Pods project, enabling the use of third-party libraries in the iOS native layer.

ios/Flutter, ios/Runner.xcworkspace · medium confidence

iOS build system updated to support multiple build configurations

The iOS project now supports distinct build configurations for development and production environments. This is achieved by introducing new Xcode schemes (development.xcscheme, production.xcscheme) and adding corresponding xcconfig files for each build type (debug, release, profile) for both development and production. The project.pbxproj has been updated to include these new configuration files and link the Pods framework, enabling separate build settings and resources for different environments.

ios/Runner.xcodeproj · medium confidence

Test coverage

Added test placeholders for iOS development and production Firebase configs; Android manifest cleanup and flavor-specific configuration placeholders; Updated widget test to be a placeholder.

Dependencies

Adopts modular architecture with feature and library packages

The project structure is refactored into a modular architecture, introducing separate \pubspec.yaml\ files for each feature (bookmark, detail\_news, home, list\_news, settings) and shared libraries (core, dependencies, shared). The root \pubspec.yaml\ is updated to reference these new local packages, and the \pubspec.lock\ file is removed. Additionally, the Android build configuration is updated to target SDK 30 and includes product flavors for development and production environments.

(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 49 → 47 (-2.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 97 (-2.6)
  • Architecture 100 → 98 (-2.2)
  • Maturity 42 → 57 (+14.8)
  • Readiness 24 → 12 (-12.2)
  • Security 90 → 90 (+0.0)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (8)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Test reliability not included
  • The 'Features' list is a bulleted headline with no detail; the body does not explain what each feature entails. (README.md)
  • The 'Quick start' section recommends self-study at bloclibrary.dev and two external links, but it does not state where to find the BLoC implementation or how to run the app. (README.md)
  • complexity unreadable for .dart, .kt, .swift — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

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 (18–19 lines × 2) (features/settings/lib/presentation/ui/settings_page.dart)
  • Duplicated block (7 lines × 2) (features/bookmark/lib/presentation/ui/bookmark_page.dart)
  • Duplicated block (7 lines × 4) (features/bookmark/lib/bookmark.dart)
  • Duplicated block (8 lines × 2) (features/detail_news/lib/presentation/ui/detail_news_page.dart)
  • Leaked secret: high-entropy-secret (features/list_news/lib/data/datasources/article_remote_data_source.dart)
  • MethodTooLong: SmoothDialog.SmoothDialog (libraries/shared/lib/widget/dialog/smooth_dialog.dart)
  • No ADRs found
  • Secret: generic-api-key (features/list_news/lib/data/remote/network/article_api.dart)

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

Survey your own repository

rrifafauzikomara/NewsApp 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 71d67e93db3a354f8343b6bdf37dce9f20aa153d — 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.