Skip to content
CAI
Software that uses CAICheck a score

Muhammed-Ayad/Balgho-Convey

48.5

Weak · 20 September 2026

6.3k

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 is a mobile application for Islamic practice that provides features for prayer times, Quranic content, supplications, Qibla direction, and radio streaming. It manages state and data fetching using Riverpod and Dio, supporting both Arabic and English localizations. The system handles audio playback, scheduled notifications, and device location services to enhance user interaction with these religious tools.

Features

Added local notification and location services

New service classes have been introduced in the application's service layer to support scheduled local notifications and device location tracking. The LocalNotificationService manages notification initialization, scheduling (with support for daily, weekly, and monthly reminders), and cancellation for both Android and iOS platforms, while the LocationService handles checking location service availability, requesting necessary permissions, and retrieving the current device location.

lib/services · high confidence

Introduce generic state management and data fetching mixins

Added a new \state\_mix\ library providing a \GenericState\<T\>\ class to standardize application states (initial, loading, success, fail) with a \when\ pattern for UI handling and a \guard\ helper for safe async execution. Included \DataFetcher\ mixins for both Riverpod \Notifier\ and \StateNotifier\ to automate loading/success/failure transitions, along with utility extensions for logging and stream filtering.

_lib/blocs/state\mix · high confidence

Introduce shared helper utilities and UI components

This change adds a new set of helper files to the application's core library, providing reusable utilities for the rest of the app. It introduces a \B\ mixin for standardized vertical and horizontal spacing (SizedBox) based on theme dimensions, a \Constants\ class for app-wide values like elevation and timing, and an \AppLocales\ mixin for Arabic and English locale definitions. It also includes a \Utilities\ mixin for date formatting and email launching, a \UiHelper\ class for common UI tasks like showing notifications and alert dialogs, and Dart extensions on \BuildContext\ and \WidgetRef\ to simplify accessing media queries, themes, and Riverpod events.

lib/helpers · high confidence

Introduction of BLoC event architecture and UI animation reorganization

This change introduces a new event-driven architecture for the application's business logic, adding foundational classes for application events (AppEvent), action events (ActionEvent), and UI events (UiEvent, UrgentUiEvent, NormalUiEvent) to handle state transitions. It also establishes a global event bus provider (Bus) for cross-component communication and reorganizes the UI layer by moving the bottom animation component from lib/animation to lib/ui/animations.

(repo-wide) · high confidence

New Nawawi Hadith browsing screen with navigation and error handling

A new Nawawi screen has been added, allowing users to browse Hadiths via a paginated view. The interface includes navigation buttons to move between items, with the back button intelligently popping the screen when on the first item. It features a dedicated item widget for displaying Hadith text and an explanation button, along with loading and error states to ensure a robust user experience.

lib/ui/nawawi · high confidence

New audio playback, Qibla direction, and Azkar notification notifiers

This change introduces three new state management notifiers in the app's bloc layer. The AudioNotifier enables audio playback functionality using the audioplayers package, allowing users to play and stop audio streams. The QiblaDirectionNotifier integrates with the Qibla API to fetch and display the direction to Mecca. Additionally, the NotificationsSubscriptionNotifier manages scheduled notifications for morning and evening Azkar (remembrances), handling subscription toggles, toast feedback, and navigation to the appropriate Azkar screen when a notification is tapped.

lib/blocs/notifiers · high confidence

New data models for Azan, Azkar, Nawawi, Qibla, and Radio features

This change introduces a comprehensive set of new data models in the \lib/blocs/models\ directory to support upcoming or refactored features. Specifically, it adds structured classes for Azan prayer times (including Hijri date and timings), Azkar (remembrances), Nawawi (Hadith collections), Qibla direction data, and Radio station lists. All models are implemented using \json\_annotation\ for JSON serialization, enabling the application to parse API responses for these distinct content areas.

lib/blocs/models · high confidence

New radio streaming interface with category browsing and playback controls

Users can now browse radio stations by category and play them directly within the app. The update introduces a new \RadioCategoriesScreen\ that fetches and displays a list of radio categories, and a \RadiosScreen\ that lists individual stations within a selected category. Tapping a station opens an \AudioPage\ featuring a custom app bar and a \PlayRadioCard\ widget that provides play/stop controls backed by the \AudioNotifier\. The existing \RadioItem\ component was refactored to use the new theme system (color schemes and dimensions) and accepts a generic tap callback, decoupling it from direct navigation logic.

lib/ui/radios · high confidence

New reusable UI widget components added

