Skip to content
CAI
Software that uses CAICheck a score

tiagomartinho/Reminders

52.8

Adequate · 21 September 2026

369

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a mobile application for managing reminders, structured around a modular architecture that separates core business logic from the UI layer. It provides functionality to create, store, and display a list of reminders, with the core logic encapsulated in a dedicated framework. The application supports adding new reminders and navigating between views, backed by an in-memory repository for data persistence.

Features

Add Reminder flow implemented in RemindersCore

The Add Reminder feature is now fully implemented within the RemindersCore module. The new AddReminderPresenter handles user interactions by saving new reminders to the repository and routing the user back to the main reminders list upon completion or cancellation. The AddReminderView protocol defines the interface for the UI layer, ensuring the presenter can access the reminder title. This change introduces the core logic and view contract for adding new reminders.

RemindersCore/Add Reminder · high confidence

Introduce RemindersCore/Reminders module with presenter and view protocol

Added the RemindersCore/Reminders module, introducing a new RemindersPresenter that handles loading reminders from a repository and routing to add a new reminder, alongside a RemindersView protocol defining the view interface.

RemindersCore/Reminders · medium confidence

Introduced in-memory reminders repository

Added a new InMemoryRemindersRepository class that stores reminders in a private array, providing save and load functionality for in-memory data persistence.

Reminders/Repositories · high confidence

Introduces core data model and navigation routing for reminders

The RemindersCore module now includes a Reminder struct to represent reminder data and a Route enum to define navigation destinations. A new Router protocol is introduced to handle routing logic, enabling the application to navigate to the add reminder view.

RemindersCore · medium confidence

Behavioural changes

Add Reminder screen now uses a presenter-based architecture

The Add Reminder screen has been refactored to use the AddReminderPresenter for handling save and cancel actions, replacing direct logic in the view controller. The view controller now delegates behavior to the presenter, improving separation of concerns and testability.

Reminders/Add Reminder · high confidence

App icon and project files reorganized into Supporting Files folder

The app icon configuration (Contents.json) has been updated to include explicit filename mappings for iPhone and iPad app icons across multiple sizes and scales, ensuring proper asset resolution. Additionally, the project's supporting files, including the launch screen storyboard and Info.plist, have been moved into a new 'Supporting Files' directory structure. The Info.plist was also updated to remove the 'UIMainStoryboardFile' key, simplifying the storyboard configuration.

Reminders/Supporting Files · medium confidence

App launch now programmatically initializes the window and routes to the Reminders screen

The application's startup process has been refactored to programmatically create the main window and immediately route to the Reminders view, removing the previous reliance on a storyboard and a separate ViewController class. Users will now see the Reminders interface immediately upon launch, with the app's initial state determined by the new routing logic in AppDelegate rather than a static storyboard configuration.

Reminders · medium confidence

Enable code coverage for Reminders and RemindersCore tests

The Xcode project schemes for the Reminders app and RemindersCore library have been updated to enable code coverage. Specifically, the \Reminders.xcscheme\ now includes \codeCoverageEnabled = "YES"\ in its test action, and the new \Core.xcscheme\ is configured to build the \RemindersCore\ framework and \RemindersCoreTests\ for testing, profiling, and analysis. This change allows developers to measure test coverage for both the main application and the core library during development and CI processes.

Reminders.xcodeproj/xcshareddata · high confidence

Introduced RemindersRepository protocol

A new public protocol, RemindersRepository, has been added to define the interface for saving and loading reminders. This change establishes a clear contract for reminder storage operations, separating the interface definition from any specific implementation.

RemindersCore/Repositories · high confidence

Rearranged project file structure for test targets

The Info.plist file has been moved from the RemindersUITests directory to the Supporting Files folder within the RemindersTests directory. This change reorganizes the project's internal file structure, likely to better align with Xcode's default project templates or to consolidate test-related resources.

RemindersTests/Supporting Files · high confidence

