Skip to content
CAI
Software that uses CAICheck a score

v1tzor/TimePlanner

52.2

Adequate · 22 September 2026

83.5k

lines of production code

Kotlin

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

TimePlanner is an Android productivity application designed for detailed time management, featuring a timeline-based interface for scheduling, editing, and organizing tasks. The system supports complex scheduling logic including recurring tasks, goal tracking with progress metrics, and template-based task creation. It provides comprehensive analytics for workload and category analysis, alongside home screen widgets for at-a-glance productivity insights.

How it got here

2023 — Architecture migration and timeline feature

71 changes.

The project underwent a major architectural overhaul, migrating navigation from Voyager to Decompose and consolidating data access into core domain modules. This period introduced a new timeline view for the home screen, replacing legacy Room-based storage with reactive flows and adaptive Material 3 UI components. The work also established comprehensive localization, theming, and analytics capabilities while modernizing the build infrastructure.

2024–2026 — Decompose migration and feature expansion

23 changes.

The codebase underwent a significant architectural migration to the Decompose library, refactoring navigation, lifecycle management, and state handling across the Home, Settings, and Analytics features. Concurrently, the application expanded its core capabilities by introducing new modules for Templates, Overview, and Goal tracking, alongside a new database schema to support recurring tasks and granular priorities. This period also saw the addition of interactive timeline views, home screen widgets, and comprehensive unit test coverage to support these new functionalities.

Features

Added Templates feature API

The application now includes a new Templates feature, exposing its API through interfaces for content provider and Decompose feature factories, along with configuration and output contracts for navigation.

(repo-wide) · high confidence

Analytics feature navigation implementation wired via Decompose factories

The analytics module now includes concrete factory implementations for its navigation and feature lifecycle. DefaultAnalyticsFeatureFactory creates the analytics feature using the Decompose library's instance keeper to ensure a single controller instance per context, while DefaultAnalyticsContentProviderFactory constructs the content provider by wiring together the analytics and category store factories. These changes provide the underlying infrastructure for the analytics feature's UI composition and state management.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/navigation · high confidence

Editor feature API interfaces and contracts introduced

The editor module now exposes a formal API layer for integration with the navigation and dependency injection systems. This includes the \EditorFeatureApi\ interface for accessing the feature's content provider, the \EditorDecomposeFeatureFactory\ interface for creating feature instances, and the \EditorContentProviderFactory\ interface for managing content. Additionally, the \EditorFeatureContract\ defines the serializable configuration models (Categories, Goal, Task) and navigation outputs (NavigateToTemplates, NavigateToBack) that the editor feature uses to communicate with the rest of the application.

features/editor/api/src/main/java/ru/aleshin/features/editor/api · high confidence

Home feature API contract and factory interfaces introduced

The Home feature now exposes a formal API contract via new interfaces and configuration classes. HomeFeatureApi defines the entry point, requiring implementations to provide a HomeContentProviderFactory and a HomeDecomposeFeatureFactory. The feature's configuration is defined by HomeConfig, which currently supports passing an optional schedule date, while HomeOutput defines the navigation capabilities, including actions to navigate back, to settings, or to the task editor with specific time and date context.

features/home/api/src/main/java/ru/aleshin/features/home/api · high confidence

Initial implementation of the Templates feature

This change introduces the Templates feature, adding the necessary implementation infrastructure including the Dagger dependency injection component, domain interactors (such as TemplatesInteractor and RepeatTaskInteractor), and the presentation layer store. It also includes the required UI assets, specifically a set of vector drawables for icons like categories, time controls, and notifications, along with standard build configuration files for the module.

features/templates, features/templates/impl/build/generated/ksp/debug/java/ru/aleshin/features/templates · high confidence

Initial implementation of the Templates feature module

This change introduces the complete implementation for the Templates feature, including the dependency injection setup (Dagger components and modules), domain logic for managing templates and repeating tasks, and the presentation layer with Compose UI models and theming. Users gain the ability to view, create, and manage time templates, with support for sorting by date, category, or duration, and filtering by active/inactive status and weekly/monthly patterns.

features/templates/impl/src/main/java/ru/aleshin/features/templates · high confidence

Introduction of core domain module with goal tracking and scheduling logic

The app now includes a new \core/domain\ module that centralizes business logic for goal tracking, recurring schedules, and task management. This update introduces domain entities for Goals (with metrics, directions, and progress statuses), Main/Sub Categories, and Schedules, alongside managers for calculating goal progress, handling recurring schedule creation, and checking task statuses. A Dagger module (\CoreDomainModule\) is added to bind these new services, enabling the application to track goal achievements against time tasks and manage daily schedules more robustly.

core/domain · high confidence

New UI theme system and localization infrastructure

The core UI module now includes a comprehensive theming and localization infrastructure. This introduces a Material 3-based color system with four distinct palettes (Red, Pink, Purple, Blue) supporting both light and dark modes, alongside dynamic color support for Android 12+. It also establishes the foundation for multi-language support by defining language tokens and string resources for 12 languages (English, Russian, German, Spanish, Persian, French, Brazilian Portuguese, Turkish, Vietnamese, Polish, Italian, and Chinese), along with mappers for displaying month and weekday names in the selected language. Additionally, it adds unit tests for the animated loading content component to ensure smooth UI transitions.

core/ui · high confidence

New analytics domain entities for task tracking insights

The analytics feature now includes a comprehensive set of internal domain entities to support detailed task analytics. This adds data models for overall overviews (including key metrics, category distributions, load, creation, and duration distributions), specific category and sub-category breakdowns (with summaries, key metrics, load, and day-part analysis), and time-based comparisons (using civil date ranges and comparison states). Additionally, several legacy UI and navigation classes (such as DurationTemplate, WorkResultHandler, and various StateCommunicators) have been repurposed into analytics-specific enums and data classes to support these new reporting capabilities.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/domain/entities · high confidence