The application now includes a set of new, reusable UI widgets in the \lib/ui/widgets\ directory to standardize the interface. These include \CardButtonWidget\ and \CardViewWidget\ for interactive card-based navigation, a \CustomAppBar\ for consistent header styling, and \LoadingWidget\ for displaying a circular spinner during data fetching. Error handling is improved with \CustomErrorWidget\, which supports localized messages and an optional refresh action, while \GridTileWidget\ facilitates layout within staggered grids. Additionally, \NawawiDialog\ provides a scrollable, localized dialog for displaying text descriptions.

lib/ui/widgets · high confidence

Removals

Removal of legacy BLoC/Cubit business logic for Azan, Quran, and Radio features

The application has removed the underlying business logic classes for the Azan time, Quran, and Radio modules. Specifically, the \AzanTimeCubit\ and its state, the \QuranCubit\ and \QuranState\ (including the \QuranException\), and the \RadioCubit\ and \RadioState\ have been deleted from the codebase. This eliminates the previous implementation that managed state and data fetching for these features using the BLoC pattern, likely as part of a broader refactoring or migration to a different architecture.

_lib/business\logic, lib/exceptions · high confidence

Removal of legacy presentation layer and shared resources

The entire \lib/presentation\ directory has been deleted, removing the app's previous UI implementation. This includes the main navigation screen (\main\_view.dart\) and all feature-specific views and widgets for the Quran, Azan (prayer times), Azkar (supplications), Kibla (compass), Nawawi (hadith), and Radios sections. Additionally, shared presentation resources such as the theme configuration (\theme\_manager.dart\), design values (\values\_manager.dart\), string constants (\strings\_manager.dart\), and image asset definitions (\assets\_manager.dart\) have been removed.

lib/presentation · high confidence

Architecture

Data layer refactored to use Riverpod and Dio with new API implementations

The data layer has been restructured to replace the previous BLoC and http-based architecture with Riverpod for dependency injection and Dio for network requests. This introduces new API implementations for Azan times, Nawawi hadiths, Qibla direction, and radio stations, all wired through Riverpod providers. The old service classes, repositories, and error handling utilities have been removed, and the Azkar data has been moved to local JSON assets with updated references.

lib/data · high confidence

Behavioural changes

Added generated localization code for Arabic and English translations

The application now includes generated code for the \easy\_localization\ package, providing support for Arabic and English locales. This change introduces a codegen loader that maps locale keys to their respective string values (with Arabic translations populated and English keys defined but empty) and generates strongly-typed locale key constants, enabling the app to display localized text for features such as prayer times (azan), Quran, and general UI elements.

lib/generated · high confidence

App initialization updated to support localization and status bar styling

The app's entry point now initializes the localization system using 'easy\_localization' with support for Arabic, and configures the system UI overlay to set a grey status bar color. Additionally, the application is now wrapped in a Riverpod ProviderScope to enable state management via Riverpod instead of the previous Cubit approach.

lib · high confidence

Azan screen UI overhaul with translations and error handling

The Azan screen has been refactored to improve user experience and localization. The interface now displays prayer times using localized labels (e.g., Fajr, Sunrise) instead of hardcoded strings, and features a new header showing the Gregorian and Hijri dates. Error states are now handled gracefully with a dedicated error widget that allows users to retry, and a loading widget is shown during data fetch. The visual design has been updated to use the app's theme colors and dimensions, and the underlying data model access has been adjusted to match the current API response structure.

lib/ui/azan · high confidence

Azkar section restructured with new category screen and enhanced Zekr card

The Azkar feature has been reorganized: a new AzkarCategoryScreen now displays individual dhikr items in a list, replacing the previous single-screen approach. The ZekrCard component has been refactored to use Riverpod for state management, introducing a counter feature and haptic vibration feedback on interactions, while also updating the UI to use unified assets and theme colors.

lib/ui/azkar · high confidence

Contact Us screen refactored with custom app bar and localization

The Contact Us screen has been updated to use a new CustomAppBar component instead of the previous generic app bar, and all text strings are now localized using easy\_localization. The layout has been simplified to remove hardcoded colors in favor of the app's theme color scheme, and the social interaction buttons (email, call, Facebook) have been consolidated into a single email button, with the previous direct URL launching logic removed from this view.

_lib/ui/contant\us · high confidence

Drawer UI refactored with localization and new widget components

The drawer page has been moved to a new UI location and updated to support multiple languages by replacing hardcoded strings with localized keys. The visual design has been modernized by replacing the custom list-tile builder with a new CardButtonWidget, using updated theme dimensions and color schemes. Additionally, hardcoded values for the Google Play link have been replaced with a centralized endpoint constant.

lib/ui/drawer · high confidence

Migrate Azan, Nawawi, and Radios providers to Riverpod

