Skip to content
CAI
Software that uses CAICheck a score

mo7amedaliEbaid/piiicks-ecommerce

56.8

Adequate · 21 September 2026

9.9k

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 Flutter-based mobile application framework implementing a clean architecture with a BLoC/Cubit state management pattern. It provides core e-commerce functionality including user authentication, product browsing with filtering and sorting, and shopping cart management. The system also supports order tracking, wishlist management, and local notification handling, all structured around modular domain and data layers.

Features

Add product listing and sorting capabilities

The application now supports browsing and sorting products. Users can load an initial list of products, load more items via pagination, and sort the product list by newest, price (high to low or low to high), or name (A-Z or Z-A).

_lib/application/products\bloc · high confidence

Add screenshot capture and sharing functionality

Introduced a new ShareCubit that enables users to capture a screenshot and share it via the device's native sharing interface. The implementation uses the screenshot package to capture the screen, saves the image to the device's documents directory, and then uses the share\_plus package to share the file. The state management includes initial, loading, success, and error states to handle the asynchronous sharing process.

_lib/application/share\cubit · high confidence

Added bottom navigation bar state management

A new NavigationCubit has been introduced to manage the state of the bottom navigation bar, allowing the application to track and update the currently selected tab (e.g., home, search, etc.) using the Flutter BLoC pattern.

_lib/application/bottom\_navbar\cubit · high confidence

Added delivery information and user authentication management

Introduced new application logic for managing delivery information and user sessions. This includes the \DeliveryInfoActionCubit\ and \DeliveryInfoFetchCubit\ to handle adding, editing, selecting, and fetching delivery details, alongside the \UserBloc\ to manage sign-in, sign-up, sign-out, and user state. Supporting these are corresponding state classes, domain use cases for repository interactions, data models for JSON serialization, and the underlying repository interfaces.

(repo-wide) · high confidence

Added domain entities for cart, order, product, and user models

Introduced new domain entities to support the application's core features: Cart and CartItem for managing shopping cart items; OrderDetails, OrderItem, and DeliveryInfo for tracking orders and delivery information; ProductEntity, PriceTag, and PaginationMetaData for product listings and metadata; and User for account details. These classes define the data structures used throughout the domain layer.

lib/domain/entities · high confidence

Added model for received notifications

A new data model, ReceivedNotification, has been introduced to represent received notifications. This model includes fields for the notification's unique identifier, title, body, and payload, enabling the application to process and display incoming notification data.

lib/data/models/notification · high confidence

Added order management capabilities

Introduced new application layer components for managing orders, including the OrderAddCubit and OrderFetchCubit to handle adding and retrieving orders. This is supported by corresponding state classes, domain use cases (AddOrderUseCase, GetCachedOrdersUseCase, GetRemoteOrdersUseCase, ClearLocalOrdersUseCase), and data models (OrderDetailsModel, OrderItemModel) to facilitate order creation, caching, remote fetching, and local data clearing.

(repo-wide) · high confidence

Added product data models for search and pagination

New data models have been introduced to support product search and pagination features. This includes FilterProductParams for handling search filters (keyword, categories, price range, limit, and page size), ProductModel for representing individual product data, and ProductResponseModel to handle paginated API responses containing a list of products and pagination metadata. These models enable the application to fetch, serialize, and deserialize product data from the backend.

lib/data/models/product · high confidence

Added product retrieval capability

Users can now retrieve product information through a new GetProductUseCase, which wraps the underlying repository to fetch product data based on filter parameters.

lib/domain/usecases/product · high confidence

Added stub for managing favorite products

A new use case, ManageFavoritesUseCase, was added to handle favorite product operations. It provides methods to add, remove, and retrieve favorite products by delegating to the corresponding repository methods. Note that the implementation is currently commented out, indicating this is a placeholder or stub for future functionality.

lib/domain/usecases/favourites · medium confidence

Added support for URL launching and content sharing on Linux and Windows

The Linux and Windows Flutter plugin registries have been updated to include the url\_launcher and share\_plus plugins. On Linux, the UrlLauncherPlugin is now registered, and on Windows, both UrlLauncherWindows and SharePlusWindowsPluginCApi are registered. This enables the application to open external URLs and share content on these desktop platforms.

linux, windows · high confidence

Added wishlist management functionality