Refactor Reminders router to use polymorphic routing

The Reminders/Router directory has been restructured to replace conditional routing logic with a polymorphic architecture. New files introduce a ControllerRouterFactory that selects specific router implementations (AddReminderRouter, RemindersRouter) based on the Route, each conforming to a ControllerRouter protocol. This separates creation from routing and removes UIKit dependencies from the AppRouter by abstracting Window and ViewController interactions through protocols.

Reminders/Router · high confidence

Refactor controller creation into dedicated factory classes

The app's controller instantiation logic has been restructured: a new \ControllerFactory\ protocol and separate \AddReminderControllerFactory\ and \RemindersControllerFactory\ classes now handle the creation of their respective view controllers. Each factory is responsible for wiring up its specific presenter and wrapping the resulting view controller in a \UINavigationController\. The previous monolithic \ViewControllerFactory\ has been updated to delegate to these new, specialized factories, separating the concerns of creation and routing.

Reminders/Factories · medium confidence

Reminders list now displays in a table view

The Reminders screen has been updated to present the list of reminders using a UITableView, replacing the previous display method. The view controller now manages a table view that shows each reminder's title, and selection of list items is disabled.

Reminders/Reminders · high confidence

Reminders project restructured with new architecture and test infrastructure

The Reminders Xcode project has been reorganized to support a new modular architecture. This includes the introduction of a dedicated 'Core' framework (RemindersCore.framework) and the extraction of routing, controller, and presenter components into separate, dedicated files (e.g., AppRouter, ControllerFactory, AddReminderPresenter). The change also updates the build configuration to embed the new framework and adds corresponding test targets and mock implementations for the new architecture.

Reminders.xcodeproj · medium confidence

RemindersCoreTests Info.plist relocated to new directory structure

The Info.plist file for the RemindersCoreTests target has been moved from the RemindersTests directory to RemindersCoreTests/Supporting Files, aligning the test bundle's configuration with the updated project structure.

RemindersCore/Supporting Files, RemindersCoreTests/Supporting Files · medium confidence

Test coverage

Added end-to-end UI tests for the Reminders feature; Added test doubles for reminders functionality; Added test doubles for view controllers, windows, and controller factories; Added tests for AppRouter navigation; Added tests for the RemindersPresenter; Added unit tests for the AddReminderPresenter; Removed default test template from RemindersTests.

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 48 → 53 (+4.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-0.6)
  • Architecture 69 → 69 (+0.0)
  • Maturity 52 → 57 (+5.0)
  • Readiness 24 → 34 (+9.3)
  • Security 100 → 100 (+0.0)

Resolved (9)

  • 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
  • The README is an iOS app doc with no architecture/design documentation for the Clean Architecture structure or wireframes. (README.md)
  • The README names several concrete improvement ideas (mocking, DI, refactor tests) but never explains what each one entails or where to implement them in the codebase. (README.md)
  • complexity unreadable for .swift — churn × complexity hotspots could not be measured
  • no production source files with tracked history to analyse
  • no production source files with tracked history to analyse

New (8)

  • Documentation: no architecture or design documentation (README.md)
  • Duplicated block (5 lines × 2) (RemindersCore/Add Reminder/AddReminderPresenter.swift)
  • Duplicated block (8 lines × 2) (Reminders/Factories/AddReminderControllerFactory.swift)
  • Low cohesion: RemindersViewController (LCOM4 4) (Reminders/Reminders/RemindersViewController.swift)
  • No ADRs found
  • No assertions: testShowNoReminders (RemindersUITests/RemindersEndToEndTest.swift)
  • Test project verifies nothing: RemindersUITests (RemindersUITests/RemindersEndToEndTest.swift)
  • bus factor 1 — one contributor carries this repository

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

Survey your own repository

tiagomartinho/Reminders 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 fd68e1544ddb90e83ee826ec522d74b3b5859324 — 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-b84573e22831.