Skip to content
CAI
Software that uses CAICheck a score

mohhamad-esmaili/mindwrite

53.7

Adequate · 20 September 2026

6.7k

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

MindWrite is a cross-platform note-taking application built with Flutter that enables users to create, edit, and organize text and hand-drawn notes. It features local persistence via Hive, supporting core capabilities such as pinning, archiving, deleting, and categorizing notes with labels. The system also provides theming, localization for English and Persian, and image integration, all managed through a BLoC-based architecture.

Features

Add About and Settings screens with theme, language, and feedback options

The app now includes dedicated About and Settings screens. The About screen provides direct links to rate the app on the Bazaar store, view the project on GitHub, and send feedback via email. The Settings screen allows users to toggle between light and dark themes and switch the app language between English and Persian, with changes applied immediately via the shared state management.

_lib/features/shared\bloc/presentation/screens · high confidence

Add signature drawing screen for notes

Users can now add hand-drawn signatures to their notes via a new DrawView screen. This screen integrates a signature pad widget that captures strokes as PNG images. When the user navigates back, the system checks if the drawing is empty (all white/transparent pixels) and, if not, saves the image to the note's drawing list. A clear button is also provided to reset the canvas.

_lib/features/draw\feature · high confidence

Add splash screen with theme and language initialization

A new splash screen has been added to the application. Upon launch, it initializes the app's theme mode and language settings via the SharedBloc and displays the MindWrite logo and app name. After a two-second delay, once the initial state is loaded, the user is automatically navigated to the home screen.

_lib/features/splash\feature · high confidence

Added Persian (Farsi) language support

The app now supports Persian (Farsi) in addition to English. This change introduces the \app\_fa.arb\ localization file with translated strings for UI elements, settings, and feedback, and updates the \AppLocalizations\ delegate to recognize and load the 'fa' locale alongside 'en'.

lib/core/localization · high confidence

Added archive feature state management

Introduced the BLoC components (ArchiveBloc, ArchiveEvent, ArchiveState) for the new archive feature. This adds the ability to retrieve, display, and delete archived notes within the application.

_lib/features/archive\feature/presentation/bloc · high confidence

Added domain layer for note persistence and label editing

The domain layer for the note feature now includes a \NoteRepository\ interface defining the contract for saving notes, along with a \SaveNoteToBoxUsecase\ implementation that handles the actual save operation and error wrapping. Additionally, an empty \EditNoteLabelUsecase\ file has been added, indicating the structural setup for future label editing logic within the domain layer.

_lib/features/note\feature/domain · high confidence

Added generated asset and font accessors via FlutterGen

The application now includes generated Dart code for type-safe access to assets and fonts. This adds a centralized \Assets\ class providing access to images (such as app logos, icons for food, fruit, park, and pool in light/dark themes), fonts (Google Sans and Samim), and localization files (English and Persian), simplifying resource references throughout the app.

lib/core/gen · high confidence

Added permanent deletion capability for notes in the trash

Users can now permanently remove notes from the application. This change introduces a new delete feature module that provides a dedicated trash screen to view deleted notes and a mechanism to permanently erase selected notes or empty the entire trash. The implementation includes the necessary data layer (local database queries), repository, use cases, and a BLoC state management setup to handle loading, success, and failure states for these operations.

_lib/features/delete\feature · high confidence

Added web app entry point and manifest for Flutter web build

The web location now includes the standard Flutter web scaffolding files: \index.html\ serves as the entry point with base href configuration and meta tags for iOS compatibility, while \manifest.json\ defines the Progressive Web App (PWA) metadata including app name, theme colors, and icon assets. These files enable the application to be served and installed as a web app.

web · high confidence

Domain layer for note management and app settings

This change introduces the domain layer for the shared note features, defining the \NoteModelEntity\ with support for labels, pinning, archiving, and palette customization. It establishes the \SharedRepository\ interface and corresponding use cases to handle toggling theme modes, changing application language, and managing note states such as pinning, archiving, restoring, deleting, and updating color palettes.

_lib/features/shared\bloc/domain · high confidence

Initial application structure and core features

The application has been initialized with a complete architecture, replacing the default Flutter template. This includes a clean project structure using the BLoC pattern for state management, dependency injection via GetIt, and local data persistence using Hive. Key features implemented in this location include a Home screen for viewing notes, an Archive screen for managing archived items, and a Delete screen for permanently removing notes. The app also supports theming (light/dark modes), localization (English and Persian), and label management for organizing notes.

lib · high confidence

Initial implementation of local note persistence layer

This change introduces the foundational data layer for the note feature, establishing how notes are stored locally. It adds a \NoteLocalDatasource\ that utilizes Hive to save individual notes to a specific box, and a \NoteRepositoryImp\ that implements the repository interface to handle the actual save operation, wrapping the result in a standard data state for error handling.

_lib/features/note\feature/data · high confidence

Introduce BLoC state management for the note feature

