Skip to content
CAI
Software that uses CAICheck a score

abibiano/course_resocoder_repo_viewer

45.9

Weak · 21 September 2026

2.4k

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 Flutter-based GitHub client application that enables users to browse, search, and manage repositories. It implements a full authentication flow using GitHub OAuth2 and provides features for viewing repository details, managing starred lists, and maintaining a local search history. The system is structured around a clean architecture with distinct domain, infrastructure, and presentation layers, utilizing Riverpod for state management and Sembast for local caching.

Features

Add NoResultsDisplay component for empty states

A new NoResultsDisplay widget has been added to the core presentation layer. This component renders a centered layout featuring an icon and a message, providing a consistent way to display empty states to users when no results are found.

lib/github/core/presentation · high confidence

Add StarredReposNotifier for managing starred repository lists

A new StarredReposNotifier class has been introduced to handle the logic for fetching and paginating starred repositories. This component extends PaginatedReposNotifier and integrates with the StarredReposRepository to provide methods for retrieving the first page of starred repositories and subsequent pages, effectively separating the data-fetching logic from the UI layer.

_lib/github/repos/starred\repos/application · high confidence

Add paginated repository list view with loading, error, and success states

The \lib/github/repos/core/pagination\ area introduces a new \PaginatedReposListView\ component that manages the display of repository items in a scrollable list. It handles three distinct states: a \LoadingRepoTile\ for initial or in-progress loads, a \FailureRepoTile\ that displays error messages and a retry action, and a \RepoTile\ for successful data. The list view integrates with the \PaginatedReposNotifier\ via Riverpod, automatically loading the next page of results when the user scrolls to the bottom, and displays a toast notification if the device is offline.

lib/github/repos/core/presentation · high confidence

Add repo detail page with starred status and optimistic updates

Users can now view the details of a specific repository, including its README rendered as HTML. The page displays a star icon that reflects the current starred status and allows users to toggle it. The implementation introduces a \RepoDetailState\ with a \hasStarredStatusChanged\ flag to track optimistic UI updates, and a \GithubRepoDetail\ domain model containing \fullName\, \html\, and \starred\ fields. The \RepoDetailPage\ uses a \RepoDetailNotifier\ to fetch repo details and handle starred status changes, while the \RepoDetailRepository\ coordinates between local caching and remote API calls for readme content and starred status.

lib/github/detail · high confidence

Add search functionality for GitHub repositories

Users can now search for repositories on GitHub. This change introduces a new SearchedReposPage that displays search results using a paginated list view. The implementation includes a new SearchedReposNotifier to manage the search state, a SearchedReposRepository to handle the data layer, and a SearchedReposRemoteService to fetch data from the GitHub API's /search/repositories endpoint.

_lib/github/repos/searched\repos · high confidence

Add search history feature

Users can now see and manage their search history. The search bar displays previous search terms, allows users to navigate to results for past queries, and lets users delete individual entries. The system automatically adds new searches to the history and keeps the most recent 10 entries.

lib/search · high confidence

Added GitHub API data transfer objects and pagination support

Introduced new data transfer objects for GitHub repository and user data, including \GithubHeaders\ for parsing response headers (ETag, Link/Pagination), \GithubRepoDTO\ for repository details (owner, name, description, stargazers count), and \UserDTO\ for user information (login, avatar URL). Also added \GithubHeadersCache\ for local storage of headers and \PaginationConfig\ to define the number of items per page, enabling paginated API responses to be parsed and cached locally.

lib/github/core/infrastructure · high confidence

Added StarredReposPage for displaying starred repositories

Users can now view their starred repositories through a new page that displays a paginated list of starred repos. The page includes a search bar for filtering repositories and a sign-out option. On load, it automatically fetches the first page of starred repositories using a Riverpod provider.

_lib/github/repos/starred\repos/presentation · high confidence

Added domain models for GitHub entities

