xephosbot/GoodNotesCompose
51.5
Adequate · 21 September 2026
6.8k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This system is an Android note-taking application built with Jetpack Compose, featuring a modern architecture that separates UI, domain, and data layers. It supports creating, editing, and organizing notes and folders, with capabilities for favoriting, color-coding, and reordering. The app includes a settings interface for managing themes and dynamic color support, alongside performance optimizations like baseline profiles for faster startup.
Features
Added baseline profile generation and startup benchmarking infrastructure
Added new files to the baselineProfile module to support app startup performance optimization. This includes a BaselineProfileGenerator test class that creates a basic startup baseline profile for the target application, and a StartupBenchmarks test class that measures cold startup speed by comparing compilation modes (None vs. Partial with Baseline Profiles). These changes enable developers to generate and verify baseline profiles to improve app startup times.
baselineProfile · high confidence
New Note Detail Screen with Shared Element Transitions
The app introduces a new NoteDetailScreen component that displays a note's title and content in a scrollable layout, with a top app bar for navigation and favoriting, and a bottom app bar for undo/redo and color selection. The screen integrates with the navigation system to support shared element transitions (shared bounds) for smoother visual continuity when entering or leaving the note detail view. The underlying ViewModel uses AssistedInject for navigation key injection and manages state via StateFlow, exposing text fields for title and content editing, along with actions to update favorite status, change note color, and save the note.
app/src/main/java/com/xbot/goodnotes/ui/feature/detail · high confidence
Behavioural changes
App launch and navigation overhaul with new settings and theming controls
The app's launch sequence now features a fade-out animation for the splash screen, and the main activity manages UI state for dark mode and dynamic theming. A new Settings screen allows users to change the app theme and toggle dynamic color support. Navigation has been refactored to use the new Compose Navigation 3 library, introducing a bottom sheet scene strategy for the settings screen and shared element transitions for smoother visual transitions between screens.
app/src · high confidence
Domain model and repository interfaces updated for new features
The domain layer introduces support for app theme selection (Light, Dark, System) via a new AppTheme model and SettingsRepository. FolderModel now uses an 'order' field instead of 'noteCount' to support reordering, while NoteModel adds an 'isFavorite' flag. Repository interfaces are refactored: FolderRepository exposes folders as a Flow and manages folder CRUD operations, while NoteRepository shifts to explicit insert/delete/restore/update methods and adds a method to retrieve folders related to a note.
domain/src/main/java/com/xbot/domain/repository · medium confidence
Initial project structure and documentation
The repository was initialized with core project files, including an MIT license, a README describing the Android application's features and architecture, and a Compose compiler configuration file. Additionally, the Gradle wrapper script was made executable to ensure the build system runs correctly.
(repo-wide) · high confidence
Moved core common module and constants to new location
The core common module has been reorganized, with the \Constants\ object (defining default, favorite, and new note IDs) added to \core/common\. Additionally, test files and the Android manifest previously located in \core/shared-element\ have been moved to \core/common\, updating their package names from \com.xbot.sharedelement\ to \com.xbot.common\ to reflect the new structure.
core/common · medium confidence
Note screen refactored with new state management and expanded actions
The Note screen has been refactored to use a new \NoteScreenAction\ interface and \StateFlow\-based state management, replacing the previous \NoteScreenEvent\ and \StatefulViewModel\ pattern. This change introduces support for additional user actions including updating note favorites, deleting folders, changing folders for selected notes, and reordering folders. The UI now integrates shared element transitions for navigation and displays a snackbar message with an undo option when notes are deleted.
app/src/main/java/com/xbot/goodnotes/ui/feature/note · medium confidence
Refactored UI components and animations for improved performance and consistency
The UI layer was refactored to improve performance and consistency. Custom animation classes like \SineCosineEasing\ and \EmphasizedEasing\ were moved to new files (\Interpolator.kt\, \MaterialSharedAxis.kt\) and integrated with Compose's \Easing\ interface. Several components were migrated from the app module to the shared \core/ui\ module, including \Scaffold\ (which now handles snackbar display and cutout insets), \LargeTopAppBarWithSelectionMode\, and \LazyVerticalStaggeredGridWithSelection\. The \SelectableChip\ component was updated to support long-click actions and use \combinedClickable\ for better gesture handling. Additionally, \DimensionSubcomposeLayout\ was optimized by replacing \ImmutableList\ with standard \List\ and using \fastMap\ for better performance.
core/ui/src/main/java/com/xbot/ui/component · high confidence
Refactored domain use cases for folders and notes
The domain layer's use cases have been reorganized and renamed to better reflect their responsibilities. Folder-related operations (AddFolder, UpdateFolders, GetFolders, DeleteFolder) are now grouped in the folder package, while note operations (AddNote, GetNote, GetNotes, UpdateNote, DeleteNotes, RestoreNotes) are grouped in the note package. Specific use cases have been repurposed: for example, AddFolderUseCase became GetFoldersRelatedToNote, and OpenFolderUseCase became RestoreNotes. Additionally, the GetFolders use case now sorts folders by their 'order' property, and GetNotes filters by 'isFavorite' for a special folder ID.
domain/src/main/java/com/xbot/domain/usecase · medium confidence
Refactored theme system with dynamic color support and note color management
The UI theme module has been significantly refactored to support dynamic theming on Android S (API 31) and above. A new \DynamicTonalPalette\ implementation provides light and dark color schemes that adapt to the system wallpaper, with specific handling for SDK 34+ versus 31-33. Additionally, a new \NoteColors\ system has been introduced, exposing light and dark palettes via a \CompositionLocal\ (\LocalNoteColors\), allowing components to access note-specific colors. The main \Theme.kt\ file was updated to integrate these new color schemes and provide note colors through the composition local, while also removing hardcoded status and navigation bar color manipulations in favor of the new dynamic theming logic. Typography styles for \titleMedium\ and \labelLarge\ were also adjusted.
core/ui/src/main/java/com/xbot/ui/theme · medium confidence
Restructures data layer with new repositories and database migrations
The data layer has been restructured to support folder reordering and theme settings. A new FolderRepository and SettingsRepository are introduced, with the database schema updated to version 4 to include a new 'order' column for folder sorting. The NoteDao is refactored to support favorite status and cross-referencing, while the old NoteDao and related models are removed. Additionally, a MainDispatcherRule is added for testing coroutines.
data/src · high confidence
Updated Android build configuration and Compose compiler settings
The Android build configuration now targets SDK 36 and configures Kotlin to use JVM 17, with warnings treated as errors. Compose compiler metrics and reports are now generated via the ComposeCompilerGradlePluginExtension, replacing the previous manual task configuration. Additionally, the Android instrumented test configuration has been updated to use the newer API for enabling Android tests.
build-logic/convention/src/main/kotlin/com · high confidence
Updated Android target SDK to 36 and enabled Kotlin Compose plugin
The build logic convention plugins have been updated to target Android SDK 36 across application, library, and test modules. Additionally, the Kotlin Compose plugin is now explicitly applied for both application and library modules, and KSP is configured to generate Kotlin code for Room. The Android Hilt convention plugin has been refactored to use the modern \add\ API for dependencies, and the JvmLibraryConventionPlugin has had the lint plugin removed.
build-logic/convention/src/main/kotlin · medium confidence
Updated Gradle to version 8.13
The Gradle wrapper has been updated to version 8.13, which will be used for all future builds. This change ensures the project uses the specified Gradle version, potentially bringing new features, performance improvements, and bug fixes associated with that release.
gradle · high confidence
Dependencies
Updated Android and Kotlin dependencies to latest versions
The project has been updated to use newer versions of Android libraries and Kotlin, including AGP 8.13.1, Kotlin 2.2.10, and various AndroidX libraries (e.g., Compose BOM 2025.08.00, Lifecycle 2.9.2). This includes adding new dependencies for Jetpack Compose Navigation 3, Paging, and other AndroidX components, as well as updating existing libraries like Hilt, Retrofit, and Firebase. The \core:shared-element\ module has been renamed to \core:common\ and its dependencies adjusted accordingly.
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 54 → 52 (-2.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 98 → 97 (-1.2)
- Architecture 100 → 95 (-4.9)
- Maturity 58 → 58 (-0.1)
- Readiness 47 → 37 (-9.4)
- Security 56 → 66 (+10.7)
- Domain Modelling 55 → 58 (+2.8)
Resolved (16)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (11 lines × 2) (core/ui/src/main/java/com/xbot/ui/theme/DynamicTonalPalette.kt)
- Duplicated block (11 lines × 2) (core/ui/src/main/java/com/xbot/ui/theme/DynamicTonalPalette.kt)
- Duplicated block (12 lines × 3) (core/ui/src/main/java/com/xbot/ui/component/FloatingActionButton.kt)
- Duplicated block (13 lines × 2) (core/ui/src/main/java/com/xbot/ui/component/ShapedIconButton.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Test reliability not included
- The README lists prerequisites (Android Studio 2025.1.2, JDK 21, Gradle 8.13) but does not state the supported Android SDK version or minimum API level. (README.md)
- The architecture section names modules (app, core, data, domain) but omits any guidance on how to run the app locally or build it from source. (README.md)
- single-maintainer — knowledge-concentration (bus factor) risk
New (26)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: hard to navigate (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (14 lines × 2) (core/ui/src/main/java/com/xbot/ui/theme/DynamicTonalPalette.kt)
- Duplicated block (14 lines × 2) (core/ui/src/main/java/com/xbot/ui/theme/DynamicTonalPalette.kt)
- Duplicated block (15 lines × 3) (core/ui/src/main/java/com/xbot/ui/component/FloatingActionButton.kt)
- Duplicated block (18 lines × 2) (core/ui/src/main/java/com/xbot/ui/component/ShapedIconButton.kt)
- Duplicated block (6 lines × 2) (app/src/main/java/com/xbot/goodnotes/Mapper.kt)
- High secret: WD-SECRET-0004 (debug.keystore)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Leaked secret: private-key-store (debug.keystore)
- MethodTooLong: AppBarKt.LargeTopAppBarLayout (core/ui/src/main/java/com/xbot/ui/component/AppBar.kt)
- MethodTooLong: ScaffoldKt.ScaffoldLayout (core/ui/src/main/java/com/xbot/ui/component/Scaffold.kt)
- No ADRs found
- …and 6 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
xephosbot/GoodNotesCompose 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 17887464ab8eaf6b2db370a49aeaaebf9be128a8 — 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.