Added the NoteBloc, NoteEvent, and NoteState classes to handle the presentation logic for notes. This implementation manages core note operations including saving notes with unique IDs, updating content (title, description), changing background colors and themes, pinning or archiving notes, and managing drawing assets (adding or removing sketches). It provides the necessary state streams for the UI to reflect changes in note data, saving status, and errors.

_lib/features/note\feature/presentation/bloc · high confidence

Introduce dedicated note editing screen with drawing and label support

Adds the \NoteView\ screen, providing a unified interface for creating and editing notes. This screen supports rich text input for titles and descriptions, integrates a drawing canvas via \NoteDrawSectionWidget\, and displays associated labels. It also handles background customization (colors and images) and includes a dedicated app bar for note actions.

_lib/features/note\feature/presentation/screen · high confidence

The home screen now displays notes in two distinct sections: pinned notes at the top and other notes below. Users can search for notes using the search bar in the app bar, which filters both pinned and regular notes. The home screen also includes a floating action button to create new notes and a bottom navigation bar with options to draw or pick an image.

_lib/features/home\feature/presentation · high confidence

Introduce label management for organizing notes

Users can now create, edit, and delete labels to categorize their notes. This feature includes a dedicated screen for managing label names, a selection interface to attach or remove labels from individual notes, and a view that filters and displays notes associated with a specific label, separating pinned notes from others.

_lib/features/label\feature · high confidence

Introduce shared BLoC for cross-feature state management

A new \SharedBloc\ has been added to centralize state management for features that span multiple screens, including theme mode, app language, note selection, and bulk actions. This component handles events for toggling themes, changing languages, managing multi-select modes (long press/tap), and executing bulk operations such as deleting, restoring, archiving, and pinning notes. It serves as the presentation-layer state hub for these shared capabilities across the application.

_lib/features/shared\bloc/presentation/bloc · high confidence

Introduces Hive-based local storage for notes, themes, and language settings

This change adds the local data persistence layer for the shared features, introducing Hive as the storage backend. Users will now have their notes (including titles, descriptions, labels, pin status, archive state, and custom color palettes) persisted locally via the new \NoteModel\ and \BackgroundModel\ data structures. Additionally, application preferences such as dark mode toggling and language switching (defaulting to Persian) are now saved and retrieved from the local database through the \SharedLocalDatabase\ and \SharedRepositoryImp\ implementations.

_lib/features/shared\bloc/data · high confidence

Introduces persistent color theming and note customization options

The application now supports a configurable color theme with distinct light and dark mode palettes, stored persistently via Hive using a new \ColorAdapter\. A centralized \AppColorConstants\ class defines the UI colors for scaffolds, app bars, and text, while \NoteConstants\ exposes a selection of background colors and image-based themes for individual notes, allowing users to personalize their note-taking experience.

lib/core/utils · high confidence

Introduction of locale-aware theme configuration

A new \ThemeConfig\ class has been added to the core configuration layer to manage application styling. This configuration introduces locale-aware theming, where the font family automatically switches to 'Samim' for Persian ('fa') locales and defaults to 'Google Sans' for other languages. It defines distinct light and dark theme data sets, applying specific color constants for backgrounds, text, and UI components like the app bar, bottom navigation, and floating snack bars to ensure consistent visual presentation across different language settings.

lib/core/config · high confidence

New bottom bar with note customization and management options

The note screen now features a new bottom bar that provides quick access to note customization and management tools. Users can open a menu to attach photos (from camera or gallery) or access the drawing canvas, and open a palette selector to change the note's background color and image themes. Additionally, a three-dot menu allows users to delete the note, make a copy of its content, share it, or assign labels.

_lib/features/note\_feature/presentation/widgets/bottom\section · high confidence

New core UI components and interaction widgets

This update introduces a suite of new reusable widgets in the core library to enhance the app's interface and user interactions. The navigation experience is improved with a new AppDrawer that supports RTL layouts and integrates label filtering. A new MasonaryBuilder widget provides a masonry grid for notes with swipe-to-archive functionality and undo support via Snackbars. The ScreensAppbar now dynamically switches between normal and selection modes, enabling multi-select actions like pinning, archiving, and deleting. Additional utilities include a PopMenuWidget for quick actions, a ShareService for exporting notes, a CameraCapture helper for image insertion, a CircularIndicator for loading states, and a PaletteSelector dialog for changing note colors.

lib/core/widgets · high confidence

New core use-case utilities for theming, clipboard, and date formatting

This change introduces several new core use-case classes in the \lib/core/usecase\ directory to support specific application features. \BackgroundChanger\ now allows the app to dynamically select background colors and images based on the current theme mode (light or dark) via the \SharedBloc\. \CopyClipboardService\ provides a standardized way to copy note content (title and description) to the system clipboard and display a localized success snackbar. \DateFormater\ handles the display of last-edit timestamps, showing relative formats like time, day-month, or full date depending on recency. Additionally, a generic \UseCase\<T, P\>\ abstract base class has been added to standardize the structure of use-case implementations.

lib/core/usecase · high confidence

New note editing UI components for pinning, archiving, and drawing