New analytics domain logic and reactive error handling

This change introduces a comprehensive set of new domain classes for the analytics feature, including \AnalyticsBucketCalculator\ (for day/week/month bucketing), \AnalyticsIntervalSplitter\ (for hourly splitting), \AnalyticsOverviewCalculator\ (for summary metrics, category distribution, and load analysis), \AnalyticsRangeCalculator\ (for date range selection and shifting), \AnalyticsTaskClassifier\ (for task status preparation), and \CategoryAnalyticsCalculator\ (for category-specific metrics). Additionally, the error handling infrastructure has been updated to use \FlowEitherWrapper\ instead of \EitherWrapper\, enabling reactive stream support, and a typo in the license header was corrected.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/domain/common · high confidence

New home screen widgets for deadlines, weekly review, daily summary, and goals

This change introduces a new Android widget module that adds four new home screen widgets: Deadlines and Inbox, Weekly Review, Daily Summary, and Goals. The implementation includes the necessary AndroidManifest receivers, a Dagger dependency injection setup, and domain logic to calculate data such as task deadlines, weekly workload, daily completion statistics, and goal progress. Users can now view these specific productivity metrics directly on their device's home screen without opening the app.

widgets · high confidence

New interactive timeline view for the home screen

The home screen now includes a new Timeline tab that displays tasks on a scrollable, vertically stacked timeline. Users can interact with tasks by dragging to move them or resizing their start and end times directly on the grid. The view automatically scrolls to the current time when the day changes and supports both 12-hour and 24-hour time formats based on device settings. A floating action button allows users to quickly add new tasks to the schedule.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/views/timeline · high confidence

New overview feature API and UI assets

The overview feature now includes its API contract and implementation scaffolding, introducing interfaces for content provider and feature factories alongside a configuration and output model that supports navigation to home, task editors, and goal editors. The implementation module adds a comprehensive set of vector drawables for the bottom bar and UI elements, including icons for categories, task completion states, notes, scheduling, timers, and a full suite of goal management icons (add, edit, delete, history, and target).

features/overview, features/overview/api/src/main/java/ru/aleshin/features/overview · high confidence

Overview feature implementation with goal tracking and weekly scheduling

The Overview feature now includes comprehensive support for goal management and weekly schedule visualization. Users can track goal progress, view goal history, and manage main categories. The feature provides a weekly overview showing scheduled tasks, workload analysis, and free time calculations. Additionally, it supports parsing and managing undefined tasks from shared text, with automatic categorization. The implementation uses a modular architecture with separate domain and presentation layers, dependency injection via Dagger, and Compose-based UI stores for state management.

features/overview/impl/src/main/java/ru/aleshin/features/overview · high confidence

Overview screen now displays goals, history, and main categories

The overview screen has been updated to include new widgets for goals, goal history, and main categories. This change introduces new domain interactors and presentation stores to fetch and display this data, enhancing the user's ability to track progress and manage categories directly from the overview.

features/overview/impl/build/generated/ksp/debug/java/ru/aleshin/features/overview · high confidence

Project initialization with Apache 2.0 license and security policy

The repository has been initialized with core documentation and legal files. A LICENSE file establishes the Apache License, Version 2.0 for the project, and a SECURITY.md file provides a policy for reporting vulnerabilities. The README.md has been created to document the TimePlanner application, including download links for AppGallery, RuStore, and F-Droid, as well as a detailed list of features such as timeline planning, templates, notifications, analytics, goals, and personalization. Additionally, the .gitignore has been updated to exclude build artifacts, and the Gradle wrapper scripts have been updated to the latest POSIX-compliant versions.

(repo-wide) · high confidence

Settings feature implementation and data management

This change introduces the implementation of the Settings feature, providing the underlying domain logic and presentation layer for managing application preferences. It adds interactors to handle the creation, retrieval, and deletion of categories, goals, schedules, templates, and undefined tasks. The feature includes a BackupManager that uses Kotlin serialization to save and restore app data, and a UI layer built with Jetpack Compose that supports dynamic theming, multiple languages, and adaptive layouts for different screen sizes.

features/settings/impl/src/main/java/ru/aleshin/features/settings · high confidence

Timeline view support and task importance error handling

The home screen now supports a timeline view, introduced via new domain entities (TimelineSchedule, TimelineTimeTask, TimelineTaskUpdate) that model time-based task scheduling and updates. Additionally, the system now distinguishes task importance errors: a new TimeTaskImportanceException is handled by the HomeErrorHandler, mapping to a new ImportanceError failure type in HomeFailures, allowing the UI to react specifically to importance-related issues.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/domain/entities · high confidence

Removals

Analytics screen model implementation removed

The analytics feature's presentation-layer screen model files have been deleted, including the main screen model, state and effect communicators, and the work processor. This removes the previous implementation responsible for managing analytics state, handling time period changes, and processing data loading commands within this specific module.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/ui/screenmodel · high confidence

Removal of Editor Domain Model and Repository Interfaces

The \EditModel\ data class and the \TimeTaskRepository\ interface have been removed from the editor API domain layer. This eliminates the previous domain model used for editing tasks (including fields for time ranges, categories, and notification settings) and removes the repository contract responsible for adding, fetching, updating, and deleting time tasks by date.

features/editor/api/src/main/java/ru/aleshin/features/editor/api/domain · high confidence

Removal of legacy Analytics screen implementation

