IsaiasCuvula/quote_generator
44.8
Weak · 21 September 2026
6.1k
lines of production code
Dart
primary language
4
measurements over time
What this system is
This is a Flutter-based mobile application for creating, managing, and sharing text-based quotes. It supports user authentication via Google Sign-In and allows users to generate, edit, and search quotes with customizable styling options. The system features a discovery feed for browsing and interacting with quotes, a download capability for saving quote images, and a profile section for managing favorites and settings. The architecture is modular, separating domain, data, and presentation layers with clean architecture principles.
Features
Added English and Portuguese localization files for the app
The app now includes translation resources for English and Portuguese, enabling users to see the interface in their preferred language. The new files define strings for the navigation bar, app bar, alerts, quote creation, search, and general settings in both languages, supporting a localized user experience.
lib/config/l10n · high confidence
Added Google Sign-In authentication flow
Introduced the complete presentation layer for authentication, including the AuthScreen with a Google Sign-In button, state management via Riverpod providers (AuthNotifier, AuthState), and a stream provider for Firebase auth state changes. This enables users to sign in using their Google account.
lib/features/auth/presentation · high confidence
Added SearchQuote use-case and provider
Introduced the SearchQuote use-case class and its corresponding Riverpod provider, enabling the application to search for quotes via the quote repository.
_lib/features/quote/domain/usecases/search\quote · medium confidence
Added auth state changes and sign-out use cases
The application now exposes domain-level use cases for managing authentication state and signing out. The new \AuthStateChangesUseCase\ wraps the underlying repository to stream authentication state changes, while the \SignOutUseCase\ provides a dedicated method to trigger the sign-out process. Both are registered in the dependency injection layer via Riverpod providers, making these capabilities available for use in the rest of the application.
_lib/features/auth/domain/usecases/auth\_state\_changes, lib/features/auth/domain/usecases/sign\out · high confidence
Added discovery and quote detail screens
Users can now browse a list of quotes on the new Discovery screen, which supports pull-to-refresh and displays an empty state when no quotes are available. Tapping a quote card navigates to a new Detail screen that presents the full quote text, author, and styling options, along with actions to share or delete the quote.
lib/features/discovery/presentation/screens · high confidence
Added discovery feed quote card and interactive widgets
Users can now view and interact with quotes in the discovery feed. A new RemoteQuoteCard widget displays quote details, including the author's name and the quote text. The card includes interactive elements: a like/dislike button that updates the user's like status, a favorites counter showing the total likes, and buttons to copy, share, or download the quote. This replaces the previous static or placeholder UI with a fully functional, interactive card component for the discovery feature.
lib/features/discovery/presentation/widgets · high confidence
Added domain use cases for the discovery feature
The app now includes domain-layer use cases for the discovery feature, enabling users to retrieve all quotes, fetch a specific quote by ID, retrieve user information, and submit new quotes. These new use cases are wired via Riverpod providers, allowing the rest of the application to access these capabilities.
(repo-wide) · high confidence
Added download feature to save quote images to device
Users can now download and save generated quote images to their device's gallery. This change introduces a new 'download' feature module containing the domain entities (QuoteImage), repository implementations for capturing the widget as an image and saving it via the device's gallery saver, and presentation components including a DownloadButton widget and state management providers to handle the save flow and display success/error messages.
lib/features/download · high confidence
Added quote domain usecases
Introduced a new set of domain usecases for managing quotes, including operations to add, delete, retrieve by ID, list, search, and update quotes. These usecases are now exported from the domain layer, enabling the application to perform core quote-related business logic.
lib/features/quote/domain/usecases · high confidence
Added use cases for tracking and performing quote likes
The discovery feature now includes domain use cases for checking if a user has liked a specific quote and for submitting like/dislike actions. The \HasLikedQuote\ use case queries the remote repository to return a stream indicating whether a specific user has liked a quote, while the \LikeDislikeQuote\ use case handles the submission of like/dislike interactions. Both are wired into the application via Riverpod providers, enabling the UI to react to like status changes and to trigger like/dislike operations.
_lib/features/discovery/domain/usecases/has\_liked\_quote, lib/features/discovery/domain/usecases/like\_dislike\quote · high confidence
Adds discovery feature providers for quote management
The discovery feature now includes a set of Riverpod providers to handle quote-related operations in the UI layer. This includes fetching and displaying all quotes, retrieving individual quotes by ID, and managing user interactions such as liking, disliking, and deleting quotes. Additionally, it provides utilities for tracking quote likes count and fetching user information, enabling the discovery feed to interact with the backend services.
lib/features/discovery/presentation/providers · medium confidence
App entry point and configuration
The application's main entry point (lib/app/app.dart) has been introduced, establishing the root Flutter widget that configures the app's theme, localization (English and Portuguese), and routing. This change consolidates the app's initial setup, including the integration of a locale provider for language selection and a theme provider for light/dark mode, while also setting up the router for navigation.
lib/app · high confidence
Implemented QuoteRepository with local data source integration
The application now uses a new QuoteRepositoryImpl that bridges the domain layer with the local data source. This implementation handles quote operations (add, delete, get by ID, get all, update, and search) by mapping between Quote entities and models, and returns standardized success or failure results for each operation.
lib/features/quote/data/repositories · high confidence
Implemented data layer for the Discovery feature
The Discovery feature now includes a complete data layer, introducing a remote quote repository and datasource backed by Cloud Firestore. This enables users to view a feed of quotes, post new quotes, and interact with the content through real-time like and dislike functionality. The implementation includes domain entities, repository interfaces and their concrete implementations, mappers for data transformation, and provider wiring for dependency injection.
lib/features/discovery/data · high confidence
Introduce Quote domain entity
Added a new Quote entity in the domain layer, representing a quote with properties for text, author, styling (alignment, background color, font size, weight, spacing, and letter spacing) and a favorite flag. The entity includes an optional ID, implements value-based equality via Equatable, and provides an immutable copyWith method for safe updates.
lib/features/quote/domain/entities · high confidence
Introduce data layer for authentication
The application now includes a new data layer for authentication, implementing Google Sign-In and sign-out functionality via Firebase. This adds the necessary data sources, repositories, and domain interfaces to handle user authentication state and credentials.
lib/features/auth/data · high confidence
Introduce domain use cases for capturing and saving quote images
The download feature now includes dedicated domain use cases for capturing a quote widget as an image and saving that image to the device. A new \CaptureQuoteWidget\ use case wraps the repository's \captureQuoteWidget\ method, while a \SaveImageUseCase\ handles device storage via \saveQuoteImageToDevice\. Each use case is wired into the app's dependency injection via Riverpod providers, enabling the UI layer to trigger image capture and subsequent saving operations.
_lib/features/download/domain/usecases/capture, lib/features/download/domain/usecases/save\image · high confidence
Introduce local quote storage via SQLite datasource
The app now stores quotes locally on the device using a new SQLite-based datasource. Users can add, update, delete, and search for their saved quotes, with all data persisted in a local database and accessed through a dedicated provider for dependency injection.
lib/features/quote/data/datasource · high confidence
New bottom navigation and profile feature
The app now features a bottom navigation bar with five tabs: Created by You, Discovery, Search, Favorites, and Settings. Additionally, a new Profile screen has been added, allowing users to view their profile information and sign out. The Settings screen includes options to change the app's language and toggle between light and dark modes.
(repo-wide) · high confidence
New quote management providers for the presentation layer
The application now exposes a comprehensive set of Riverpod providers to manage quote data and user preferences. This includes stateful notifiers for creating, updating, and deleting quotes, as well as fetching all quotes, specific quotes by ID, and favorite quotes. Additionally, a dedicated provider manages text styling settings (font, color, alignment), allowing the UI to reactively update quote appearance based on user configuration.
lib/features/quote/presentation/providers · high confidence
New quote management screens: create, search, favorites, and details
The app now includes dedicated screens for creating new quotes, searching through existing quotes, viewing favorite quotes, and viewing individual quote details. The 'Create Quote' screen allows users to compose and save new quotes, while the 'Created by You' screen displays all user-generated quotes with a profile icon fallback when no image is available. The 'Favorites' screen shows all favorited quotes, and the 'Quote Details' screen provides a detailed view of a specific quote. A new 'Search' screen enables users to find quotes by text. All screens are exported via a new barrel file for easier imports.
lib/features/quote/presentation/screens · high confidence
New quote presentation widgets and UI components
The quote feature's presentation layer has been expanded with new UI components. A \QuoteDetailBody\ widget now provides a detailed view of a quote, including favorite, share, post, and delete actions. The \QuoteCard\ widget has been enhanced to include a \CardFooter\ with favorite, copy, share, and download buttons. Additional widgets include \ListOfQuotes\ for displaying a list of quotes, \SearchTextField\ for search functionality, and \ColorPickerPalette\ for color selection. An \EmptySearchQuoteScreen\ is also added to handle empty search states.
lib/features/quote/presentation/widgets · high confidence
New quote text customization options
The quote settings screen now includes controls for text alignment, font weight, font size, letter spacing, and word spacing, allowing users to adjust the appearance of their quotes. A new background color picker has also been added to the settings panel.
_lib/features/quote/presentation/widgets/quote\_settings\widgets · high confidence
Quote data mapping between model and entity layers
A new QuoteMapper class has been added to the quote feature's data layer, providing bidirectional mapping between the Quote entity and QuoteModel. The mapper converts fields such as quoteText, author, textAlign, backgroundColor, fontSize, fontWeight, wordSpacing, letterSpacing, and isFavorite between the domain model and the data model.
lib/features/quote/data/mapper · high confidence
Removals
Removed macOS native application layer
The macOS native application layer has been removed, including the Xcode project configuration, Swift entry points (AppDelegate, MainFlutterWindow), and all associated build configuration files (xcconfig, entitlements, and Info.plist). This eliminates the native macOS build target, indicating a shift away from the native macOS implementation.
macos · high confidence
Removed native Linux and Windows build configurations
The native build configurations for the Linux and Windows platforms have been removed. This includes all CMakeLists.txt files, generated plugin registrants, and runner source files (such as main.cc, my\_application.cc, and win32\_window.cpp). As a result, the application can no longer be built or run natively on Linux and Windows environments.
linux, windows · high confidence
Behavioural changes
App initialization refactored to support Firebase and state management
The application entry point has been restructured to initialize Firebase and shared preferences before launching the app. The default Flutter demo application has been replaced with a new 'QuoteGeneratorApp' wrapped in a 'ProviderScope' for state management, indicating a shift to a more complex architecture supporting background services and persistent storage.
lib · high confidence
Consolidate config exports into a single barrel file
The lib/config directory now exposes a unified entry point (config.dart) that re-exports localizations, navigation, and theme modules. This barrel file simplifies imports for consumers of the config layer, allowing a single import statement to access all configuration-related components.
lib/config · high confidence
Introduce quote repository interface and provider
Users can now interact with the quote feature through a clearly defined repository layer. This change introduces the \QuoteRepository\ interface, which defines methods for adding, retrieving, updating, deleting, and searching for quotes. Additionally, a Riverpod provider (\quoteRepositoryProvider\) is added to wire the repository implementation to the local data source, enabling dependency injection for the quote feature's domain logic.
lib/features/quote/domain/repositories · high confidence
Introduced QuoteModel data class with Equatable support
Added a new QuoteModel class in the quote feature's data layer, replacing the previous Freezed-based implementation with an Equatable-based model. The model now includes fields for quote text, author, text alignment, background color, font size, font weight, word spacing, letter spacing, and favorite status, with JSON serialization and copy-with functionality.
lib/features/quote/data/models · high confidence
Introduces Clean Architecture use cases for quote management
The application now implements a clean architecture structure for managing quotes, introducing new use cases for adding, deleting, retrieving by ID, retrieving all, and updating quotes. Each operation is encapsulated in its own use case class (AddQuote, DeleteQuote, GetQuoteById, GetQuotes, UpdateQuote) and wired via Flutter Riverpod providers, enabling a more modular and testable codebase.
(repo-wide) · high confidence
Modularized auth and discovery features
The auth and discovery features have been restructured into a modular architecture, each exposing a main barrel file that exports data, domain, and presentation layers. This change organizes the codebase by separating concerns within each feature, making the code easier to navigate and maintain.
lib/features/auth, lib/features/discovery · medium confidence
New app theme configuration and theme management
The app introduces a comprehensive theming system, defining light and dark mode styles for app bars, color schemes, text, and dimensions. A new \ThemeNotifier\ using Riverpod manages the current theme state, allowing users to switch between light and dark modes, with the preference persisted in shared preferences.
lib/config/theme · high confidence
New core architecture and UI components for quote management
The app's core layer has been restructured to support a cleaner, modular architecture. This includes new constants for Firebase collections and field names, along with a dedicated error handling system featuring a \Failure\ class and user-facing error messages. The update introduces a base \UseCase\ and \StreamUseCase\ interface for business logic, as well as utility classes for app alerts, shared preferences, and data types. On the UI side, reusable widgets have been added, including a nested scroll view with a floating app bar, a loading screen, an empty state card, and specific quote card components (body text, copy button, and share button) that integrate with the new core utilities.
lib/core · high confidence
Quote data layer reorganized into modular subdirectories
The quote feature's data layer has been restructured into dedicated subdirectories for models, datasources, repositories, and mappers. This change improves code organization and maintainability by grouping related components, making it easier to locate and manage quote-related data logic.
lib/features/quote/data · medium confidence
Removed iOS app configuration file
The Info.plist file, which previously defined core iOS app settings such as the bundle name, display name, and supported interface orientations, has been removed from the project.
ios/Runner · high confidence
Removed legacy web entry point and manifest files
The default web entry point (index.html) and the web app manifest (manifest.json) have been removed from the web directory. This eliminates the standard Flutter web scaffolding, meaning the application will no longer load via the traditional HTML/JS bootstrap process that initializes the Flutter engine.
web · high confidence
Reorganized quote feature into a modular structure
The quote feature has been refactored to improve modularity and maintainability. The feature is now split into distinct layers: presentation, data, and domain. The presentation layer is further organized into providers, widgets, and screens, each with their own barrel files for clean exports. This change makes it easier to navigate and maintain the codebase by separating concerns and reducing coupling between layers.
lib/features/quote/presentation · medium confidence
iOS project upgraded to Xcode 14.3 and targets iOS 13.0
The iOS project configuration has been updated to target iOS 13.0, replacing the previous 11.0 deployment target. The project file and scheme have been upgraded to Xcode 14.3, and the workspace now includes the Pods framework, enabling proper CocoaPods integration for the app.
ios/Runner.xcodeproj · high confidence
Test coverage
Removal of default Flutter widget test
The default 'Counter increments smoke test' in test/widget\_test.dart has been removed. This eliminates the boilerplate test that previously verified a counter widget's behavior, indicating a shift away from the initial project template's test coverage.
test · 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 41 → 45 (+3.4)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 99 (-0.9)
- Architecture 96 → 91 (-5.7)
- Maturity 27 → 39 (+12.3)
- Readiness 15 → 17 (+1.9)
- Security 97 → 100 (+3.3)
- Domain Modelling 100 → 100 (+0.0)
Resolved (15)
- Boundary-crossing change coupling: bottom_nav_bar_shell.dart ↔ screens.dart (lib/config/navigation/bottom_navigation/bottom_nav_bar_shell.dart)
- Boundary-crossing change coupling: dimensions.dart ↔ screens.dart (lib/config/theme/dimensions.dart)
- Boundary-crossing change coupling: routes.dart ↔ screens.dart (lib/config/navigation/routers/routes.dart)
- Change coupling: created_by_you_screen.dart ↔ favorites_screen.dart (lib/features/quote/presentation/screens/created_by_you_screen.dart)
- Change coupling: letter_spacing_selector.dart ↔ text_font_weight_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/letter_spacing_selector.dart)
- Change coupling: letter_spacing_selector.dart ↔ text_size_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/letter_spacing_selector.dart)
- Change coupling: letter_spacing_selector.dart ↔ word_spacing_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/letter_spacing_selector.dart)
- Change coupling: text_align_selector.dart ↔ word_spacing_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/text_align_selector.dart)
- Change coupling: text_font_weight_selector.dart ↔ word_spacing_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/text_font_weight_selector.dart)
- Change coupling: text_size_selector.dart ↔ word_spacing_selector.dart (lib/features/quote/presentation/widgets/quote_settings_widgets/text_size_selector.dart)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- The README states it 'is under construction' and ends with a LaunchScreenAssets README, but there is no architecture or design documentation for the app's core features (quote creation, styling, favorites, sharing) or how they interrelate. (README.md)
- complexity unreadable for .dart, .swift — churn × complexity hotspots could not be measured
- single-maintainer — knowledge-concentration (bus factor) risk
New (14)
- Boundary-crossing change coupling: dimensions.dart ↔ widgets.dart (lib/config/theme/dimensions.dart)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no architecture or design documentation (README.md)
- Duplicated block (14 lines × 2) (lib/features/discovery/data/mapper/remote_quote_mapper.dart)
- Duplicated block (15 lines × 2) (lib/features/quote/data/models/quote_model.dart)
- Duplicated block (16 lines × 2) (lib/features/discovery/presentation/widgets/remote_card_footer.dart)
- Duplicated block (16–17 lines × 2) (lib/features/discovery/presentation/screens/deatil_body.dart)
- Duplicated block (17 lines × 2) (lib/features/discovery/data/models/remote_quote_model.dart)
- Duplicated block (17 lines × 2) (lib/features/quote/presentation/widgets/quote_settings_widgets/letter_spacing_selector.dart)
- Duplicated block (27 lines × 2) (lib/features/discovery/presentation/widgets/remote_quote_card.dart)
- Duplicated block (45 lines × 2) (lib/features/discovery/presentation/screens/deatil_body.dart)
- Duplicated block (9 lines × 2) (lib/features/quote/presentation/widgets/quote_settings_widgets/letter_spacing_selector.dart)
- Duplicated block (9 lines × 3) (lib/features/discovery/domain/entities/remote_quote.dart)
- 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
IsaiasCuvula/quote_generator 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 d24b1852166d9125822e19a77f3dbb0202e4374d — 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.