hoangatuan/iMovie
51.4
Weak · 21 September 2026
5.4k
lines of production code
Swift
primary language
4
measurements over time
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.