Skip to content
CAI
Software that uses CAICheck a score

hoangatuan/iMovie

51.4

Weak · 21 September 2026

5.4k

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 is an iOS application for browsing and managing media content, specifically movies, TV series, and people. It provides a modular architecture that separates domain logic, network communication, and UI components to handle features like content discovery, detailed information views, and search functionality. The system supports user interactions such as favoriting, sharing, and adding content to a watchlist, all managed through a structured navigation and state management system.

Features

Add movie detail page sections

The movie detail view now includes distinct sections for actors, short info, gallery, reviews, and user actions. Users can view actor profiles, see movie metadata and ratings, browse images, read reviews, and interact with the movie by favoriting, sharing, or adding to their watchlist.

Features/Movies/Sources/Movies/Presentation/Detail/Sections · high confidence

Add new UI components for movie and TV series displays

Introduced several new SwiftUI components in the CommonUI module to support the app's content display: a horizontal scrolling list for circular images (HorizontalCircleListView), a short information card for movies and TV series (MovieShortInfoView), a person profile card (PersonView), a reusable remote image loader (RemoteImageView), a section header with an optional arrow button (SectionHeaderView), and a top-rated item cell (TopRatedView). These components provide the visual building blocks for the home and detail screens.

Core/CommonUI/Sources/CommonUI/Components · high confidence

Add person detail view with profile, biography, and credits

Introduced the PersonDetailView and its associated ViewModel, which fetch and display a person's profile information, biography, and lists of associated movies and TV series. The UI is composed of section views for the main profile details, a gallery of images, and horizontal scrollable lists for filmography and TV credits, each linking to their respective detail pages.

Features/People/Sources/People/Presentation · high confidence

Added genre browsing and filtering for movies

Users can now view a list of available genres and select one to see all movies associated with that genre. The genre list is displayed in a two-column grid, and each genre item is tappable. Upon selecting a genre, users are taken to a dedicated view that displays the movies for that genre in a scrollable grid. This view includes a header showing the genre name and a filter option that allows users to sort the movie list by name (ascending, descending) or by rating.

Features/Movies/Sources/Movies/Presentation/Genres · high confidence

Added movie detail and home screens

Users can now view a detailed page for individual movies, which displays sections for short info, gallery, overview, actors, reviews, and recommendations, along with the ability to favorite or add movies to a watchlist. Additionally, a new home screen has been introduced to browse movies by discovery, genres, popular, latest, top-rated, and trending categories.

Features/Movies/Sources/Movies/Presentation/Detail · high confidence

Adds CommonUI extensions for UI components

The CommonUI module now provides new UI utilities: a bundle file exposing static image resources (search, play, heart, share) and Swift extensions for SwiftUI Views. These extensions include a custom back button, a screen background modifier, a default list modifier for styling list rows, and a shape for drawing borders on specific edges.

Core/CommonUI/Sources/CommonUI/Extensions · high confidence

Automated code formatting via pre-commit hook

A new pre-commit hook has been added to automatically format Swift files using SwiftFormat before each commit. This is supported by a new \git-format-staged\ utility script that applies formatters to staged changes, ensuring consistent code style without manual intervention.

scripts · high confidence

Domain models and data layer for movies, TV series, and people

The Foundation/Domain area now includes the core domain models (Movie, TVSeries, Person, Genre, Review, etc.) and their corresponding Data Transfer Objects (DTOs) and mappers, enabling the app to parse API responses into structured Swift types. Additionally, repository interfaces (e.g., IMovieRepository, ITVSeriesRepository, IAccountRepository) and their concrete implementations are introduced, providing the data-fetching and user-account management capabilities for movies, TV series, and person details.

Foundation/Domain · high confidence

Initial project setup and tooling configuration

The repository is initialized with a new project structure, including a SwiftLint configuration (.swiftlint.yml) to enforce code style, a Makefile to automate setup of development tools like SwiftLint and SwiftFormat, and an Xcode test plan (iMovie.xctestplan) that defines test targets for Movies, Search, People, and TVSeries features. The project also includes a README.md outlining the architecture and setup instructions, a LICENSE file (Apache 2.0), and a .gitignore update to exclude snapshot directories.

(repo-wide) · high confidence

Introduce Design System package with shared color and font definitions

A new Design System package has been added to the Foundation layer, providing a centralized repository for common UI tokens. This includes a set of predefined colors (such as teal, blue, and orange) and a collection of Lato font styles (regular, semibold, and bold) at various sizes and weights. The package also includes a basic test suite to verify the implementation.