Introduced new domain classes for GitHub data: \GithubFailure\ to represent API errors with an optional error code, \GithubRepo\ to model repository details including owner, name, description, and star count, and \User\ to represent user profiles with name and avatar URL. These immutable value types use the Freezed package for copy-with and pattern-matching support, establishing the core data structures for the GitHub feature.

lib/github/core/domain · high confidence

Added paginated repository listing support

Users can now browse repositories with pagination support, allowing them to load and view multiple pages of results. This change introduces a new \PaginatedReposNotifier\ to manage the state of paginated repository lists, along with the necessary infrastructure to fetch and convert remote data into domain models.

lib/github/repos/core/application · high confidence

Added sign-in and authorization UI for GitHub authentication

Users can now initiate a GitHub sign-in flow from a new sign-in page, which navigates to an authorization page that handles the GitHub OAuth redirect. The sign-in page displays a welcome screen with a GitHub icon and a 'Sign In' button, while the authorization page renders a web view to complete the OAuth process.

lib/auth/presentation · high confidence

Added splash page and application entry point

The application now includes a new splash screen that displays a GitHub icon and a loading indicator while the app initializes. The main entry point has been updated to initialize the provider scope for state management. This introduces a visual loading state before the main application widget is rendered.

lib · high confidence

Implemented secure credential storage and OAuth2 authentication flow

Added a new authentication infrastructure in lib/auth/infrastructure, introducing a secure credential storage mechanism using flutter\_secure\_storage to persist OAuth2 credentials. The GithubAuthenticator class now handles the full OAuth2 flow, including authorization, token refresh, and token revocation (sign-out). An OAuth2Interceptor for Dio automatically injects bearer tokens into requests and handles 401 errors by refreshing credentials or clearing invalid ones.

lib/auth/infrastructure · high confidence

Initial Android and Web platform configurations for the app

The Android and Web platforms have been initialized with their respective configuration files. On Android, this includes the main and debug/manifest files, the Kotlin activity class, resource styles for the splash screen, and Gradle wrapper settings. For the web, the entry point HTML and the PWA manifest have been added, enabling the app to run on mobile devices and in browsers.

android, web · high confidence

Initial app routing configuration

The application now defines its navigation structure using the \auto\_route\ package. This change introduces the \AppRouter\ and its generated counterpart \AppRouter.gr.dart\, which map specific URL paths to Flutter pages. The configured routes include a splash screen, sign-in, authorization, starred repositories, searched repositories, and repository detail views, establishing the primary navigation flow for the app.

lib/core/presentation/routes · high confidence

Initial project scaffolding and configuration

The repository was initialized with essential configuration files, including a Makefile for build and test automation, an analysis\_options.yaml file to enforce linting rules, and a build.yaml for code generation. The project also includes a .env.sample file for environment variables, a .gitignore for Dart/Flutter artifacts, and an IDE module file for IntelliJ/Android Studio. Documentation was updated in README.md to provide setup instructions and build commands.

(repo-wide) · high confidence

Introduce local caching for starred repositories

Added a new infrastructure layer for the starred repositories feature, including a local service using Sembast for offline storage, a remote service for fetching data from the GitHub API, and a repository class that implements a cache-aside pattern: it fetches fresh data from the network, caches the results locally, and serves cached data when offline or when the API returns a 304 Not Modified.

_lib/github/repos/starred\repos/infrastructure · high confidence

Introduce shared encoding and provider utilities

Added a new encoders.dart file that exposes a base64 string encoder, and a new providers.dart file that registers a SembastDatabase instance and a Dio HTTP client as shared providers. These additions provide reusable encoding logic and dependency injection points for core infrastructure.

lib/core/shared · medium confidence

Introduced AuthFailure domain model for authentication errors

Added a new \AuthFailure\ class in the \lib/auth/domain\ directory to represent authentication failure states. This model, generated via the \freezed\ package, defines two distinct failure types: \server\ (which carries an optional error message) and \storage\ (representing local storage issues). This provides a structured way to handle and distinguish between different categories of authentication errors within the application's domain layer.

