Skip to content
CAI
Software that uses CAICheck a score

MoatazBadawy/Mawaqeet-Todo_and_Habits

48.8

Weak · 21 September 2026

2.9k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a mobile application designed for personal productivity, specifically focused on tracking daily habits and managing to-do lists. It provides users with the ability to create, edit, and monitor habits and tasks, with local data persistence and automated daily resets for habits. The app also includes background notification services to remind users about their habits at specific times.

Features

Add UI components and navigation for the Habits feature

The app now includes the complete UI layer for the Habits feature. This introduces a new navigation graph with routes for listing habits, adding a new habit, and editing an existing one. The view layer provides reusable Compose components including a toolbar, habit items with checkboxes, type filter chips, and screens for adding and editing habits via dialogs. It also includes empty and error state components for the main list.

habits/ui/view/src/main · high confidence

Added Hilt dependency injection modules for database and repositories

New Hilt modules have been introduced to configure dependency injection for the app's data layer. DatabaseModule provides the Room database instance and DAOs for habits and todos, while RepositoryModule binds the repository interfaces to their concrete implementations, enabling the app to resolve these dependencies via Dagger-Hilt.

app/src/main/java/com/moataz/mawaqeet/di · high confidence

Added ProGuard and build ignore configurations for the habits module

The habits module's data, domain, and UI subdirectories now include .gitignore files to exclude build artifacts and ProGuard configuration files (consumer-rules.pro, proguard-rules.pro) to ensure clean builds and proper code shrinking.

habits · high confidence

Added build configuration files for the Todos feature modules

Added .gitignore, consumer-rules.pro, and proguard-rules.pro files to the todos domain, data, and UI modules. These files configure build artifacts to be ignored and provide default ProGuard rules for code shrinking and obfuscation across the application's architecture layers.

todos · medium confidence

Added domain use cases for managing todos

The application now includes five new domain use cases that handle core todo operations: creating new todos (InsertTodoUseCase), retrieving the full list (GetAllTodosUseCase), and updating either the title or completion status of existing todos (UpdateTodoTitleUseCase, UpdateTodoCompletedUseCase), as well as deleting todos (DeleteTodoUseCase). These use cases act as the primary interface for the rest of the app to interact with the todo repository.

todos/domain/usecases/src · high confidence

Added habits data repository implementation

The habits data module now includes a concrete HabitsRepositoryImpl that implements the HabitsRepository interface, providing methods to insert, retrieve, update, and delete habits, along with a mapper for converting between domain entities and local database entities.

habits/data/repositories · high confidence

Added local data layer for todos using Room

Introduced a new local data module for storing todo items. This includes a TodoEntity mapped to a Room database table, a TodosDao interface for database operations (insert, delete, update, and query all todos), and supporting constants. The entity uses 'title' for the todo's text, and the DAO provides methods to manage individual todos and retrieve all todos ordered by completion status.

todos/data/local · high confidence

Added morning and night habit alert notifications

The app now sends daily push notifications to remind users about their habits. A new BootReceiver registers alarms that trigger at 6:00 AM and 10:00 PM respectively. Each notification displays a title and description from the app's resources, links back to the main activity, and uses dedicated notification channels for morning and night alerts.

app/src/main/java/com/moataz/mawaqeet/components · medium confidence

Initial implementation of the Todos data repository

Added the core data layer for the Todos feature, introducing a new \TodosRepositoryImpl\ that implements the \TodosRepository\ interface. This implementation handles data operations such as inserting, retrieving, updating, and deleting todos by mapping between domain entities and local database DAOs. The change also includes a \TodosMapper\ for entity conversion and adds standard Android unit and instrumented test scaffolding for the repository module.

todos/data/repositories · high confidence

Introduce Habit domain entity and default reset date constant

Added the Habit data class in the habits domain entities, defining the core attributes (id, name, type, completion status, and next reset date). Also introduced the HabitsConstants object to provide a default next reset date for habits, establishing the foundational data model for habit tracking.

habits/domain/entities · high confidence

Introduce Habits UI ViewModel and supporting models

Added new viewmodels (HabitAddingViewModel, HabitEditingViewModel, HabitsViewModel) and supporting data classes (HabitUI, HabitsUIState, HabitType) to manage the state and logic for the habits feature. This includes handling habit creation, editing, and listing, as well as mapping domain entities to UI models.

habits/ui/viewmodel · high confidence

Introduce HabitsRepository interface for habit data operations

A new HabitsRepository interface has been added to the habits domain layer, defining the contract for habit persistence. This interface exposes methods to insert, delete, and retrieve habits, including retrieving all habits, filtering by type via a Flow, and updating habit status or name.

habits/domain/repository · high confidence

Introduce Todo domain entity

A new Todo domain entity has been added, defining the core data structure with an id, title, and completion status. This establishes the foundational model for todo items within the application's domain layer.

todos/domain/entities · high confidence

Introduce ViewModel layer for Todo management

Added the ViewModel layer for the Todo feature, including \TodosViewModel\ for listing and updating todos, \TodoAddingViewModel\ for creating new todos, and \TodoEditingViewModel\ for editing and deleting existing todos. The implementation uses \StateFlow\ for state management, \SavedStateHandle\ for navigation arguments, and includes a \TodoUI\ data class with mappers to convert between domain entities and UI models.

todos/ui/viewmodel · high confidence

Introduce common data layer with Room database and migrations