Foundation/DesignSystem · high confidence

Introduce People feature with SwiftUI coordinator

A new People feature has been added, providing a SwiftUI-based coordinator (PersonDetailCoordinator) that manages navigation and displays person details. The implementation integrates with the existing Domain, Network, and Router modules, allowing users to view person information and access a share sheet.

Features/People/Sources/People/Coordinator · high confidence

Introduce network request and response logging capabilities

The Logger module now includes a new \Logger+Network.swift\ file that adds logging for HTTP requests and responses. This enhancement allows developers to capture and inspect request details (endpoint, headers, method, body) and response details (status code, headers, payload, errors) in a structured, human-readable format. The \ILogger\ protocol and \Logger\ struct remain unchanged, but the new network logging extension provides a convenient way to log network activity without modifying existing logging infrastructure.

Foundation/Logger · high confidence

Introduce search functionality for movies, TV shows, and people

Added a new Search feature that allows users to search for movies, TV shows, and people. The SearchView provides a search bar, type selection tabs, and displays results in a grid layout. The SearchViewModel handles the search logic, including caching and state management. The SearchCoordinator wires up the view with the necessary dependencies.

Features/Search/Sources · high confidence

Introduced coordinators to manage movie feature navigation and state

Added MovieDetailCoordinator and MoviesCoordinator to handle navigation flows within the Movies feature. The MoviesCoordinator manages the main list, genre filtering, and deep linking to movie details, while the MovieDetailCoordinator specifically handles the presentation of the movie detail view. These changes implement the UI integration for browsing and viewing movie content.

Features/Movies/Sources/Movies/Coordinator · medium confidence

New Network foundation package with HTTP client and mock support

A new \Network\ package has been added to the Foundation layer, providing a configurable \APIClientService\ for performing HTTP requests. The client supports GET, POST, PUT, PATCH, and DELETE methods, with built-in handling for URL query parameters, headers, and various request body formats (raw data, dictionaries, and encodable objects). It includes a \Mappable\ protocol for custom response mapping and a \DecodingError\ extension for detailed error descriptions. Additionally, a \NetworkMock\ helper is provided to create a pre-configured mock client for testing purposes.

Foundation/Network · high confidence

New Router component for SwiftUI navigation

Added a new Router component that manages navigation state using SwiftUI's NavigationPath. The component exposes methods to push destinations onto the navigation stack, pop the top destination, navigate to the root, and present a sheet. A corresponding test suite verifies the navigation and sheet presentation logic.

Foundation/Router · high confidence

New TV Series home screen with multiple content sections

Users can now view a new TV Series home screen that aggregates content from four distinct categories: Airing Today, Now Playing, Popular, and Top Rated. Each section displays relevant TV series data, allowing users to browse and navigate to detailed views for individual shows.

Features/TVSeries · high confidence

New home screen sections for movies and genres

The home screen now includes dedicated UI components for browsing different movie categories. Users can view a discovery section with a search option, a horizontal list of now-playing movies, and horizontal grids for popular, top-rated, and genre-based movie lists. Each section provides direct navigation to movie details or genre-specific listings.

Features/Movies/Sources/Movies/Presentation/Home/SectionView · high confidence

Behavioural changes

Added Xcode scheme configuration for iMovie

A new Xcode scheme file (iMovie.xcscheme) has been added to the project, defining build, test, launch, profile, analyze, and archive actions for the iMovie application. This configuration enables developers to build, run, and test the app directly from Xcode's scheme interface.

iMovie.xcodeproj/xcshareddata · high confidence

App entry point and configuration refactored for testing

The application's entry point has been restructured to support unit testing. A new \AppDelegate\ class and \iMovieApp\ struct were created in the \Application\ directory, centralizing the setup of the \Configuration\ object and API client. The original \iMovieApp.swift\ was renamed to \main.swift\ and updated to conditionally launch either the full \MovieApp\ or a lightweight \EmptyApp\ during unit tests, improving test isolation and speed.

iMovie/Application · high confidence

Introduce tabbed navigation for Movies and TV Series

The app now features a bottom tab bar allowing users to switch between the Movies and TV Series sections. Each section includes its own navigation stack, enabling deep linking to specific movie, TV series, or person details, as well as search functionality within each tab.

iMovie/Presentation · high confidence

Replaced default SwiftUI template with a new app structure

The default SwiftUI ContentView template, which previously displayed a globe icon and 'Hello, world!' text, has been removed. This change reflects the initialization of the iMovie project with a new architecture, specifically introducing a Search View and Search Reducer to manage application state and user interactions.