The \AnalyticsScreen.kt\ file, which previously rendered the analytics view using a tabbed interface with Time and Workload tabs, has been removed from the presentation layer. This deletion indicates that the legacy screen implementation is no longer part of the application's UI, likely replaced by a new architecture or component in the analytics feature.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/ui · high confidence

Removal of legacy Android module boilerplate and interfaces

The module-injector module has removed its core Android scaffolding, including the BaseComponentHolder, BaseFeatureApi, and BaseFeatureDependencies interfaces, along with the AndroidManifest, ProGuard rules, and default unit/instrumented tests. This cleanup eliminates the previous base abstractions and configuration files, indicating a structural shift in how the module is implemented or integrated.

module-injector · high confidence

Removal of legacy TimeTask data models

The \TimeTaskDetails\ and \TimeTaskEntity\ classes, which previously defined the Room database schema and data transfer structure for time-tracking tasks (including fields for start/end times, categories, and notification settings), have been removed from the codebase. This change eliminates the underlying data model for this specific feature area, indicating that the storage and retrieval logic for these task entities is no longer present in this module.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/models/timetasks · high confidence

Removal of legacy alarm notification infrastructure

The presentation-layer components responsible for scheduling task notifications, specifically the \AlarmReceiverProvider\ interface and the \TimeTaskAlarmManager\ implementation, have been removed from the editor API. This deletion eliminates the previous mechanism for setting, updating, and canceling exact alarms for time tasks, indicating a shift in how the application handles background scheduling or notification delivery.

features/editor/api/src/main/java/ru/aleshin/features/editor/api/presentation · high confidence

Removal of legacy category data models

The application has removed the legacy Room entity classes for categories, specifically MainCategoryEntity, SubCategoryEntity, and the associated MainCategoryDetails data class. This change eliminates the local database schema for main and sub-categories, indicating a shift away from storing category hierarchy data in the local Room database.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/models/categories · high confidence

Removal of legacy category management UI components

The legacy presentation layer for category management has been removed from the home feature implementation. Specifically, the \HomeTopAppBar\, \MainCategoryCreatorDialog\, \SubCategoriesList\, \SubCategoryCreatorDialog\, and their associated helper views have been deleted. This cleanup eliminates the old Material 2-based top app bar and the specific dialog/list components used for creating and editing main and sub-categories, indicating a shift in how these UI elements are constructed or integrated elsewhere in the application.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/categories/views · high confidence

Removal of legacy domain repository interfaces

The repository interfaces for categories, schedules, subcategories, and templates have been removed from the home feature's domain layer. This change eliminates the previous data access contracts for managing main/sub-categories, time-based schedules, and templates, indicating a structural shift in how these entities are persisted or accessed within the application.

features/home/api/src/main/java/ru/aleshin/features/home/api/domains/repository · high confidence

Removal of legacy home and editor domain components

This change removes several core components from the home and editor features, including the \TimeTaskRepositoryImpl\ data layer, the \MainIcon\ enum and its associated presentation mappers, and the \ScheduleStatusManager\ and \TimeTaskStatusManager\ logic. Users will no longer have access to the previous implementation of time task storage, category icon mapping, and schedule status determination within these specific API modules.

features/editor/api/src/main/java/ru/aleshin/features/editor/api/data, features/home/api/src/main/java/ru/aleshin/features/home/api/domains/common, features/home/api/src/main/java/ru/aleshin/features/home/api/presentation · high confidence

Removal of legacy language, theme, and settings domain entities

The \LanguageType\ and \ThemeColorsType\ enums, along with the \ThemeSettings\ data class and \ThemeSettingsRepository\ interface, have been removed from the settings API domain layer. This deletion eliminates the previous static model for language selection (limited to DEFAULT, EN, RU) and theme colors (DEFAULT, LIGHT, DARK), indicating a structural shift in how user preferences are defined and persisted within the application.

features/settings/api/src/main/java/ru/aleshin/features/settings/api/domain · high confidence

Removal of legacy schedule data models

The \DailyScheduleEntity\ and \ScheduleDetails\ data models in the home feature's API layer have been removed. These classes previously handled daily schedule storage and the mapping of associated time tasks, indicating a simplification or restructuring of how schedule data is represented in the application.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/models/schedules · high confidence

Removal of legacy theme settings persistence layer

The local data storage implementation for theme settings has been removed. This change deletes the Room database schema, data access objects, local data source, and repository implementation that previously handled the persistence of \ThemeSettings\. Consequently, the application no longer saves or retrieves theme configuration data via this specific local database mechanism.

features/settings/api/src/main/java/ru/aleshin/features/settings/api/data · high confidence

Removal of local data source and DAO implementations for categories

The local data access layer for categories has been removed, specifically deleting the \CategoriesLocalDataSource\, \MainCategoriesDao\, \SubCategoriesLocalDataSource\, and \SubCategoriesDao\ files. This eliminates the direct Room database interactions (CRUD operations) for main and sub-categories previously handled by these components, indicating a structural change to how category data is persisted or retrieved.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/datasources/categories · high confidence

Removal of local template data source and DAO

The local data source implementation for managing templates, including the \TemplatesDao\ interface and the \TemplatesLocalDataSource\ (with its \Base\ implementation), has been removed from the codebase. This eliminates the direct Room database access methods for creating, fetching, updating, and deleting template entities (\TemplateEntity\/\TemplateDetails\) previously exposed through this specific data source layer.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/datasources/templates · high confidence

Removed legacy analytics UI components

The Analytics feature's UI layer has been refactored by removing four legacy Compose view files: AnalyticsTimeLegend, AnalyticsTopAppBar, SubAnalyticsTimeLegend, and TimeSelectorAndRefresh. These components, which previously handled the analytics top bar, time period selection, and legend displays, have been deleted from the codebase, indicating a shift in how the analytics interface is constructed or rendered.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/ui/views · high confidence

