Skip to content
CAI
Software that uses CAICheck a score

imSanjaySoni/NoteApp-Clean-Architecture

53.5

Weak · 21 September 2026

2.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 cross-platform note-taking application built with Flutter, featuring a modular architecture that manages notes and their associated todo lists. It utilizes the BLoC pattern for state management and Hive for local data persistence, supporting full CRUD operations, batch deletion, and device-agnostic UI extensions. The system enforces modern platform requirements for iOS and macOS while providing a structured domain layer for note and todo management.

Features

Add device type detection and string utility extensions

Users can now detect device types (mobile, tablet, desktop) via the new BuildContext extension, and perform string operations such as checking for non-empty strings or clipping strings to a maximum length via the updated String extension.

lib/common/extension · high confidence

Introduce local database implementation using Hive

Added a new local database implementation for the note application, utilizing the Hive library for persistent storage. This change introduces a concrete class that implements the domain's Database interface, providing methods to get, getAll, addUpdate, delete, and deleteAll records from the local storage.

lib/data/local · high confidence

Behavioural changes

Add Todo model and enhance Note DTO with serialization and persistence support

The NoteDto class has been significantly expanded to support full serialization and deserialization via Hive, including fields for color, dateTime, and a list of todos. A new TodoDto model has been introduced to handle individual todo items, featuring conversion methods between domain and DTO representations. The NoteDto now includes a copyWith method for immutable updates and implements Comparable to allow sorting by date. These changes enable persistent storage and retrieval of notes and their associated todos.

lib/data/dto · medium confidence

Database interface expanded with CRUD operations

The database abstraction now supports full data management capabilities. Users can retrieve single or all items, delete by key or list of keys, and add or update records. This replaces the previous empty Database class with a functional interface for data persistence.

lib/domain/database · high confidence

Implement NoteRepository with database integration

The NoteRepository implementation is now fully realized, replacing previous stub methods with actual database operations. The repository now accepts a Database dependency via constructor injection (using Injectable's LazySingleton) and implements addUpdateNote, deleteNote, deleteMultiNotes, getAllNotes, and getNote by delegating to the underlying database layer.

lib/data/repository · medium confidence

Introduces BLoC lifecycle logging and registers new BLoCs for note management

Adds a custom BLoC observer (MyBlocObserver) that logs creation, state changes, errors, and disposal of BLoC instances to aid debugging. In the application entry point, the global BLoC observer is assigned to track these lifecycle events. Additionally, the app's dependency injection is updated to provide instances of HomeBloc, AddUpdateFormBloc, AddUpdateBloc, NoteActionBloc, NoteDetailBloc, and MultipleDeleteBloc, replacing previous manual or default instantiation patterns.

lib · medium confidence

Note model now supports a list of Todo items

The Note domain model has been refactored using the freezed package to support a new Todo feature. Notes now contain a list of Todo items, each with a title, id, and completion status. This enables users to add and manage tasks within their notes.

lib/domain/model · high confidence

Note repository interface updated to use String IDs and batch deletion

The NoteRepository interface was modified to change the type of the note identifier from int to String for both single and multiple note operations. Specifically, the getNote and deleteNote methods now accept String IDs instead of int, and a new deleteMultiNotes method was added to support batch deletion of multiple notes by their string identifiers.

lib/domain/repository · high confidence

Refactor Add/Update Note and Home screens with new BLoC architecture

The Add/Update Note screen now uses a dedicated \AddUpdateFormBloc\ to manage title, description, color, and todo list state, allowing users to create or edit notes with inline todo support. The Home screen introduces a \MultipleDeleteBloc\ to enable multi-select and batch deletion of notes. Additionally, the Note Detail screen now uses a \NoteDetailBloc\ to handle fetching note data and toggling todo checkboxes. These changes replace the previous monolithic BLoC and state management patterns with a more modular, feature-specific architecture.

lib/presentation · high confidence

Refactored note use cases with improved error handling and validation

The note domain use cases have been refactored to provide more specific user-facing error messages. The GetNoteUsecase and ShowNotesUsecase now catch NoRecordsException to display friendly messages like 'No matched note found' or 'No notes found', rather than generic failures. The AddNoteUsecase and UpdateNoteUsecase now validate that the note title is not empty, returning a specific error if it is. The ShowNotesUsecase also sorts the returned list of notes. A new DeleteMultipleNotesUsecase has been added to handle batch deletion of notes.

lib/domain/usecase · high confidence

Update web/index.html to use self-closing tags and modern JavaScript syntax

The web entry point has been updated to use self-closing syntax for HTML meta and link tags, and the embedded JavaScript has been modernized to use double quotes and arrow functions. These changes improve HTML validity and align the code with modern JavaScript standards.

web · high confidence

Updated macOS build configuration and plugin registration

The macOS project now targets macOS 10.14 or later, requiring a minimum OS version increase from 10.11. The \GeneratedPluginRegistrant.swift\ file has been updated to import \path\_provider\_foundation\ instead of \path\_provider\_macos\, reflecting a change in the underlying plugin implementation. Additionally, the Xcode project has been upgraded to version 1430 (matching the \LastUpgradeVersion\ in the scheme), and the workspace has been configured to include the \Pods\ group and framework references for CocoaPods integration.

macos · medium confidence

iOS minimum deployment target raised to iOS 11

The iOS minimum deployment target has been updated from 9.0 to 11.0, meaning the app will no longer support devices running iOS 9 or 10. Additionally, the Xcode project file was upgraded to version 54, and the app's bundle identifier and name were changed from 'note\_app' to 'noteapp' in the iOS configuration files.

ios · high confidence

Dependencies

Upgrade Flutter dependencies and update platform requirements

The project has been upgraded to Flutter 3.19.2, with the SDK constraint raised to '\>=3.2.0 \<4.0.0'. Most notably, the 'animate\_do' package was replaced with 'flutter\_animate' for animations. Other dependencies, including 'auto\_route', 'flutter\_bloc', 'get\_it', and 'google\_fonts', were updated to newer versions. On the native side, the iOS minimum platform version was raised from 9.0 to 11.0, and the macOS minimum version was raised from 10.11 to 10.14.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 49 → 54 (+4.9)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-0.8)
  • Architecture 100 → 96 (-4.1)
  • Maturity 30 → 42 (+12.1)
  • Readiness 33 → 33 (+0.0)
  • Security 87 → 99 (+12.2)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (7)

  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No exposed public API
  • complexity unreadable for .dart, .kt, .swift — churn × complexity hotspots could not be measured
  • single-maintainer — knowledge-concentration (bus factor) risk

New (13)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (13 lines × 2) (lib/domain/usecase/add_note_usecase.dart)
  • Duplicated block (15 lines × 2) (lib/presentation/screens/add_update_note/bloc/add_update_bloc.dart)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium: security finding (details withheld)
  • No ADRs found
  • No dependency advisory monitoring
  • TodoComment (lib/presentation/screens/add_update_note/bloc/add_update_form/add_update_form_bloc.dart)
  • TodoComment (lib/presentation/screens/add_update_note/widgets/todo_tile.dart)
  • Workflow token permissions not restricted

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

Survey your own repository

imSanjaySoni/NoteApp-Clean-Architecture 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 4963b7cda1ebe23b59aea076caef5f3d33ea8069 — 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.