Introduced the WishlistCubit and its associated states to handle wishlist operations. Users can now load their saved wishlist items, add products to their wishlist, clear the entire wishlist, and check if a specific product is already in their wishlist. The implementation uses local storage for persistence.

_lib/application/wishlist\cubit · high confidence

Implemented data repositories for cart, delivery, orders, products, and user authentication

Added new repository implementations for managing cart items, delivery information, order details, product listings, and user authentication. Each repository handles data synchronization between remote APIs and local caching, ensuring offline availability and consistent state across the application.

lib/data/repositories · high confidence

Introduce FilterCubit for product filtering

Added a new FilterCubit to manage product filtering state, including keyword search, category selection, and price range. The component exposes methods to update search keywords, toggle category selections, adjust price ranges, and reset filters, enabling users to refine product listings.

_lib/application/filter\cubit · high confidence

Introduce cart management capabilities

Users can now add items to their shopping cart, retrieve their current cart contents, clear the cart, and synchronize cart data with the server. This change introduces the application layer (CartBloc) to handle cart events, domain use cases for each cart operation, and data models for cart items, enabling full cart lifecycle management within the app.

_lib/application/cart\bloc, lib/data/models/cart, lib/domain/usecases/cart · high confidence

Introduce local notification management via NotificationsCubit

A new NotificationsCubit has been added to handle local notifications on Android. This component initializes the Flutter local notifications plugin, configures streams for notification interactions, and provides methods to display notifications, retrieve them from local storage (GetStorage), and clear the history. This introduces the core logic for managing and persisting local notifications within the application layer.

_lib/application/notifications\cubit · high confidence

Introduced local and remote data sources for cart, delivery, order, product, and user domains

Added new local data source implementations for cart, delivery info, orders, products, and user data using SharedPreferences, alongside remote data source implementations for these same domains using HTTP clients. The changes also include refactoring import paths for error and constant modules to use the 'core' directory instead of 'shared'.

_lib/data/data\sources · high confidence

New domain repository interfaces for core app features

Added abstract repository interfaces for cart, delivery information, favorites, orders, products, and user authentication, establishing the domain layer's contract for these features. The existing category repository was updated to import failures from the new core error path.

lib/domain/repositories · high confidence

New enum types for sorting, payment, and navigation

Added new enum types to define sorting options (newest, high-to-low, low-to-high, a-to-z, z-to-a), payment methods (knet, visa), and navigation tabs (home, categories, products, cart, profile).

lib/core/enums · high confidence

Architecture

Introduces a centralized design system and modular dependency injection for the mobile app

The app now uses a unified configuration system for dimensions, typography, and spacing, ensuring consistent styling across all screens. Additionally, the dependency injection setup has been refactored into separate modules for each feature (Cart, Category, Delivery, Order, Product, User) and shared cubits, making the architecture more modular and maintainable.

lib/presentation · high confidence

Behavioural changes

Added macOS plugin registrations for local notifications, sharing, and URL launching

The macOS build now registers the FlutterLocalNotificationsPlugin, SharePlusMacosPlugin, and UrlLauncherPlugin alongside the existing storage and database plugins. This enables the application to handle local notifications, share content, and open URLs on macOS.

macos · high confidence

Centralized app constants and assets

The app's core constants have been reorganized and expanded. A new 'AppAssets' class in 'lib/core/constant/assets.dart' centralizes paths for SVG and PNG resources, including icons for the header, cart, products, and various UI elements. 'lib/core/constant/colors.dart' introduces an 'AppColors' class defining common UI colors like cyan, grey, and light grey. 'lib/core/constant/notifications.dart' sets up stream controllers for handling local notifications. 'lib/core/constant/strings.dart' contains app title, placeholder text, and contact info. Additionally, API configuration has been moved from 'lib/shared/constant/strings.dart' to 'lib/core/constant/api.dart', retaining the base URL and API key while removing unrelated string constants.

lib/core/constant · high confidence

Centralized app initialization and theme configuration

The application entry point (lib/core/app/app.dart) has been refactored to explicitly register a wide range of state management Cubits and Blocs—including cart, wishlist, order, filter, and notification handlers—within the root widget tree. This change ensures that all core application features are initialized and ready for use from the start, while also applying a consistent visual theme (using CommonCyan) across buttons, icons, and app bars.

lib/core/app · high confidence

Centralized routing configuration for the application