Architecture

Editor feature refactored to Decompose navigation and modularized domain logic

The editor feature has been restructured to use the Decompose library for navigation and lifecycle management, introducing a new \EditorFeatureController\ and \DefaultEditorFeatureFactory\ to handle feature instantiation. The internal architecture has been modularized into distinct domain interactors for managing goals, main and sub-categories, task settings, and undefined tasks, replacing previous monolithic logic. Additionally, the UI layer now supports adaptive layouts for categories, allowing a list-detail pane view on larger screens and a single-pane view on compact devices, while new UI models and mappers have been added to handle goal editing and task priority selection.

features/editor/impl/src/main/java/ru/aleshin/features/editor · high confidence

New core presentation module with UI models and notification alarm infrastructure

The app introduces a new \core/presentation\ module that establishes the presentation-layer architecture. This includes a suite of serializable UI models for tasks, templates, categories, schedules, and settings, along with mappers to convert between domain entities and UI representations. It also adds a Dagger module and concrete implementations for managing task and template alarms (including ongoing notifications), providing the foundation for the app's notification and scheduling behavior.

core/utils · high confidence

Removal of legacy build configuration files

The build configuration files Config.kt, Dependencies.kt, and Versions.kt have been deleted from the buildSrc module. This removes the centralized definitions for application metadata (such as SDK versions and version codes), third-party library dependencies (including AndroidX, Compose, Voyager, and Retrofit), and their associated version numbers, indicating a migration to a different build structure or dependency management approach.

buildSrc/src · high confidence

Behavioural changes

Analytics domain logic refactored into specialized interactors

The monolithic AnalyticsInteractor has been removed and replaced with three new, specialized domain interactors: AnalyticsOverviewInteractor, AnalyticsRangeInteractor, and CategoryAnalyticsInteractor. This change restructures how analytics data is fetched and processed, introducing dedicated logic for managing date range selections (including custom ranges and period shifts), calculating overview statistics with comparison periods, and deriving category-specific analytics. Users benefit from a more modular and maintainable analytics backend that supports finer-grained control over time ranges and more detailed breakdowns of task data.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/domain/interactors · high confidence

Analytics feature API refactored to use Decompose navigation

The analytics feature's API layer has been restructured to support the new Decompose navigation architecture. The previous \AnalyticsFeatureStarter\ interface and the \AnalyticsComponentHolder\ singleton have been removed and replaced with new interfaces: \AnalyticsDecomposeFeatureFactory\ and \AnalyticsContentProviderFactory\. The \AnalyticsFeatureApi\ interface now exposes the content provider factory instead of the old starter mechanism, and the feature contract defines \AnalyticsConfig\ and \AnalyticsOutput\ types to handle navigation and configuration within the new framework.

features/analytics/api/src/main/java/ru/aleshin/features/analytics · high confidence

Analytics feature dependencies updated to use core domain repositories

The dependency injection interface for the analytics feature has been refactored to replace feature-specific repositories (ScheduleRepository, CategoriesRepository) with core domain repositories (TasksSettingsRepository, ThemeSettingsRepository, TimeTaskRepository, MainCategoryRepository). This change centralizes data access logic within the core domain layer, ensuring the analytics feature relies on shared, stable interfaces rather than feature-local implementations.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/di · high confidence

Analytics feature refactored to use Compose Stores and Content Providers

The analytics feature's dependency injection has been updated to replace the previous ScreenModel-based navigation and state management with a new architecture using Compose Stores and Content Providers. Specifically, the old single AnalyticsScreenModel and associated communicators have been removed in favor of AnalyticsComposeStore and CategoryComposeStore, and the navigation entry point now uses DefaultAnalyticsContentProviderFactory instead of the legacy starter. This change also introduces new domain bindings for range, overview, and category analytics calculations, supporting more granular data processing for the analytics views.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/di/modules · high confidence

Analytics presentation layer refactored with new UI models and mappers

The analytics presentation layer has been restructured to support a comprehensive analytics update. This change introduces a new set of immutable, serializable UI models (in the \models\ package) for both the general overview and category-specific analytics, covering metrics like load distribution, creation buckets, duration stats, and weekday-hour heatmaps. Corresponding mapper functions (in the \mappers\ package) have been added to translate domain entities into these UI models and to provide localized string titles for time periods, sort options, and creation buckets, ensuring the UI receives properly formatted data for display.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presentation · high confidence

Categories screen model refactored to remove legacy screenmodel architecture

The internal presentation layer for the Categories feature has been restructured by removing the legacy \CategoriesScreenModel\, \CategoriesStateCommunicator\, \CategoriesEffectCommunicator\, and \CategoriesWorkProcessor\ classes. This change eliminates the previous state and effect communication mechanisms, indicating a migration to a different architectural pattern for managing the categories UI state and interactions.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/categories/screenmodel · high confidence

Database schema evolves to support task repetition, priority levels, and goal tracking

The core data layer's database schema has been updated through multiple migrations (versions 10–17) to support new product capabilities. The schema now includes a \repeatTimes\ table and a \repeat\_enabled\ flag on templates to handle recurring tasks, replaces the binary importance flags with a \priority\ field for more granular task ranking, and introduces new \goals\ and \goalPeriods\ tables to store user-defined objectives and their progress metrics.

core/data · high confidence

Debug APK metadata updated to version 0.9.0

The debug build configuration has been updated to generate APKs with version code 29 and version name 0.9.0. This change also sets the minimum SDK version for dexing to 24, ensuring compatibility with Android 7.0 (Nougat) and above for debug builds.

app/debug · high confidence

Home feature dependency injection refactored to new architecture