The common/data module now provides a shared data layer using the Room database. This includes the main database class (MawaqeetDatabase) configured for version 2, which manages entities for habits and todos, along with their respective DAOs. The update adds a database migration to create the todos table, implements a TypeConverter for Date/Long timestamp conversion, and includes the necessary Android manifest and ProGuard rules for the new module.

common/data · high confidence

Introduce local storage for habits via Room

Added a new local data layer for habits, including the HabitEntity, HabitsDao, and associated utilities, enabling the app to store and retrieve habit data locally using Room. This introduces the capability to manage habits in the local database, supporting operations like inserting, deleting, updating, and querying habits by type or completion status.

habits/data/local · high confidence

Introduce main app navigation with bottom bar and in-app update

Users now see a main screen with a bottom navigation bar for switching between the Habits and Todos sections, with the Habits screen set as the default start destination. The app also triggers an immediate in-app update flow if an update is available, and displays a rating dialog after a few launches. Additionally, morning and night habit alert notifications are initialized on startup.

app/src/main/java/com/moataz/mawaqeet/main · high confidence

New habit management use cases for daily resets and CRUD operations

The habits domain now includes new use cases that enable core habit management capabilities. Users can now create new habits, update their names and completion status, and delete them. Additionally, a new daily reset mechanism automatically marks all habits as incomplete and schedules them for the next day at 3:00 AM, ensuring habits repeat daily. These changes introduce the backend logic required for the habit editing dialog and screen states.

habits/domain/usecases/src · high confidence

Behavioural changes

Introduces the TodosRepository interface for todo data operations

A new TodosRepository interface is added to the domain layer, defining the contract for todo data operations including inserting, deleting, updating titles, and retrieving all todos as a Flow. This establishes the repository abstraction for managing todo entities.

todos/domain/repository · high confidence

Introduction of Hilt dependency injection and removal of legacy MainActivity

The app now utilizes Hilt for dependency injection, indicated by the addition of a Hilt-annotated Application class. Concurrently, the previous MainActivity implementation has been removed, signaling a shift in the app's architecture towards a more modern, DI-driven structure.

app/src/main/java/com/moataz/mawaqeet · medium confidence

Todos UI migrated to Jetpack Compose

The todos interface has been rebuilt using Jetpack Compose, replacing the previous XML-based implementation. This change introduces a new navigation graph for managing the todos, add, and edit screens, and replaces the old list rendering with a Compose-based TodoItem component that supports long-press editing and checkbox toggling. The update also adds a trailing clear icon to the add and edit text fields, and includes a bottom padding fix to ensure the last items in the list are not hidden by the bottom navigation bar.

todos/ui/view · high confidence

Test coverage

Added Android instrumented test for the habits UI view module; Added unit test for the todos view.

Dependencies

Migrated to modern Android build system and modularized architecture

The project has been upgraded to Android Gradle Plugin 8.2.2 and Kotlin 1.9.21, enabling the use of KSP and Compose. The app has been restructured into a modular, layered architecture (data, domain, UI) for both 'habits' and 'todos' features, with each module defining its own dependencies for libraries like Hilt, Room, and Jetpack Compose. Additionally, the app module was updated to target SDK 34, enabled multi-Dex, and integrated new dependencies for in-app ratings and background work.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 8.2

The project's Gradle wrapper has been updated from version 7.5 to 8.2, which will be used to build the application going forward.

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

Lenses

  • Code Health 96 → 98 (+1.5)
  • Architecture 100 → 95 (-5.1)
  • Maturity 53 → 53 (+0.0)
  • Readiness 24 → 26 (+1.4)
  • Security 100 → 100 (+0.0)
  • Domain Modelling 100 → 70 (-30.3)

Resolved (19)

  • 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 × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitsEmpty.kt)
  • Duplicated block (13 lines × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (14 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (14 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (14 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitItem.kt)
  • Duplicated block (15 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitItem.kt)
  • Duplicated block (16 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (16 lines × 2) (todos/ui/view/src/main/java/com/moataz/todos/ui/view/screens/todo_add/TodoAddScreen.kt)
  • Duplicated block (17 lines × 3) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (19 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_edit/HabitEditScreen.kt)
  • Duplicated block (20 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (7 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (7 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (9 lines × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • No exposed public API
  • Test reliability not included
  • single-maintainer — knowledge-concentration (bus factor) risk

New (18)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Duplicated block (10–11 lines × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (14 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitItem.kt)
  • Duplicated block (14 lines × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (15 lines × 4) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitsEmpty.kt)
  • Duplicated block (16 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (16 lines × 3) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (17 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (19 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_edit/HabitEditScreen.kt)
  • Duplicated block (21 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Duplicated block (25 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitItem.kt)
  • Duplicated block (38 lines × 2) (todos/ui/view/src/main/java/com/moataz/todos/ui/view/screens/todo_add/TodoAddScreen.kt)
  • Duplicated block (49 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (6 lines × 2) (app/src/main/java/com/moataz/mawaqeet/components/notification/HabitAlertMorningNotification.kt)
  • Duplicated block (6 lines × 2) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/component/HabitsEmpty.kt)
  • Near-duplicate member family (4 members, 24 shared lines) (habits/ui/view/src/main/java/com/moataz/habits/ui/view/screens/habit_add/HabitAddingDialogScreen.kt)
  • 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

MoatazBadawy/Mawaqeet-Todo_and_Habits 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 1741defe7efc5d6523342145194b63cabcf53f9f — 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.