The application's navigation logic has been consolidated into a single \AppRouter\ class. This change introduces a centralized routing table that maps specific URL paths (such as /login, /cart, /wishlist, /orders, and /notifications) to their corresponding Flutter screens. Users will experience consistent navigation behavior across the app, as all screen transitions are now managed through this unified router configuration.

lib/core/router · high confidence

Introduces BLoC observer and reorganizes shared modules into core

Adds a new BLoC observer (MyBlocObserver) that logs BLoC lifecycle events (create, change, error, close) to the console for debugging purposes. Additionally, several files are moved from the shared directory to the core directory: exceptions.dart, failures.dart, network\_info.dart, and usecase.dart are all renamed/moved to their new locations, reflecting a structural reorganization of the codebase.

(repo-wide) · high confidence

Relocated shared core modules to the new core directory

The failure and use-case base classes have been moved from the shared folder to the core folder. This refactoring updates the import paths in the category use cases, ensuring they reference the new core module locations.

lib/domain/usecases/category · high confidence

Test coverage

Added import for Piiicks app module in widget tests

The test file now imports the core app module, ensuring the test suite has access to the application's main entry point and related components.

test · high confidence

Dependencies

Updated Android build configuration and Dart dependencies

The Android build was updated to target SDK 33, enabled multi-Dex, and added libraries for multi-Dex, JDK desugaring, and window management. Kotlin was upgraded to 1.8.21 and the Android Gradle plugin to 7.3.1. In the Dart project, the SDK constraint was set to 3.0.5, and several new dependencies were added including flutter\_svg, photo\_view, flutter\_local\_notifications, and share\_plus, while flutter\_easyloading was removed. Additionally, asset directories for SVGs and images were configured.

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

Lenses

  • Code Health 100 → 92 (-7.7)
  • Architecture 98 → 92 (-5.5)
  • Maturity 44 → 58 (+13.9)
  • Readiness 24 → 33 (+9.1)
  • Security 100 → 100 (-0.3)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (10)

  • Change coupling: app.dart ↔ checkout.dart (lib/core/app/app.dart)
  • Change coupling: cart.dart ↔ checkout.dart (lib/presentation/screens/cart.dart)
  • Change coupling: cart.dart ↔ product_details.dart (lib/presentation/screens/cart.dart)
  • Change coupling: login.dart ↔ signup.dart (lib/presentation/screens/login.dart)
  • 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
  • complexity unreadable for .dart, .swift — churn × complexity hotspots could not be measured
  • single-maintainer — knowledge-concentration (bus factor) risk

New (47)

  • 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 (10 lines × 2) (lib/data/data_sources/remote/user_remote_data_source.dart)
  • Duplicated block (10 lines × 2) (lib/presentation/screens/products_list.dart)
  • Duplicated block (10 lines × 2) (lib/presentation/widgets/rectangular_category_item.dart)
  • Duplicated block (12–13 lines × 3) (lib/presentation/screens/checkout.dart)
  • Duplicated block (13 lines × 2) (lib/data/data_sources/remote/delivery_info_remote_data_source.dart)
  • Duplicated block (14 lines × 2) (lib/presentation/screens/login.dart)
  • Duplicated block (14 lines × 2) (lib/presentation/screens/order_failure.dart)
  • Duplicated block (16 lines × 3) (lib/application/cart_bloc/cart_event.dart)
  • Duplicated block (17 lines × 2) (lib/presentation/screens/add_edit_address.dart)
  • Duplicated block (17 lines × 2) (lib/presentation/screens/checkout.dart)
  • Duplicated block (17 lines × 2) (lib/presentation/screens/home.dart)
  • Duplicated block (18 lines × 2) (lib/presentation/screens/profile.dart)
  • Duplicated block (19 lines × 2) (lib/presentation/screens/products_list.dart)
  • Duplicated block (20 lines × 2) (lib/presentation/screens/login.dart)
  • Duplicated block (21 lines × 2) (lib/presentation/screens/login.dart)
  • Duplicated block (21 lines × 2) (lib/presentation/screens/profile.dart)
  • Duplicated block (26 lines × 2) (lib/application/cart_bloc/cart_state.dart)
  • …and 27 more

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

Survey your own repository

mo7amedaliEbaid/piiicks-ecommerce 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 65ac3e57caf81cf4472edd9bd021589fde66eff4 — 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.