The dependency injection setup for the Home feature has been significantly restructured. The previous navigation-centric approach, including the \LocalNavigationModule\, \HomeComponentHolder\, and router annotations, has been removed in favor of a new \HomeFeatureController\ and \HomeContentProviderFactory\ pattern. The \HomeFeatureDependencies\ interface now exposes core domain services (such as \RecurringScheduleManager\, \TimeOverlayManager\, and various repositories) instead of legacy managers and repositories. Additionally, the domain module has replaced category and template interactors with \SettingsInteractor\ and \TimelineInteractor\, while the presentation module now binds a \HomeComposeStore\ and a \TimelineWorkProcessor\, reflecting a shift towards a store-based UI architecture.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/di · high confidence

Home screen UI refactored with new Material 3 date controls and view mode tabs

The home screen presentation layer has been significantly restructured to support Material 3 design requirements. The previous \ViewToggle\ component for switching between expanded and compact views has been removed and replaced with a segmented button row in the new \HomeDatePane\ for selecting between Agenda and Timeline modes. A new \HomeViewTabs\ component provides a tab-based navigation alternative for switching these modes. Date selection is now handled by new dedicated composables (\HomeDateChooser\, \HomeDatePicker\, \HomeDateControlsSection\) that utilize Material 3's \DatePicker\ and \DatePickerDialog\. The main schedule area is now rendered via \HomeSchedulePane\, which manages animated transitions between the Agenda and Timeline tabs. Additionally, the \EmptyDateView\ now supports an optional subtitle, and the \HomeTopAppBar\ has been updated to include a configurable calendar button behavior.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/views · high confidence

Home screen UI tokens updated for timeline and agenda views

The home screen's presentation layer has been updated to support new layout and visual requirements. New layout width defaults have been added for the agenda and timeline views, and a new color token system has been introduced to dynamically generate category-specific accent and container colors based on the current theme. The icon set has been expanded to include specific icons for agenda, timeline, notes, and drag operations, while the string resources have been refreshed to include labels for the new timeline and agenda tabs, task notes, and updated navigation titles.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/theme/tokens · high confidence

Home screen contract refactored to support timeline view and reactive state management

The home screen's internal contract has been significantly restructured to support new UI capabilities and a more reactive architecture. The state model now includes a timeline schedule view, allowing users to see tasks in a timeline format alongside the existing agenda view, and introduces a configurable calendar button behavior. The event system has been expanded to handle timeline-specific interactions, such as editing and updating timeline tasks, and to support changing the home view mode. Additionally, the underlying architecture has shifted from a custom base state/event model to a standardized store-based pattern (StoreState, StoreEvent, StoreAction), improving consistency and maintainability.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/contract · high confidence

Home screen domain logic refactored for reactive scheduling and timeline management

The home feature's domain layer has been restructured to support reactive updates and a new timeline interface. The ScheduleInteractor now returns reactive flows with automatic progress tracking and handles recurring schedule creation, replacing the previous static fetch logic. A new TimelineInteractor has been added to manage the timeline view, including fetching schedule details, updating time tasks, and supporting undo operations. Additionally, the TimeShiftInteractor has been updated to work with the new timeline model, enforcing constraints on important or recurring tasks during shifts. Legacy interactors for categories, subcategories, and templates have been removed as their responsibilities were consolidated or migrated.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/domain/interactors · high confidence

Home screen error handling and timeline mapping updates

The home screen's presentation layer has been refactored to support a new timeline view and improved error messaging. A new TimelineUiMapper has been introduced to convert domain entities (TimelineSchedule, TimelineTimeTask) into UI models, replacing the previous ScheduleDomainToUiMapper, TimeTaskToEditModelMapper, and TimeTaskUiMapper which have been removed. Additionally, the HomeFailuresMapper now handles ImportanceError, displaying a specific error message for importance-related issues.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/mapppers · high confidence

Home screen layout refactored for adaptive and foldable device support

The home screen UI has been restructured to support multiple layout modes (Compact, Medium, Supporting Pane, Book, and Tabletop) via the new HomeLayout component. This change replaces the previous single-column Scaffold-based implementation with an adaptive layout system that adjusts the interface for different screen sizes and postures, including foldable devices. The new layout introduces a supporting pane for secondary controls and date selection on larger screens, while maintaining a streamlined schedule view on compact devices.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home · high confidence

Home screen model refactored to remove legacy screen model infrastructure

The home screen's presentation layer has been refactored by removing the legacy screen model implementation files (HomeScreenModel, HomeStateCommunicator, HomeEffectCommunicator, NavigationWorkProcessor, and ScheduleWorkProcessor). This change eliminates the previous state and effect communication mechanisms, indicating a migration to a new architecture for managing the home screen's UI state and user interactions.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/screenModel · high confidence

Home screen state management migrated to Decompose architecture

The home screen's presentation layer has been refactored to use the Decompose library for component lifecycle and navigation management. This change introduces a new \HomeComponent\ that wraps the \HomeComposeStore\, enabling robust state saving and restoration via \saveableStore\. The store now handles all home screen logic—including schedule loading, task editing, timeline updates, and navigation to the editor—through a structured work-processor pattern, replacing the previous implementation to fix state-saving bugs and improve lifecycle management.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/store · high confidence

Home screen timeline model refactored to support flexible scheduling

The home screen's presentation models have been replaced to support a timeline-based view. The previous \ScheduleUi\ and \TimeTaskUi\ models (which relied on Android's \Parcelable\) were removed and replaced with new serializable models: \TimelineScheduleUi\, \TimelineTimeTaskUi\, and \TimelineTaskUpdateRequestUi\. This change introduces support for granular time ranges, task resizing/moving capabilities, and explicit status tracking, laying the groundwork for the new timeline tab and foldable device support.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/models · high confidence

