tortamque/Weathque
51.7
Adequate · 20 September 2026
2.5k
lines of production code
Dart
primary language
4
measurements over time
What this system is
This is a mobile weather application for Android and iOS that allows users to manage a list of saved cities and view their current weather conditions and weekly forecasts. It aggregates data from the OpenWeatherMap API and persists user preferences locally, presenting the information through a themed UI with animated transitions. The system is strictly limited to mobile platforms, having removed support for Linux, macOS, Web, and Windows.
Features
Add CitiesChangedCubit for city list management
A new CitiesChangedCubit has been introduced in the Add City feature to manage the state of the available cities list. This component initializes with the current list of cities by invoking the GetCitiesUseCase and provides a method to refresh this list on demand, ensuring the UI reflects the latest data from the domain layer.
_lib/features/app/presentation/bloc/add\city · high confidence
Add city selection via custom bottom sheet with color preservation
Users can now add a new city by opening a custom bottom sheet that includes a text input field and a list of saved cities. When a city is submitted, the app fetches its weather data, saves the city with a randomly assigned theme color, and refreshes the current weather and forecast views. The interface provides immediate feedback via toast messages for success, duplicate entries, or invalid city names.
_lib/features/app/presentation/widgets/misc/bottom\sheet · high confidence
Added data models for current and forecast weather responses
New model classes (ForecastWeatherModel and WeatherModel) have been added to parse JSON responses for current and forecast weather data, mapping API fields to domain entities.
lib/features/app/data/models · high confidence
Added domain use cases for city and weather management
This change introduces a set of new domain use cases in the app feature layer to handle city and weather operations. Users can now save and delete cities, retrieve lists of saved cities and their associated colors, and fetch both current weather and weather forecasts for specific cities. These use cases act as the domain layer interface, delegating storage operations to the StorageRepository and weather data retrieval to the WeatherRepository and ForecastWeatherRepository.
lib/features/app/domain/usecases · high confidence
Initial theme configuration with Material 3 and custom color palette
The application now includes a base theme configuration in \lib/config/theme\ that enables Material 3 and sets the text selection handle color to black. Additionally, a new \CustomColors\ enum is introduced, defining a palette of yellow, blue, and pink colors for use throughout the UI.
lib/config · high confidence
Introduce BLoC for fetching multi-city weather forecasts
Added the presentation-layer BLoC components (event, state, and bloc) for the weather forecast feature. This implementation allows the app to retrieve forecast data for all saved cities in a single operation, returning the results as a map of city names to forecast entities.
_lib/features/app/presentation/bloc/get\_weather\forecast · high confidence
Introduce animated weather card component
Added a new WeatherCard widget that displays wind speed, humidity, and visibility data within a styled container. The component features a top-and-right origin animation that triggers after a short delay, enhancing the visual presentation of the weather details.
_lib/features/app/presentation/widgets/weather\card · high confidence
Introduce local storage and weather API repository implementations
This change adds the concrete repository implementations for the app's data layer. The new StorageRepositoryImplementation handles local persistence operations, including saving and retrieving city names and their associated colors, as well as deleting cities. The WeatherRepositoryImplementation classes provide the bridge to remote weather data, with separate implementations for fetching current weather and forecast data by city name using the respective API services.
lib/features/app/data/repository · high confidence
Introduces core dependency injection and API configuration
The application now initializes its dependency injection container (GetIt) to manage the lifecycle of key services, including API clients for OpenWeatherMap, local storage, and various domain use cases and presentation blocs. This setup is supported by new constants defining the base URLs for current weather and forecast endpoints, and a .gitignore rule to prevent sensitive configuration files from being committed.
lib/core · high confidence
Introduces domain entities and summary builder for weather data
This change adds the core domain models required to represent weather information within the app. It defines \WeatherEntity\ and \ForecastWeatherEntity\ to map current and forecast weather data (including temperature, coordinates, and conditions) from JSON responses, alongside supporting classes like \Coord\, \Information\, and \Wind\. A new \City\ enum is introduced to represent available locations (Paris, New York, Sydney), and a \SummaryBuilder\ class is added to generate human-readable weather summaries from the entity data.
lib/features/app/domain/entities · high confidence
Introduces domain repository interfaces for weather data and local storage
New abstract repository interfaces are added to the application's domain layer to define contracts for data access. The \StorageRepository\ interface specifies methods for managing city preferences, including saving a city with its associated color, retrieving lists of saved cities and colors, and deleting a city. The \WeatherRepository\ and \ForecastWeatherRepository\ interfaces define methods for fetching current weather and forecast data for a specific city name, establishing the domain-side abstraction for these features.
lib/features/app/domain/repository · high confidence
Introduction of core use-case interfaces for city and color management
A new abstract base class \UseCase\ and specific interface definitions for \SaveCityUseCase\, \GetCitiesUseCase\, \GetColorsUseCase\, and \DeleteCityUseCase\ have been added to the core layer. These interfaces define the contracts for managing city data (including saving, retrieving, and deleting cities by name) and fetching associated color values, establishing the foundational API for business logic in this module.
lib/core/usecases · high confidence
Introduction of custom toast notification widget
A new custom toast widget has been added to the application, providing users with visual feedback for actions. This widget displays a colored banner (red for errors, green for success) accompanied by an appropriate icon and flexible text content, replacing or supplementing standard system toasts with a branded appearance.
lib/features/app/presentation/widgets/misc/toast · high confidence
Local storage for city and color preferences
A new local storage implementation has been added to persist user-defined cities and their associated color values using shared preferences. This component initializes with default data (Paris, New York, Sydney) if the storage is empty, supports saving new city-color pairs, retrieving existing lists, and deleting specific cities while keeping the color list synchronized.
_lib/features/app/data/data\sources/local · high confidence
New animated summary text widget
A new presentation widget has been added to display summary text with a staggered top-and-right entrance animation. The widget splits the input text into three lines, animating each line sequentially with a 200ms delay between them using a custom TopAnimation component, and positions the initial animation state based on the device's screen height via MediaQuery.
_lib/features/app/presentation/widgets/summary\text · high confidence
New loading and weather page views with city-specific theming
The app now includes a dedicated LoadingPage that displays a colored background and a black circular progress indicator, and a WeatherPage that presents the current weather and forecast data within a menu widget. Both pages support a custom color theme and the WeatherPage specifically displays the city name in the app bar title, allowing for distinct visual styling per city.
lib/features/app/presentation/pages · high confidence
New remote API service for weather data
A new remote data source has been added in the app's feature layer to fetch current and forecast weather information. This service uses the Retrofit library to define interfaces for calling the OpenWeatherMap API, specifically targeting endpoints for current weather and forecasts. It accepts a city name as the primary query parameter and defaults to metric units for temperature and distance measurements, providing structured responses via generated code that maps directly to the app's existing weather models.
_lib/features/app/data/data\sources/remote · high confidence
New slide-in animation widgets for right and top entry effects
Two new Flutter widgets, RightAnimation and TopAnimation, have been added to the presentation layer to handle specific entry animations. RightAnimation slides content in from the right side, while TopAnimation slides content in from the top; both widgets combine position movement with opacity fading using configurable duration, curve, and initial values, allowing developers to easily apply these directional entrance effects to child widgets.
lib/features/app/presentation/widgets/animations · high confidence
New weather menu widget with city-specific theming
A new Menu widget has been introduced in the app presentation layer to display current weather conditions, a daily summary, and a weekly forecast. The widget accepts a specific color parameter, enabling distinct visual themes for different cities, and integrates with the existing dependency injection system to generate weather summaries.
lib/features/app/presentation/widgets/menu · high confidence
New weekly forecast display with staggered entry animations
The weekly forecast section now renders a horizontal list of five daily forecast cards, each showing the date, temperature, and weather icon. These cards are wrapped in a TopAnimation widget that triggers a staggered fade-and-slide-in effect from the top as the view loads, with each card appearing sequentially over a 600ms window. The layout uses fixed dimensions for the cards and includes padding between items for visual separation.
_lib/features/app/presentation/widgets/weekly\forecast · high confidence
New wrapper widgets for weather BLoCs and Cubits
Added three new presentation widgets—CitiesCubitWidget, CurrentWeatherForecastBloc, and ForecastBlocWidget—that encapsulate BLoC/Cubit state management logic. These components automatically handle loading states by displaying a LoadingPage and invoke a provided callback only when the underlying data is ready, simplifying how parent widgets consume weather-related state.
lib/features/app/presentation/bloc/widgets · high confidence
Removals
Removal of Linux, macOS, Web, and Windows platform support
The Linux, macOS, Web, and Windows platform directories have been removed from the project. This eliminates the native build configurations, source code, and assets for these platforms, meaning the application can no longer be built or run on Linux, macOS, Web, or Windows environments.
(repo-wide) · high confidence
Behavioural changes
Add animated settings button to the app bar
The app bar now includes a settings button that triggers a custom bottom sheet. This button features an animated rotation effect when tapped and passes the bottom sheet's color theme to ensure visual consistency.
lib/features/app/presentation/widgets/misc/AppBar · high confidence
Android package name change and internet permission added
The Android application's package name has been updated from com.example.weathque to com.tortamque.weathque, and the app label has been capitalized to 'Weathque'. Additionally, the INTERNET permission has been added to the AndroidManifest.xml, allowing the app to access network resources.
android · high confidence
Animated condition text widget with slide-in effect
The condition display now uses a new widget that animates the text sliding in from the top with a fade effect. The animation is triggered on load, uses a 500ms duration with an ease-out sine curve, and positions the initial state based on the screen height to ensure consistent spacing across devices.
lib/features/app/presentation/widgets/condition · high confidence
Animated weekly forecast header with staggered entrance effects
The weekly forecast header now features animated text and arrow elements that slide in from the top and right with staggered delays. The 'Weekly' and 'forecast' text fade and slide into view after 2.2 and 2.4 seconds respectively, while the arrow icon slides in from the right after 2.5 seconds, all using an easeOutSine curve. Initial positions and opacities are now derived from MediaQuery values rather than hard-coded constants, ensuring proper responsiveness across different screen sizes.
_lib/features/app/presentation/widgets/misc/headers/forecast\header · high confidence
Extracted carousel slider construction into a dedicated function
The logic for building the weather carousel slider has been moved into a new standalone function in \lib/features/app/presentation/functions/build\_carousel\_slider.dart\. This function encapsulates the retrieval of city and color data via use cases and constructs the \CarouselSlider\ widget, providing a reusable component for rendering the weather forecast slides.
lib/features/app/presentation/functions · high confidence
Initialize app with dependency injection and structured BLoC providers
The application entry point now initializes Flutter bindings and sets up dependency injection before launching the UI. The main widget has been refactored to wrap the MaterialApp in a new BlocsProviderBuilder, which centrally registers providers for weather data retrieval and city management. This replaces the previous static home page with a nested widget structure that handles city selection, current weather display, and forecast rendering through dedicated BLoC widgets.
lib · high confidence
Introduce animated summary header with fade-in effect
The summary header widget now features an entrance animation where the text fades in and slides down from the top. This is implemented by layering a transparent text placeholder with an animated version that uses a 500ms ease-out sine curve, starting with zero opacity and a vertical offset derived from the screen height. The header accepts dynamic text content and applies a black color to the animated text layer.
_lib/features/app/presentation/widgets/misc/headers/summary\header · high confidence
New animated date display widget with city-specific theming
The date presentation layer now uses a new Date widget that displays the date with an animation originating from the top and right, utilizing a reusable DateCard component. The widget accepts a specific color parameter, enabling different colors for each city, and replaces previous hard-coded initial values with MediaQuery-based positioning to improve layout adaptability.
lib/features/app/presentation/widgets/date · high confidence
Refactor current weather bloc to aggregate weather for all saved cities
The GetCurrentWeatherBloc has been restructured to fetch and display weather data for all saved cities simultaneously. Instead of handling a single city, the bloc now retrieves the list of saved cities, iterates through them to fetch individual weather reports, and aggregates the results into a Map of city names to weather entities before emitting a done state.
_lib/features/app/presentation/bloc/get\_current\weather · high confidence
Refactored bottom sheet UI into modular widgets
The bottom sheet's user interface has been restructured into three distinct, reusable components: a city list view that renders individual city cards, a dedicated text input field for adding new cities, and a city card widget that displays the city name and supports swipe-to-delete animations. This change improves code maintainability by separating the list rendering, input handling, and individual item display logic within the bottom sheet presentation layer.
_lib/features/app/presentation/widgets/misc/bottom\sheet/widgets · high confidence
Temperature display now features staggered entrance animations
The temperature widget has been refactored to animate the temperature value and degree symbol separately upon loading. The main temperature number fades in and slides down from the top after a 1-second delay, while the degree symbol follows with a right-side entrance animation after 1.4 seconds. These animations use specific durations and easing curves (easeOutSine for the number, easeOutCubic for the symbol) to create a polished, staggered visual effect.
lib/features/app/presentation/widgets/temperature · high confidence
Updated iOS app display name capitalization
The app name displayed on the iOS home screen has been changed from 'weathque' to 'Weathque' by updating the CFBundleName key in the Info.plist file.
ios · high confidence
Test coverage
Removed default Flutter widget smoke test
The default widget test file (test/widget\_test.dart) has been deleted. This removes the boilerplate test that previously verified the app's counter increments from 0 to 1 upon tapping the '+' icon, indicating that this specific automated verification of the initial app state is no longer part of the test suite.
test · high confidence
Dependencies
Initial dependency setup and Android build configuration
This change establishes the project's foundational dependencies and build settings. It adds core libraries for state management (flutter\_bloc), dependency injection (get\_it), internationalization (intl), UI components (fluttertoast, flutter\_carousel\_slider), and data persistence (shared\_preferences), alongside code-generation tools (retrofit, json\_serializable, build\_runner). It also configures the Android build to use a keystore for release signing, updates the application namespace and ID to com.tortamque.weathque, and registers weather-related assets for the app icon and UI.
(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 45 → 52 (+6.8)
- Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 98 (-1.9)
- Architecture 100 → 97 (-3.0)
- Maturity 43 → 54 (+11.2)
- Readiness 24 → 33 (+9.1)
- Security 100 → 98 (-1.6)
- Domain Modelling 61 → 62 (+0.7)
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 'Architecture' section only briefly states Clean Architecture and lists layers without elaborating on how each layer (Data/Domain/Presentation) interacts with one another or what it actually does. (README.md)
- The 'Features' section is present in the outline but not shown; features like 5-day forecast and offline support are mentioned only in the description. (README.md)
- complexity unreadable for .dart, .kt, .swift — churn × complexity hotspots could not be measured
- single-maintainer — knowledge-concentration (bus factor) risk
New (9)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no architecture or design documentation (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (3–7 lines × 5) (lib/features/app/presentation/widgets/weekly_forecast/weekly_forecast.dart)
- Duplicated block (8 lines × 2) (lib/features/app/domain/entities/forecast_weather_entity.dart)
- High CVE: [GHSA redacted] (pubspec.lock)
- MethodTooLong: _WeeklyForecastState.build (lib/features/app/presentation/widgets/weekly_forecast/weekly_forecast.dart)
- No ADRs found
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
tortamque/Weathque 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 20 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 f34e381cbb04276ccc8f3d3cbbd95169d6f15680 — 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-28e75b8e3254.