iMovie · medium confidence

Restructures the Xcode project into a modular architecture

The iMovie project has been reorganized into distinct modules including Features (People, TVSeries, Movies, Search), Core (CommonUI), and Foundation (Domain, Network, DesignSystem, Logger, Router). This change introduces a more granular project structure with separate groups for Application, Presentation, and Resources, and updates the build configuration to link against the new modular dependencies.

iMovie.xcodeproj · medium confidence

Workspace configuration regenerated by Tuist

The iMovie workspace configuration has been regenerated by Tuist, creating a new .tuist-generated marker and an updated contents.xcworkspacedata file that references the iMovie project and test plan.

iMovie.xcworkspace · high confidence

Test coverage

Added snapshot tests for CommonUI components; Added unit and snapshot tests for the People feature; Added unit tests for SearchViewModel; Added unit tests for the Movie Detail feature.

Dependencies

New Swift Package Manager manifests for core and feature modules

The project now includes Package.swift manifests for the CommonUI, Movies, People, Search, and TVSeries feature modules, as well as the DesignSystem, Domain, HelperMacros, Logger, Network, and Router foundation packages. These manifests define the module structure, internal dependencies (such as Domain, Network, and Router), and external dependencies including Nuke (12.0.0), SwiftUI-Shimmer (1.1.0), swift-snapshot-testing (1.12.0), swift-log (1.2.0), and OHHTTPStubs (9.1.0).

(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

Score

  • CAI 46 → 51 (+5.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 98 (-1.5)
  • Architecture 100 → 100 (+0.0)
  • Maturity 38 → 43 (+5.2)
  • Readiness 24 → 35 (+11.0)
  • Security 79 → 79 (+0.0)

Resolved (8)

  • 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 NavigationStack vs TabView conflict problem is documented but there is no reference to the linked WWDC 10166 video or any architecture/design doc explaining how to resolve it. (Foundation/Router/README.md)
  • The URL parsing guide is cited but there is no reference linking to the actual URLQueryItem construction content. (Foundation/Network/README.md)
  • complexity unreadable for .swift — churn × complexity hotspots could not be measured
  • dormant codebase — no living knowledge left to concentrate

New (41)

  • Coverage not measured — Swift suite
  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicate intent across distinct domain repositories. Both Movie and TV Series repositories expose an identical method signature for adding a rating. Given that both entities share similar domain properties (id, voteAverage, etc.), this suggests a shared protocol or base repository interface would be more consistent and DRY.
  • Duplicated block (12–13 lines × 2) (Foundation/Domain/Sources/DomainData/DTO/SearchResponse.swift)
  • Duplicated block (24 lines × 2) (Features/People/Sources/People/Presentation/SectionViews/DetailInfoSectionView.swift)
  • Duplicated block (9 lines × 2) (Features/Movies/Sources/Movies/Presentation/Detail/Sections/UserActionSectionView.swift)
  • Duplicated block (9 lines × 2) (Features/Movies/Sources/Movies/Presentation/Home/SectionView/PopularSectionView.swift)
  • Duplicated block (9 lines × 2) (Features/People/Sources/People/Presentation/SectionViews/CreditTVSeriesSectionView.swift)
  • Duplicated block (9–10 lines × 2) (Features/Movies/Sources/Movies/Presentation/Genres/GenreMovies/MoviesListView.swift)
  • Leaked secret: high-entropy-secret (iMovie/Application/iMovieApp.swift)
  • Leaked secret: jwt (iMovie/Application/iMovieApp.swift)
  • No ADRs found
  • No assertions (empty test): testExample (Foundation/DesignSystem/Tests/DesignSystemTests/DesignSystemTests.swift)
  • No assertions (empty test): testExample (Foundation/Domain/Tests/ModelsTests/ModelsTests.swift)
  • No assertions (empty test): testSearch (Features/Search/Tests/SearchTests/Presentation/SearchViewModelTests.swift)
  • No assertions: testCreditImagesSectionView (Features/People/Tests/PeopleTests/SnapshotTests/CreditImagesSectionViewTests.swift)
  • No direct assertions: testDefaultInit (Foundation/HelperMacros/Tests/HelperMacrosTests/DefaultInitMacrosTests.swift)
  • No direct assertions: testDefaultInit_multipleDeclarationInSameLine (Foundation/HelperMacros/Tests/HelperMacrosTests/DefaultInitMacrosTests.swift)
  • …and 21 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

hoangatuan/iMovie 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 1770da7a487254f47e545620b7758ff4d677993d — 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.