Home theme now uses dynamic icon fetching

The Home theme implementation has been updated to fetch icons dynamically via a new \fetchHomeIcons()\ function instead of using the static \baseHomeIcons\ object. This change allows the home screen's iconography to be determined at runtime, supporting the new thematic application icon and ensuring the UI reflects the current theme configuration.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/theme · high confidence

Migrated Home feature navigation to Decompose

The Home feature's root presentation layer has been refactored to use the Decompose library for navigation and lifecycle management. This change introduces a new \InternalHomeFeatureComponent\ that manages a child stack, replacing previous navigation mechanisms with a structured, component-based approach. The \HomeContentProvider\ now renders the UI using Decompose's \ChildStack\, enabling better state handling and back-navigation support within the Home feature.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/root · high confidence

Migrated home feature navigation to Decompose

The home feature's navigation implementation has been replaced to use the Decompose library, shifting from the previous Voyager-based screen management. The old \HomeFeatureStarterImpl\ and \NavigationManager\ classes, which handled screen transitions via a \Router\, have been removed and replaced with \DefaultHomeFeatureFactory\ and \DefaultHomeContentProviderFactory\. These new components now create the home feature using Decompose's \ComponentContext\ and \InstanceKeeper\, managing the feature's lifecycle and content provider creation through the \HomeFeatureController\.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/navigation · high confidence

Release metadata for F-Droid, Huawei, and RuStore variants updated to version 2.0.0

The release output metadata for the F-Droid, Huawei, and RuStore app variants has been updated to reflect version 2.0.0 with version code 33. These changes confirm the build configuration for the respective store-specific APKs, including the associated baseline profiles for Android API levels 28 and above.

app/fdroid, app/huawei, app/rustore · high confidence

Removal of TimePeriod string mapping logic

The \TimePeriodMapper.kt\ file has been deleted, removing the Composable function that previously converted \TimePeriod\ enum values (Week, Month, Year) into localized display strings. This eliminates the specific logic responsible for mapping time period selections to their textual representations in the analytics presentation layer.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/mappers · high confidence

Removal of Voyager-based navigation implementation

The \NavScreen.kt\ file, which previously handled navigation using the Voyager library, has been removed from the home feature implementation. This change eliminates the custom \AppNavigator\ wrapper and the associated screen-index mapping logic for Home and Categories screens, indicating a shift away from the Voyager navigation stack in this module.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/nav · high confidence

Removal of legacy Analytics theme composition and resource accessors

The \AnalyticsTheme\ composable and the \AnalyticsThemeRes\ helper object have been removed from the analytics feature implementation. This change eliminates the previous mechanism that provided analytics-specific strings and icons via CompositionLocal providers, indicating a shift in how the analytics UI consumes theme resources or a consolidation of the theming architecture.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/theme · high confidence

Removal of legacy Categories UI implementation

The \CategoriesContent\ and \CategoriesScreen\ files in the home feature's presentation layer have been deleted. This removes the previous Compose-based UI implementation for managing main and sub-categories, including the screen scaffold, top app bar, and category list views, as part of the broader UI update and navigation migration.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/categories · high confidence

Removal of legacy CategoriesContract screen model

The file defining the Categories screen model contract (CategoriesContract.kt) has been removed from the home feature implementation. This deletion eliminates the previous state, event, and action definitions used for managing category selection and modification, indicating a shift in how the categories UI interacts with the application logic, likely as part of the broader navigation and architecture updates.

features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/categories/contract · high confidence

Removal of legacy DI feature API interfaces

The \EditorFeatureApi\, \HomeFeatureApi\, and \SettingsFeatureApi\ interfaces have been removed from the dependency injection layer. These interfaces previously extended \BaseFeatureApi\ and provided a \fetchStarter()\ method to retrieve navigation starters for their respective features. Their deletion indicates a shift away from this specific DI-based navigation pattern, likely as part of the broader navigation migration to Decompose mentioned in the commit history.

features/editor/api/src/main/java/ru/aleshin/features/editor/api/di, features/home/api/src/main/java/ru/aleshin/features/home/api/di, features/settings/api/src/main/java/ru/aleshin/features/settings/api/di · high confidence

Removal of legacy EditorFeatureStarter navigation interface

The \EditorFeatureStarter\ interface, which previously defined how the editor feature provided its main screen via the Voyager navigation library, has been removed from the codebase. This change eliminates the old navigation contract for the editor feature, aligning with the broader migration of navigation logic to the Decompose framework.

features/editor/api/src/main/java/ru/aleshin/features/editor/api/navigations · high confidence

Removal of legacy HomeFeatureStarter navigation interface

The legacy \HomeFeatureStarter\ interface, which previously defined methods for providing navigation screens and showing home, templates, and categories views, has been removed from the home feature API. This change reflects the migration of the navigation layer to the Decompose library, replacing the old Voyager-based screen management with the new architecture.

features/home/api/src/main/java/ru/aleshin/features/home/api/navigation · high confidence

Removal of legacy Room-based schedule data layer

The local data source implementation for schedules, including the Room database definition, DAO, and local data source interface, has been removed from the application. This change eliminates the previous SQLite-backed storage mechanism for daily schedules and time tasks, indicating a migration to a different data persistence strategy or architecture for this feature.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/datasources/schedules · high confidence

Removal of legacy category, schedule, and template data mappers

The data-mapping layer for the home feature has been refactored by removing the standalone Kotlin files that previously handled conversions between data models and domain entities. Specifically, the mappers for categories (MainCategory, SubCategory, and their aggregation), daily schedules, time tasks, and templates have been deleted. This change eliminates the explicit mapping logic for these entities within this module, indicating a shift in how data is transformed or persisted, likely consolidating these responsibilities elsewhere or adopting a different mapping strategy.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/mappers · high confidence