lib/auth/domain · high confidence

Introduced Riverpod providers for GitHub repository services

Added a new providers file that registers Riverpod providers for GitHub repository detail and starred/filtered repositories. This introduces state notifiers for repository details and paginated lists, along with their associated remote and local services, enabling the app to manage and display repository data more effectively.

lib/github/core/shared · high confidence

Introduces a generic Fresh value object for domain state

A new generic \Fresh\<T\>\ class has been added to the core domain layer, providing a structured way to represent the freshness state of an entity. This value object wraps an \entity\ along with metadata such as \isFresh\, \maxPage\, and \isNextPageAvailable\, enabling consistent handling of data freshness across the application.

lib/core/domain · high confidence

Introduces a new state-based authentication flow using Riverpod

The application now manages authentication status through a dedicated \AuthNotifier\ that tracks user states (initial, unauthenticated, authenticated, or failure) using the Riverpod state management library. This change replaces the previous, likely ad-hoc or class-based state management with a structured, immutable state model that allows UI components to reactively update based on login, logout, and error conditions.

lib/auth/application · high confidence

Introduces shared authentication providers and OAuth2 interceptor

Adds a new file, lib/auth/shared/provider.dart, which defines the dependency injection (DI) providers for the authentication system. This includes the OAuth2 interceptor, the GitHub authenticator, the credential storage, and the auth notifier, wiring them together for use across the application.

lib/auth/shared · high confidence

New local storage and network error handling infrastructure

The app now supports offline functionality by introducing a local Sembast database for persistent storage, and improves error handling for network issues. Specifically, a new \RemoteResponse\ type (using the Freezed package) allows the app to distinguish between 'no connection', 'not modified', and 'new data' states, while a \DioError\ extension helps identify connection failures. Additionally, a \RestApiException\ class is added to encapsulate API errors with optional error codes.

lib/core/infrastructure · high confidence

iOS build configuration and workspace files added

The project now includes the necessary Xcode project file (project.pbxproj), workspace definitions, and scheme configurations for the iOS 'Runner' target. This establishes the build environment, linking the app with its CocoaPods dependencies and defining how the application is built, tested, and launched within Xcode.

ios/Runner.xcodeproj · high confidence

Behavioural changes

App initialization and toast notification system

The app now initializes core dependencies (environment variables, database, and HTTP client with GitHub headers and OAuth2 interceptors) before rendering, and routes users to either the starred repositories or sign-in page based on authentication status. Additionally, a new toast notification system has been added to display connection error messages to users.

lib/core/presentation · high confidence

Updated iOS Flutter build configuration files

The iOS build configuration files (AppFrameworkInfo.plist, Debug.xcconfig, and Release.xcconfig) have been updated. This includes the addition of the AppFrameworkInfo.plist with a minimum OS version of 12.0 and updated xcconfig files to reference the generated Flutter build settings.

ios/Flutter · medium confidence

iOS app configuration and assets added

The iOS build configuration, launch screens, and app icons have been added to the project. Users will now see the correct app icon on the home screen, a proper launch screen during app cold-start, and the app will display the name "ResoRepo Viewer" in the device settings and app store listings.

ios/Runner · 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 45 → 46 (+0.7)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 98 (-2.0)
  • Architecture 100 → 83 (-17.1)
  • Maturity 41 → 52 (+11.3)
  • Readiness 15 → 15 (+0.0)
  • Security 95 → 95 (+0.0)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (4)

  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • complexity unreadable for .dart, .kt, .swift — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (6)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no architecture or design documentation (README.md)
  • Duplicated block (13–14 lines × 2) (lib/github/detail/infrastructure/repo_detail_remote_service.dart)
  • Duplicated block (8 lines × 2) (lib/auth/infrastructure/github_authenticator.dart)
  • MethodTooLong: _SearchBarState.build (lib/search/presentation/search_bar.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

abibiano/course_resocoder_repo_viewer 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 98de41a349d38d9039615344d7102ee09ab32a4d — 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.