The note editing interface now includes a dedicated app bar widget that allows users to pin or unpin notes and archive them with an undo option via snackbar. Additionally, a new drawing section widget has been added to display and manage hand-drawn sketches within a note, including the ability to delete individual drawings.

_lib/features/note\feature/presentation/widgets · high confidence

Behavioural changes

Android app renamed to Mind Write and Gradle upgraded to 8.4

The Android application label has been changed from 'mindwrite' to 'Mind Write', and the build system has been upgraded to Gradle 8.4. Additionally, the app now declares permissions to read external storage and registers intent queries for the Bazaar and Myket app stores, enabling compatibility with these specific Android marketplaces.

android · high confidence

Introduce GoRouter-based navigation with animated transitions

The application's navigation system has been replaced with a centralized routing configuration using the GoRouter library. This change defines specific routes for core features including the splash screen, home view, note creation/editing, archive, delete, and label management. A key user-facing improvement is the addition of consistent scale animations for all page transitions, providing a smoother visual experience when navigating between screens.

lib/core/routes · high confidence

Updated iOS app icon and launch screen background

The iOS app icon has been replaced with a new set of assets, and the launch screen now displays a custom background image behind the launch image. This change is supported by adding a new LaunchBackground asset, updating the LaunchScreen storyboard to include the background view, and adding a configuration to ensure the status bar remains visible during launch.

ios · high confidence

Test coverage

Removed default Flutter counter widget test

The boilerplate smoke test for the default Flutter counter widget has been removed from the test suite. This cleanup eliminates the test that previously verified the initial counter state and increment behavior, reflecting a shift away from the default application template.

test · high confidence

Dependencies

Android build configuration and Flutter dependency updates

The Android build configuration now targets SDK 34 and configures release signing using a keystore, replacing the previous debug-only signing setup. The project's dependencies have been updated to include Bloc state management, Hive for local storage, GoRouter for navigation, and various UI and utility packages, while dev dependencies were refreshed to support code generation and linting.

(dependencies) · high confidence

Housekeeping

Project initialization and documentation update

The repository has been initialized with a new project structure, including the addition of an MIT License file and an updated README that introduces the 'MindWrite' application, lists its Flutter dependencies (such as Bloc, Hive, and GoRouter), and outlines available features like drawing, archiving, and labeling. Additionally, the .gitignore file was updated to include the .vscode directory, and the Flutter project metadata was refreshed to reflect the current stable channel revision.

(repo-wide) · 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 49 → 54 (+5.2)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 97 → 91 (-5.7)
  • Architecture 100 → 96 (-3.6)
  • Maturity 37 → 45 (+8.1)
  • Readiness 24 → 33 (+9.1)
  • Security 100 → 100 (+0.0)
  • 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
  • Test reliability not included
  • TooManyMethods: AppLocalizations (lib/core/localization/app_localizations.dart)
  • complexity unreadable for .dart, .swift — churn × complexity hotspots could not be measured
  • single-maintainer — knowledge-concentration (bus factor) risk

New (36)

  • 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/features/note_feature/presentation/widgets/bottom_section/attach_widget.dart)
  • Duplicated block (12 lines × 2) (lib/features/shared_bloc/presentation/bloc/shared_bloc.dart)
  • Duplicated block (13 lines × 2) (lib/features/label_feature/presentation/screens/label_selection.dart)
  • Duplicated block (20 lines × 2) (lib/features/archive_feature/presentation/screens/archive_view.dart)
  • Duplicated block (21 lines × 2) (lib/core/config/theme_config.dart)
  • Duplicated block (23 lines × 2) (lib/features/note_feature/presentation/widgets/bottom_section/attach_widget.dart)
  • Duplicated block (28 lines × 2) (lib/features/shared_bloc/presentation/screens/settings_view.dart)
  • Duplicated block (6 lines × 4) (lib/features/shared_bloc/data/data_source/shared_local_database.dart)
  • Duplicated block (8 lines × 2) (lib/features/shared_bloc/presentation/bloc/shared_bloc.dart)
  • Duplicated block (9 lines × 3) (lib/features/archive_feature/data/repository/archive_repository_imp.dart)
  • Hotspot: lib/features/note_feature/presentation/widgets/bottom_section/palette_widget.dart (lib/features/note_feature/presentation/widgets/bottom_section/palette_widget.dart)
  • Hotspot: lib/features/shared_bloc/presentation/bloc/shared_bloc.dart (lib/features/shared_bloc/presentation/bloc/shared_bloc.dart)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (lib/features/shared_bloc/data/data_source/shared_local_database.dart)
  • MethodTooLong: AppDrawer.build (lib/core/widgets/app_drawer.dart)
  • MethodTooLong: NoteViewState.build (lib/features/note_feature/presentation/screen/note_screen.dart)
  • MethodTooLong: PaletteButtonWidget.build (lib/features/note_feature/presentation/widgets/bottom_section/palette_widget.dart)
  • MethodTooLong: SettingsView.build (lib/features/shared_bloc/presentation/screens/settings_view.dart)
  • …and 16 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

mohhamad-esmaili/mindwrite 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 6f24d56489047361e2882844e1561050a6543fd6 — 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.