Removal of legacy domain entity definitions

The domain entity classes for categories, schedules, time tasks, and templates have been removed from the home feature API. This deletion includes the data models for main and sub-categories, schedule statuses, time task statuses, and the template structure itself, indicating a structural refactoring or migration of these domain concepts to a different module or representation.

features/home/api/src/main/java/ru/aleshin/features/home/api/domains/entities · high confidence

Removal of legacy repository implementations

The repository implementation classes for categories, schedules, subcategories, and templates have been removed from the data layer. This change eliminates the specific data-access logic previously handled by these classes, indicating a shift in how these entities are persisted or retrieved within the application.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/repository · high confidence

Removal of legacy template data models

The \TemplateDetails\ and \TemplateEntity\ classes, which previously defined the Room database schema for time task templates (including fields like start/end time, category IDs, and notification flags), have been removed from the codebase. This change eliminates the legacy template data structure, indicating a shift in how template data is stored or accessed within the application.

features/home/api/src/main/java/ru/aleshin/features/home/api/data/models/template · high confidence

Removed hardcoded analytics localization tokens

The hardcoded string and icon resources for the analytics feature have been removed from the presentation layer. This eliminates the previous implementation that provided static English and Russian translations via composition locals, indicating a shift in how localization is managed for this module.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/theme/tokens · high confidence

Removed legacy analytics UI components and state contract

The presentation layer for the analytics feature has been refactored by removing the \AnalyticsContract\ state definition and the \TimeTab\ and \WorkLoadTab\ Compose UI components. This change eliminates the previous implementation of the time-based and workload-based analytics views, indicating a migration to a new UI architecture or screen model for displaying analytics data.

features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/ui/tabs · high confidence

Settings feature API refactored for Decompose navigation

The Settings feature API has been restructured to support the new Decompose navigation architecture. The previous theme resource object has been replaced with a \SettingsFeatureApi\ interface that exposes a \SettingsContentProviderFactory\, alongside new interfaces for content provider and feature factory management. The feature contract now explicitly defines \SettingsConfig\ (covering Settings and Donate modes) and \SettingsOutput\ (including a back-navigation action), establishing the specific API surface this module contributes to the broader navigation migration.

features/settings/api/src/main/java/ru/aleshin/features/settings/api · high confidence

Test coverage

Added Apache 2.0 license header to unit test; Added Apache 2.0 license headers to instrumented tests; Added instrumentation tests for analytics UI components; Added instrumentation tests for the TimelineTaskCard component; Added unit tests for TimeTaskInteractor; Added unit tests for TimelineInteractor; Added unit tests for analytics domain logic and interactors; Added unit tests for editor validation and time-range logic; Added unit tests for home screen layout and timeline interactions; Added unit tests for overview feature components; Added unit tests for settings presentation layer; Added unit tests for templates interactor and layout logic; New instrumentation tests and flavor-specific crash reporting implementations; Removal of placeholder unit tests; Removed placeholder unit test in editor implementation.

Dependencies

Gradle wrapper upgraded to version 9.5.0 with enhanced reliability settings

The project's Gradle wrapper has been updated from version 7.5 to 9.5.0, bringing significant performance and stability improvements. The configuration file now includes explicit network timeout (10 seconds), retry logic (0 retries with 500ms backoff), and distribution URL validation to ensure build integrity. Additionally, the file now contains an Apache 2.0 license header and copyright notice for 2026.

gradle · high confidence

Migrate to Gradle Version Catalog and modernize build configuration

The project has migrated from a legacy build setup using \buildSrc\ and hardcoded dependency constants to a centralized Gradle Version Catalog (\libs.versions.toml\). This change updates the Android Gradle Plugin to 9.3.0 and Kotlin to 2.3.21, raises the Java compilation target to version 17, and replaces the deprecated \kapt\ annotation processor with KSP. Additionally, the app now supports product flavors for F-Droid, RuStore, and Huawei, and introduces a new modular architecture with dedicated \core/data\, \core/domain\, and \core/presentation\ modules.

(dependencies) · high confidence

Release version 1.0.1 (build 31) with baseline profile support

The app has been updated to version 1.0.1 (version code 31), packaged as app-release.apk. This release includes configuration for Android baseline profiles to optimize runtime performance on devices running Android 9 (API 28) and above, with specific profile files applied for API levels 28-30 and 31+.

app/release · high confidence

Housekeeping

Cleaned up stale build artifacts in buildSrc

Removed generated build artifacts from the buildSrc directory, including the class listing file, Kotlin compilation cache, plugin test metadata, and JAR manifest. This cleanup ensures that stale or unnecessary build outputs do not interfere with the build process.

