MoatazBadawy/Mawaqeet-Todo_and_Habits
48.8
Weak · 21 September 2026
2.9k
lines of production code
Kotlin
primary language
4
measurements over time
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.