The state management for Azan time, Nawawi, and Radios data has been migrated from the previous Cubit/BLoC pattern to Riverpod. New provider files (azan\_time\_provider.dart, nawawi\_provider.dart, radios\_provider.dart) now expose StateNotifierProvider instances that fetch data via their respective API interfaces, replacing the older implementation and enabling the use of Riverpod's dependency injection and state handling for these features.

lib/blocs/providers · high confidence

The application's routing has been streamlined: the main entry point is now the root route ("/") instead of "/main", and the Qibla route has been renamed from "/kible" to "/qibla". The Quran view has been removed from the navigation map entirely. Additionally, several screens have been renamed to follow a consistent 'Screen' naming convention (AzanView to AzanScreen, AzkarView to AzkarScreen, NawawiView to NawawiScreen, RadiosView to RadioCategoriesScreen), and the error route now uses a primary background color instead of displaying a text message.

lib/resources · high confidence

Qibla screen now provides haptic feedback when aligned

The Qibla screen now triggers a vibration (haptic feedback) when the device's compass heading matches the calculated Qibla direction, helping users confirm alignment without looking at the screen. The screen also includes a refresh capability on the error state to retry fetching direction data.

lib/ui/qibla · high confidence

Redesign home screen with staggered grid and custom app bar

The home screen now uses a staggered grid layout to display navigation cards for features like Radio, Azkar, Azan, Qibla, and Nawawi, replacing the previous layout. A custom app bar is introduced for the header, and the app initializes local notifications on startup. The main view also handles navigation from notification launches.

lib/ui · high confidence

Removal of legacy app entry point and iOS CocoaPods configuration

The application's main entry point (lib/app/app.dart) and its associated constants file (lib/app/constants.dart) have been removed, eliminating the previous implementation of the app's widget tree, dependency injection, and hardcoded configuration values. Additionally, the iOS build configuration files (Debug.xcconfig and Release.xcconfig) have been updated to include the CocoaPods support files, ensuring that native dependencies are correctly linked during the build process.

ios, lib/app · high confidence

Theme system refactored with new font and unified color scheme

The app's visual presentation has been updated by switching the default font family from 'ElMessiri' to 'UthmanicHafs' and restructuring the theme resources. Color definitions have been consolidated into a new \AppColors\ mixin, and a new \AppTheme\ mixin now centrally configures the \ThemeData\, including specific primary and secondary colors, text styles, and button shapes. Additionally, a new \dimensions.dart\ file provides standardized spacing constants, while related resource files have been moved into the \lib/theme\ directory for better organization.

lib/theme · high confidence

Fixes

Added Vibrate permission and upgraded Gradle wrapper

The Android app now includes the VIBRATE permission in the manifest, enabling haptic feedback features such as the vibration on the Qibla screen. Additionally, the Gradle wrapper has been upgraded from version 6.7 to 7.4 to ensure compatibility with newer build tooling.

android · high confidence

Test coverage

Added initial test suite for app logic and widget rendering

Added a new \logic\_test.dart\ file and updated \widget\_test.dart\ to include tests for the application's core functionality. The widget test now initializes the localization and state management providers before verifying that the app title displays correctly, replacing the previous generic counter increment test.

test · high confidence

Dependencies

Upgrade Flutter dependencies and update Android compile SDK

The project has upgraded its Dart SDK requirement to 2.19.2 and updated numerous dependencies in pubspec.yaml, including adding new packages for UI (loading\_indicator, extended\_image, shimmer, flutter\_spinkit, flutter\_staggered\_grid\_view), state management (flutter\_riverpod replacing flutter\_bloc), data handling (shared\_preferences, easy\_localization), and utilities (share\_plus, upgrader, dio, permission\_handler, location, flutter\_local\_notifications). The Android compile SDK version was explicitly set to 33, and the app version was bumped to 1.4.0+5. Additionally, the font family was changed from ElMessiri to UthmanicHafs.

(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 48 → 48 (-0.0)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (-0.2)
  • Architecture 100 → 78 (-21.7)
  • Maturity 35 → 48 (+12.3)
  • Readiness 24 → 24 (+0.0)
  • Security 100 → 98 (-1.6)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • No exposed public API
  • Orphaned knowledge (lib/data/local/json/azkar_list.dart)
  • Test reliability not included
  • complexity unreadable for .dart, .swift — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (8)

  • 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 (15–18 lines × 5) (lib/data/remote/client/remote_client.dart)
  • Duplicated block (7 lines × 3) (lib/ui/azan/azan_screen.dart)
  • High CVE: [GHSA redacted] (pubspec.lock)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (lib/data/remote/client/remote_client.dart)
  • 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

Muhammed-Ayad/Balgho-Convey 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 20 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 6fb6b08752685839d273c28c53f907450323d0e8 — 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-28e75b8e3254.