buildSrc/build · 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 48 → 52 (+4.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 97 → 92 (-4.9)
  • Architecture 98 → 80 (-18.3)
  • Maturity 35 → 67 (+31.7)
  • Readiness 24 → 25 (+0.3)
  • Security 100 → 100 (+0.0)
  • Domain Modelling 100 → 82 (-18.2)

Resolved (61)

  • Base.isOverlay (cognitive 18) (core/utils/src/main/java/ru/aleshin/core/utils/managers/TimeOverlayManager.kt)
  • Base.isOverlay (cyclomatic 18) (core/utils/src/main/java/ru/aleshin/core/utils/managers/TimeOverlayManager.kt)
  • CategoryChooserKt.MainCategoryChooser (cyclomatic 16) (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/ui/editor/views/CategoryChooser.kt)
  • Change coupling: AnalyticsStrings.kt ↔ EditorStrings.kt (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/theme/tokens/AnalyticsStrings.kt)
  • Change coupling: AnalyticsStrings.kt ↔ HomeStrings.kt (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/theme/tokens/AnalyticsStrings.kt)
  • Change coupling: AnalyticsStrings.kt ↔ SettingsStrings.kt (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presenatiton/theme/tokens/AnalyticsStrings.kt)
  • Change coupling: EditorStrings.kt ↔ LanguageTypeMapper.kt (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/theme/tokens/EditorStrings.kt)
  • Change coupling: HomeStrings.kt ↔ LanguageTypeMapper.kt (features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/theme/tokens/HomeStrings.kt)
  • Change coupling: LanguageType.kt ↔ LanguageTypeMapper.kt (core/domain/src/main/java/ru/aleshin/core/domain/entities/settings/LanguageType.kt)
  • Change coupling: LanguageTypeMapper.kt ↔ SettingsStrings.kt (features/settings/impl/src/main/java/ru/aleshin/features/settings/impl/presentation/mappers/LanguageTypeMapper.kt)
  • Change coupling: TimePlannerLanguage.kt ↔ LanguageTypeMapper.kt (core/ui/src/main/java/ru/aleshin/core/ui/theme/tokens/TimePlannerLanguage.kt)
  • Change coupling: TimePlannerStrings.kt ↔ AnalyticsStrings.kt (core/ui/src/main/java/ru/aleshin/core/ui/theme/tokens/TimePlannerStrings.kt)
  • Change coupling: TimePlannerStrings.kt ↔ LanguageTypeMapper.kt (core/ui/src/main/java/ru/aleshin/core/ui/theme/tokens/TimePlannerStrings.kt)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (10 lines × 2) (core/ui/src/main/java/ru/aleshin/core/ui/notifications/TemplatesAlarmManager.kt)
  • Duplicated block (10 lines × 2) (core/ui/src/main/java/ru/aleshin/core/ui/views/DurationPickerDialog.kt)
  • Duplicated block (10 lines × 2) (core/ui/src/main/java/ru/aleshin/core/ui/views/DurationPickerDialog.kt)
  • Duplicated block (10 lines × 2) (features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/home/views/TimeTaskView.kt)
  • Duplicated block (10 lines × 2) (features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/ui/overview/store/OverviewComposeStore.kt)
  • …and 41 more

New (209)

  • Base.isOverlay (cognitive 18) (core/domain/src/main/java/ru/aleshin/core/domain/common/TimeOverlayManager.kt)
  • Base.isOverlay (cyclomatic 18) (core/domain/src/main/java/ru/aleshin/core/domain/common/TimeOverlayManager.kt)
  • CategoryChooserKt.MainCategoryChooser (cyclomatic 18) (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/ui/task/views/CategoryChooser.kt)
  • Change coupling: EditorStrings.kt ↔ HomeStrings.kt (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/theme/tokens/EditorStrings.kt)
  • Change coupling: EditorStrings.kt ↔ SettingsStrings.kt (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/theme/tokens/EditorStrings.kt)
  • Change coupling: HomeStrings.kt ↔ SettingsStrings.kt (features/home/impl/src/main/java/ru/aleshin/features/home/impl/presentation/theme/tokens/HomeStrings.kt)
  • Change-coupling hub: AnalyticsStrings.kt → EditorStrings.kt, HomeStrings.kt, SettingsStrings.kt (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presentation/theme/tokens/AnalyticsStrings.kt)
  • Change-coupling hub: LanguageTypeStringMapper.kt → TimePlannerLanguage.kt, TimePlannerStrings.kt, AnalyticsStrings.kt, EditorStrings.kt, HomeStrings.kt, SettingsStrings.kt (features/settings/impl/src/main/java/ru/aleshin/features/settings/impl/presentation/mappers/LanguageTypeStringMapper.kt)
  • Change-coupling hub: TimePlannerStrings.kt → AnalyticsStrings.kt, EditorStrings.kt, HomeStrings.kt, SettingsStrings.kt (core/ui/src/main/java/ru/aleshin/timeplanner/core/ui/theme/tokens/TimePlannerStrings.kt)
  • ClassTooLong: SchedulesDataBase (core/data/src/main/java/ru/aleshin/core/data/datasources/schedules/SchedulesDataBase.kt)
  • DeadlineTaskRowKt.DeadlineTaskRow (cyclomatic 16) (widgets/src/main/java/ru/aleshin/timeplanner/widgets/presentation/ui/deadlines/views/DeadlineTaskRow.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no licence statement (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (features/overview/impl/src/main/java/ru/aleshin/features/overview/impl/presentation/ui/common/CompactCategoriesChoosers.kt)
  • Duplicated block (10 lines × 4) (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presentation/ui/analytics/AnalyticsLayoutSections.kt)
  • Duplicated block (10–11 lines × 2) (features/editor/impl/src/main/java/ru/aleshin/features/editor/impl/presentation/ui/task/TaskLayout.kt)
  • Duplicated block (10–11 lines × 3) (core/ui/src/main/java/ru/aleshin/timeplanner/core/ui/views/CustomTextFields.kt)
  • Duplicated block (10–11 lines × 3) (features/analytics/impl/src/main/java/ru/aleshin/features/analytics/impl/presentation/ui/analytics/AnalyticsLayoutSections.kt)
  • …and 189 more

Changes since last survey

  • 1 commits — 0 feature/other, 1 fixes

By area

  • core/data — 1 commit

Notable commits

  • fix: fix: release 2.0.1 — app no longer permanently blocked by degenerate task ranges

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

Survey your own repository

v1tzor/TimePlanner 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 22 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 fbd0a27b5adb5e4468425940ea74e5145c6263a8 — 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-90d5d2fe38ee.