Skip to content
CAI
Software that uses CAICheck a score

openfoodfacts/smooth-app

70.1

Strong · 19 September 2026

110.7k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a cross-platform mobile application for scanning and contributing to the Open Food Facts product database, built with Flutter. It provides core capabilities for barcode scanning using multiple backends, product data editing, and community-driven price tracking. The application also supports user preferences, offline data management, and in-app donations, with release automation for both Android and iOS platforms.

How it got here

2020–2021 — Initial scaffolding and core feature implementation

36 changes.

This period established the foundational architecture for the smooth\_app Flutter project, including repository setup, CI/CD pipelines, and modular package structures. It focused on implementing core user-facing features such as product scanning, onboarding, and user authentication, while introducing a new theming system and redesigned UI components for product data display.

2022–2023 — UI standardization and multi-platform expansion

50 changes.

The project established a centralized generic UI component library and design system to ensure visual consistency across the application. Concurrently, it expanded platform support to Linux and Windows while introducing a shared scanner package with multiple backend implementations. The period also saw significant architectural improvements, including a new query system, background task management, and a restructured navigation layer.

2024–2025 — UI modernization and product editing overhaul

46 changes.

This period focused on a comprehensive redesign of the user interface, introducing a V2 component library, tabbed product pages, and a unified scan carousel. It also significantly expanded product data contribution capabilities by adding dedicated flows for OCR-based editing, nutrition facts, and community tags, alongside improved search and location features.

2026 — UI overhaul and test coverage

7 changes.

This period focused on a comprehensive redesign of the homepage and food preferences interfaces, introducing multi-step wizards, new navigation components, and improved scanning views. Significant effort was also dedicated to enhancing the Knowledge Panel table rendering and expanding test coverage for data models, news feed components, and the donation feature.

Features

Add ZXing-based barcode scanner implementation

The ZXing scanner plugin package is introduced, providing a new barcode scanning capability based on the ZXing library. This implementation integrates with the shared scanner interface, offering a UI component that displays a scanner visor and supports features such as haptic feedback, camera flash toggling, and multi-camera selection. The package includes the necessary Dart source files, analysis options, and a placeholder test to satisfy CI requirements.

packages/scanner/zxing · high confidence

Added Android release automation via Fastlane

The Android build pipeline now includes Fastlane configuration files (Appfile, Fastfile, Pluginfile) to automate the release process. This setup enables automatic version code management and deployment to the Google Play Store's internal track for the \org.openfoodfacts.scanner\ package, supporting both single-app and multi-app release workflows through dedicated secret decryption scripts.

_packages/smooth\app/android/fastlane · high confidence

Added external search tiles for Forum, GitHub, and Wiki

New preference tiles have been added to the preferences page, allowing users to search the Open Food Facts Forum, GitHub issues, and Wiki directly from the app. Each tile constructs a specific search URL (e.g., GitHub searches issues within the openfoodfacts organization) and opens the result in a web view or browser when tapped.

_packages/smooth\_app/lib/pages/preferences\_v2/tiles/external\_search\tiles · high confidence

Added medal icon asset

The application now includes a new SVG icon asset for a medal, located in the smooth\_app assets directory. This graphic resource is available for use in the user interface to represent achievements or rewards.

_packages/smooth\app/assets/icons · high confidence

Added new SVG assets for UI states

The app now includes new vector graphics for visual feedback: a checkmark icon for success states, an error icon for failure states, and an empty-list illustration to display when history or search results are absent.

_packages/smooth\app/assets/misc · high confidence

Added pinch-to-zoom explanation for ingredient images

A new helper widget has been introduced to guide users on how to zoom into ingredient photos. When tapped, it displays a modal sheet containing localized instructional text and a Rive animation demonstrating the pinch-to-zoom gesture, improving usability for users interacting with product images.

_packages/smooth\app/lib/pages/product/helpers · high confidence

The scan carousel's bottom card now includes a dedicated UI component for requesting app store reviews. When the app review provider signals a request, the card displays a three-option interface (low, medium, high satisfaction) instead of the news feed. Selecting low or medium satisfaction opens a modal sheet allowing users to submit feedback via an external form or dismiss the prompt, while selecting high satisfaction redirects the user to the app store and marks the review as completed.

_packages/smooth\_app/lib/pages/scan/carousel/main\_card/bottom\cards · high confidence

CI scripts to toggle app store and scanner dependencies

New shell scripts in the CI dependencies directory now allow users to easily switch between alternative implementations for app store integration (Apple App Store, Google Play, URI store) and barcode scanning (ML Kit, ZXing) by modifying the pubspec.yaml file. These scripts automate the enabling and disabling of specific package paths, simplifying the configuration process for different build targets.

ci/dependencies · high confidence

Initial Linux desktop platform support

The Linux desktop platform is now supported for the Smoothie app. This change introduces the necessary CMake build configuration, GTK-based native entry points, and application window management code required to build and run the Flutter application on Linux desktop environments.

_packages/smooth\app/linux · high confidence

Initial iOS release automation setup for org.openfoodfacts.scanner

This change introduces the initial Fastlane configuration files (Appfile, Deliverfile, Fastfile, Matchfile, and Pluginfile) to automate the iOS release process for the org.openfoodfacts.scanner app. It establishes lanes for pushing beta builds to TestFlight, configures code signing via Match using the org.openfoodfacts/ios-certificates repository, and sets up the necessary environment for CI-driven releases, including support for multi-app beta releases via the beta\_multi lane.

_packages/smooth\app/ios/fastlane · high confidence

Initial project scaffolding and configuration for smooth\_app

The smooth\_app package is introduced as a new Flutter module containing the core application logic. This change establishes the foundational project structure by adding essential configuration files, including .gitignore and .metadata for tooling, analysis\_options.yaml for shared linting rules, and l10n.yaml for internationalization setup. It also includes documentation infrastructure via mkdocs.yml and README.md, along with settings for Dart DevTools and API documentation generation.

_packages/smooth\app · high confidence

Initial repository scaffolding and development configuration

The repository has been initialized with essential configuration files to support the Flutter application's build and development workflow. This includes an \.fvmrc\ file to enforce the use of Flutter version 3.38.7 via Flutter Version Management (FVM), a comprehensive \.gitignore\ file tailored for Dart, Flutter, Android, and iOS development environments, and a \.release-please-manifest.json\ file to track the application version (4.24.0) for automated release management.

(repo-wide) · high confidence

Initial setup of the shared scanner package scaffolding

The \packages/scanner/shared\ directory has been initialized as a new Flutter package, establishing the foundational structure for shared scanning logic. This includes configuration files for code analysis (\analysis\_options.yaml\), development tools (\devtools\_options.yaml\), and version control (\gitignore\, \.metadata\), preparing the codebase for future implementation of common scanner features.

packages/scanner/shared · high confidence

Introduce shared scanner library with public API exports

The \packages/scanner/shared/lib\ directory now contains a new \scanner\_shared.dart\ entry point that exposes the core scanning components to consumers. This library re-exports the mobile scanner controller, the main scanner implementation, a mocked scanner variant for testing, the scanner visor UI component, screen visibility utilities, and general utilities, establishing the public interface for the shared scanning functionality.

packages/scanner/shared/lib · high confidence

The app introduces a suite of new data models in the \data\_models\ directory to support core user workflows. \OnboardingLoader\ and \AbstractOnboardingData\ manage the download, local caching, and cleanup of sample product data during the initial setup. \ContinuousScanModel\ handles the state of the scanner, tracking scanned barcodes, managing the scan session history, and coordinating local database lookups with server fetches. \LocationQueryModel\ and its associated suppliers (\LocationListNominatimSupplier\, \LocationListPhotonSupplier\) enable location search functionality by querying OpenStreetMap and Photon APIs. Additionally, \PersonalizedRankingModel\ implements the logic for scoring and sorting products based on user preferences, while \ProductPreferences\ manages the loading and caching of preference metadata from assets or the network.

_packages/smooth\_app/lib/data\models · high confidence

Introduction of new generic UI widget library

The application now includes a new set of reusable UI components in the generic widget library, including a language selector modal, a responsive device builder, and themed cards, buttons, and text fields. This standardizes the visual design and interaction patterns across the app, ensuring consistent styling for elements like error states, product images, and navigation controls.

_packages/smooth\_app/lib/generic\lib/widgets · high confidence

Introduction of new generic dialog and category picker components

The app introduces two new generic UI components in the dialogs library: \SmoothAlertDialog\, a customizable alert dialog supporting horizontal or vertical button axes and neutral actions, and \SmoothCategoryPicker\, a hierarchical picker for selecting categories with breadcrumb navigation. These components provide a consistent, reusable foundation for future dialog and selection flows, replacing ad-hoc implementations.

_packages/smooth\_app/lib/generic\lib/dialogs · high confidence

Knowledge panels now support interactive action cards and a new square panel layout

The Knowledge Panel UI has been refactored to support new content types and interaction patterns. A new 'Action Card' component now renders interactive buttons for contributing data (such as adding nutrition facts, ingredients, packaging, or categories) and external actions like editing the product or reporting to Nutripatrol. Additionally, a new 'Square Panel' layout has been introduced, displaying knowledge panels in a compact, two-column grid with evaluation indicators and a modal bottom sheet for details, providing an alternative to the traditional list-based panel view.

_packages/smooth\_app/lib/knowledge\_panel/knowledge\panels · high confidence

The app now includes a dedicated gallery view for a product's "other" images (non-primary photos). This new view displays thumbnails in a grid, showing the upload date and a visual indicator for images that are over one year old. Users can tap a thumbnail to view the full image and use the "Use photo as" action to assign an existing image from this gallery to a specific product field (such as Front, Ingredients, Nutrition, or Packaging), streamlining the process of updating product data with previously uploaded photos.

_packages/smooth\app/lib/pages/image · high confidence

New App News system with donation tracking and version-based filtering

The app introduces a new \AppNews\ data model and provider to replace the previous tagline system, enabling richer in-app news content. This update adds support for displaying live fundraising figures (raised amount, goal, currency) on news cards, allowing users to see donation progress directly. It also implements version and launch-based filtering, so news items are only shown if the user's app version falls within the specified min/max range or if the app has been launched a minimum number of times. Additionally, the system now supports dark mode images for news items and allows for custom styling of news components.

_packages/smooth\_app/lib/data\_models/news\feed · high confidence

New Hunger Games question interface with image viewing and sign-in flow

The Hunger Games feature now includes a dedicated question interface that displays Robotoff questions with product context and image thumbnails. Users can view full-size images with zoom capabilities, answer questions using Yes/No/Maybe options, and sign in to submit answers if not already logged in. The interface handles loading states, errors, and provides a congratulations view upon completion.

_packages/smooth\_app/lib/pages/hunger\games · high confidence

New ML Kit-based barcode scanner implementation

This change introduces a new scanner implementation using Google ML Kit (via the \mobile\_scanner\ package) within the \packages/scanner/ml\_kit\ directory. It provides a \ScannerMLKit\ class that integrates with the existing scanner interface, supporting specific barcode formats including GS1 Sunrise 2027 standards (Data Matrix, QR Code) alongside standard 1D formats. The implementation includes lifecycle management to handle camera start/stop on app resume/pause and visibility changes, along with UI components for camera toggling and torch control.

_packages/scanner/ml\kit · high confidence

New Rive animation and smooth reveal animation components

The application now includes new reusable animation widgets in the generic library. RiveAnimation provides a wrapper for Rive animations with visibility detection and state machine support, while RiveAnimationPlayer offers a simpler player for loading Rive files from assets. Additionally, SmoothRevealAnimation introduces a configurable slide-and-fade transition effect for child widgets.

_packages/smooth\_app/lib/generic\lib/animations · high confidence

New V2 UI component library for navigation and layout

This change introduces a new set of V2 UI widgets in the application, including a responsive top bar with scroll-based elevation and height reduction, a scaffold for managing body and floating bottom bars, a reusable leading action button (back/close/minimize), and an animated bottom action bar. These components provide a consistent, modernized visual language and interaction model for screens that adopt the V2 design system.

_packages/smooth\app/lib/widgets/v2 · high confidence

New and updated product guides for Green-Score, NOVA, Nutri-Score V2, and Open Food Facts

The app now includes dedicated guide pages for Green-Score, NOVA, and Nutri-Score V2, explaining their respective scoring systems and classifications. The existing Open Food Facts guide has been updated to include links to these new guides, while new guides have been added for Open Beauty Facts, Open Pet Food Facts, Open Prices, and Open Products Facts to explain these specific open data initiatives.

_packages/smooth\app/lib/pages/guides/guide · high confidence

New app icons added to the font asset library

The app icon font source files have been updated with new SVG definitions for various UI elements. This includes currency-specific icons for adding prices (British pound, dollar, euro, ruble, rupee, Swiss franc, Turkish lira, Ukrainian hryvnia, won, and yen), as well as new icons for adding properties, adding items to lists (with multiple stylistic variants), and a generic add icon. A README has also been added to document the workflow for generating the font from these SVGs.

_packages/smooth\app/assets/fonts/icons · high confidence

New app store integration packages for Apple, Google, and URI-based stores

This change introduces a new set of packages under \packages/app\_store\ to standardize how the app interacts with external app stores. It adds \apple\_app\_store\ and \google\_play\ implementations that use the \in\_app\_review\ package to handle opening store listings and requesting user reviews, while also providing specific URLs for enrolling in beta programs (TestFlight for Apple, Internal Testing for Google). A \uri\_store\ package is also added for generic URL-based store interactions, and a \shared\ package defines the common \AppStore\ interface and a mocked implementation for testing.

_packages/app\store · high confidence

New background task system with queue-based architecture and UI badge

The app introduces a new background task management system that organizes operations into distinct queues (fast, slow, long haul) to handle uploads, downloads, and data updates asynchronously. This change adds a visual badge to the bottom navigation bar to indicate the number of pending background tasks, providing users with immediate feedback on sync status. The system supports deduplication via task stamps, persists task states in the local database for reliability, and includes specific task types for adding prices, cropping images, updating product details, and downloading products for offline use.

_packages/smooth\app/lib/background · high confidence

New customizable bottom sheet components with auto-sizing and draggable support

The app introduces a new set of bottom sheet utilities in the generic library to improve UI consistency and user interaction. A new \SmoothAutoSizeModalSheet\ automatically measures its header and body content to determine the optimal initial height, ensuring content fits without unnecessary scrolling when possible. Additionally, a \SmoothDraggableBottomSheet\ allows users to drag panels up and down with flexible height constraints, and a \SmoothListOfChoicesModalSheet\ provides a standardized, styled interface for selecting from a list of options with optional headers, footers, and icons.

_packages/smooth\_app/lib/generic\_lib/bottom\sheets · high confidence

New dedicated UI for editing ingredients and packaging via OCR

The app now features a dedicated editing interface for product ingredients and packaging information, allowing users to capture or upload photos and extract text via OCR. This new flow includes a multi-language tab bar to manage translations, a spell-checker for the extracted text (controlled by a developer preference), and specific UI elements such as an 'add extra photo' button for packaging and indicators for owner-provided fields. The implementation introduces a reusable helper architecture to support these distinct product types within the same editing paradigm.

_packages/smooth\_app/lib/pages/product/edit\ocr · high confidence

New dedicated nutrition facts editing page

Users can now edit product nutrition facts through a new, dedicated page that loads ordered nutrient data from a cache. This page provides a structured form for editing serving sizes and individual nutrient values, includes an integrated viewer for the product's nutrition image, and handles login requirements before allowing edits.

_packages/smooth\_app/lib/pages/product/nutrition\page · high confidence

New editable and reorderable list interface for simple product input

The simple input page now features a dedicated list component that supports both reordering and inline editing of items. Users can drag and drop list items to rearrange them, and tap on any item to edit its text directly within the list, with options to save or cancel changes. The interface also includes haptic feedback for reordering actions and visual cues for new items, enhancing the usability of the product data entry flow.

_packages/smooth\_app/lib/pages/product/simple\input/list · high confidence

New generic button components with AMOLED theme support

The app introduces a new set of reusable button widgets in the generic library, including SmoothSimpleButton, SmoothLargeButtonWithIcon, SmoothIconButton, SmoothButtonWithArrow, and SmoothTriStatesButton. These components provide a consistent UI for actions, large primary buttons, icon-only actions, and three-state toggles. A key behavioral update is in SmoothSimpleButton, which now explicitly renders a white border and adjusts the pressed overlay color when the AMOLED theme is active, ensuring visibility and tactile feedback on dark displays.

_packages/smooth\_app/lib/generic\lib/buttons · high confidence

New helper utilities and analytics tracking for the product app

This change introduces a suite of new helper classes in the \packages/smooth\_app/lib/helpers\ directory to support core app functionality. It adds \AnalyticsHelper\ to track user interactions such as scanning, editing, and deep linking via Matomo, and \LaunchUrlHelper\ to manage opening internal and external links, including WebView support for Open Food Facts URLs. Barcode scanning is enhanced with \BarcodeUtils\ to recognize traditional, GS1 bracketed, and Digital Link formats, while \CameraHelper\ initializes device camera availability. Additional utilities include \HapticFeedbackHelper\ for vibration feedback, \ImageComputeContainer\ for optimized image compression, and \AttributesCardHelper\ to display product attribute evaluations. These components collectively improve the app's scanning accuracy, user feedback, and analytics visibility.

_packages/smooth\app/lib/helpers · high confidence

New in-app donation screen and restructured navigation system

Users can now make donations directly within the app via a new donation page that displays configurable amounts, currency, and impact metrics (scans covered) based on the news feed, with the option to select preset tiers or enter a custom amount. This feature is integrated into a newly implemented navigation layer built on GoRouter, which replaces the previous navigator and introduces a slide-up transition animation for product pages, handles deep links by routing external URLs to either Chrome Custom Tabs (on Android) or a WebView for specific content, and provides a centralized error page for invalid routes.

_packages/smooth\app/lib/pages/navigator · high confidence

New input utilities: debounced text, autocomplete field, and tap-outside unfocus

The input page now includes three new components to improve text entry and form handling. DebouncedTextEditingController wraps a text controller to delay change notifications by 500ms, reducing the frequency of updates during typing. SmoothAutocompleteTextField provides a configurable autocomplete input with support for emoji filtering, loading indicators, and custom suggestion rendering. UnfocusFieldWhenTapOutside is a wrapper that dismisses the keyboard when the user taps outside the focused text field.

_packages/smooth\app/lib/pages/input · high confidence

New location search and favorite store capabilities

Users can now search for stores by name or address using a dedicated location search interface, with results displayed in a list that supports loading more results. Each store in the search results can be marked as a favorite via a heart icon, allowing quick access to preferred locations. Additionally, tapping the map icon on a store opens a detailed map view centered on that location, showing its name, address, and coordinates, with an option to view OpenStreetMap details.

_packages/smooth\app/lib/pages/locations · high confidence

New preference tile components for the redesigned settings page

The preferences UI now uses a new set of reusable tile widgets to support the redesigned preferences experience. A base PreferenceTile provides consistent styling, icon support, and search highlighting, while specialized tiles handle different interaction patterns: TogglePreferenceTile for on/off switches, MultipleChoicesTile for selecting from a list (with adaptive modal or draggable sheets), NavigationPreferenceTile for navigating to sub-pages or full-screen roots, SquarePreferenceTile for illustrated category cards, UrlPreferenceTile for opening links in a webview or browser, and ValueEditionPreferenceTile for inline text input with validation. These tiles replace the previous implementation in the preferences v2 tiles area, giving users a more structured and accessible settings interface.

_packages/smooth\_app/lib/pages/preferences\v2/tiles · high confidence

New preferences page design

The app now uses a redesigned preferences interface (preferences\_v2) that organizes settings into distinct cards: Contribute (prices, Hunger Games, product completion), Customize App (food, beauty, products, pets projects, app settings), Project (contribute, support), Help (FAQ, connect), and About (legal, dev mode, about). The layout includes a NutriScore V2 banner in the Help section, external search tiles for Wiki, GitHub, and Forum, and a social networks footer. Navigation to project-specific preferences opens a full-screen view, and the app settings tile is included alongside project tiles.

_packages/smooth\_app/lib/pages/preferences\v2 · high confidence

New preferences v2 card components and UI elements

The preferences interface now uses a new card-based layout system. A new PreferenceCard widget groups related settings into sections with optional titles, headers, and grid layouts. A new NutriScoreV2Banner provides an interactive guide to the NutriScore system, and a SocialNetworksFooter displays links to the app's social media channels (TikTok, Instagram, Twitter, Mastodon, Bluesky).

_packages/smooth\_app/lib/pages/preferences\v2/cards · high confidence

The app introduces two new UI components for product data display: a product image carousel item that allows users to view existing images or upload new ones, and a score card component that visually presents product attributes and knowledge panel titles with color-coded evaluations and accessibility semantics.

_packages/smooth\_app/lib/cards/data\cards · high confidence

New product list and search UI components

The product list and search experiences now use a new set of common UI components located in the \product/common\ directory. This includes a dedicated \ProductListPage\ for displaying user lists, history, and search results, along with helper classes for managing product loading states (\ProductModel\, \ProductLoadingStatus\) and list actions (popup menus for compare, rank, delete, share, and import/export). The search functionality is now handled by \ProductQueryPage\, which provides a consistent layout for query results with pull-to-refresh and back-to-top features. These changes standardize the visual presentation and interaction patterns across product lists and search screens.

_packages/smooth\app/lib/pages/product/common · high confidence

New product list management and offline data pages

Users can now manage their product lists via a new modal interface (AllProductsListModal) that supports renaming, sharing, clearing, and exporting lists, with import available in dev mode. A dedicated OfflineDataPage allows users to download top N products by type, update the local database, and clear cached data, while the OfflineTasksPage provides visibility into background task progress and failure counts. The app also introduces a HistoryPage for browsing product history and a new PageManager that conditionally renders a new HomePage or the legacy Scan tab based on user preferences.

_packages/smooth\app/lib/pages · high confidence

The product page now features a new footer action bar that replaces the previous layout. This bar includes buttons for editing the product, adding prices, comparing with similar items, adding to user lists, sharing, viewing the barcode, opening the website, reporting issues, and accessing contributor guides. Users can customize the order and visibility of these actions via a new settings modal, with preferences saved locally. The footer also supports dynamic theming and includes haptic feedback for interactions.

_packages/smooth\_app/lib/pages/product/product\page/footer · high confidence

The product page now features a dedicated gallery view that organizes product images (front, ingredients, nutrition, packaging) into tabs based on the selected language. This new interface allows users to switch between languages to view or edit specific image fields, with the tab bar automatically merging unknown and English language entries when both are present. The gallery displays the main four photos in a grid with indicators for upload status and image availability, providing a more structured way to manage product visuals compared to the previous layout.

_packages/smooth\_app/lib/pages/product/gallery\view · high confidence

New resource files for app icons and animations

This change introduces new resource files in the app's resources package to support the updated UI. The \app\_animations.dart\ file defines several Rive-based animations, including a barcode scanner animation, a cloud upload indicator, a double chevron, a hint arrow, an orange error state, and a search eye animation that adapts to light and dark themes. Additionally, \app\_icons.dart\ and its parts (\app\_food\_icons.dart\, \app\_icons\_font.dart\) define a comprehensive set of custom icons, including food-related icons (e.g., chicken, fish, milk, soda, NOVA groups) and currency-specific icons for price additions (e.g., dollar, euro, pound).

_packages/smooth\app/lib/resources · high confidence

New reusable image widget with loading and error states

A new \SmoothImage\ widget has been introduced to standardize how product images are displayed. It handles network and local image providers by showing a branded animated logo during loading and a specific 'picture not found' icon when an error occurs. The widget supports optional hero animations for smooth transitions, configurable sizing and fit, rounded corners, and accessibility labels.

_packages/smooth\_app/lib/generic\lib/widgets/images · high confidence

New reusable selector screen with auto-save and search capabilities

The application now includes a new \SmoothSelectorScreen\ widget and its associated \PreferencesSelectorProvider\ state management logic. This component provides a consistent interface for users to browse and select items from a list, featuring a persistent search bar to filter options and a bottom action bar for manual confirmation. A key behavioral change is the support for 'auto-validate' mode: when enabled, the screen automatically saves the selection and closes immediately upon picking an item, removing the need for a separate save step. This replaces or supplements previous ad-hoc selection implementations with a standardized, reusable pattern for preference settings.

_packages/smooth\_app/lib/widgets/selector\screen · high confidence

A new \ScanMainCard\ widget has been introduced to structure the main content area of the scan carousel. It conditionally displays either a full-screen search interface (\ScanSearchCard\ in expanded mode) when no news content is available, or a composite layout featuring a constrained search card above a dense bottom card when content is present. This change establishes the visual hierarchy and layout logic for the scan page's primary interaction area.

_packages/smooth\_app/lib/pages/scan/carousel/main\card · high confidence

New search entry point on the homepage main card

The homepage's main card now includes a dedicated search bar that allows users to initiate a product search directly from the home screen. Tapping the search field navigates to the search page with autofocus enabled and includes a visual logo animation to indicate the search capability.

_packages/smooth\_app/lib/pages/scan/carousel/main\_card/top\card · high confidence

New shared scanner infrastructure and UI components

This change introduces a new set of shared components for the barcode scanning feature, including a \CustomScannerController\ to manage the underlying \mobile\_scanner\ lifecycle (start/stop, torch, camera switching), a \Scanner\ abstract interface with a \MockedScanner\ implementation for testing or non-camera environments, and a \SmoothBarcodeScannerVisor\ widget that renders the scanning overlay with animated padding and corner styling. It also adds a \ScreenVisibilityDetector\ to track whether the scanning screen is visible, which helps manage camera feed state, and utility files defining the scanner interface and empty widgets.

packages/scanner/shared/lib/src · high confidence

New statistics cards in the app bar for user contributions

The app bar now displays interactive statistics cards that show counts for user-generated data, specifically products modified and prices added. These new widgets feature a custom layout with illustrations, auto-sizing text for counters and descriptions, and a refresh button to sync data with the server. Tapping a card navigates the user to the corresponding list of their contributions (e.g., their modified products or added prices).

_packages/smooth\_app/lib/generic\_lib/widgets/app\_bars/logged\_in/statistics\cards · high confidence

New tabs for personalized insights, community attributes, and pricing on the product page

The product page now includes three new tabs: the "For Me" tab displays a compatibility score graph and a list of attributes grouped by importance or evaluation based on user preferences; the "Folksonomy" tab shows community-contributed attribute tags with an optional explainer banner; and the "Prices" tab allows users to view the count of community-submitted prices for a product and add new prices, accompanied by an explainer banner. These tabs are specific to the product detail view and rely on local user preferences and community data.

_packages/smooth\_app/lib/pages/product/product\page/tabs · high confidence

New tagline news card with visibility tracking and prioritized sorting

The scan carousel now displays a dedicated news card that cycles through tagline items every 30 seconds. The feed is prioritized to show unread items first, followed by previously displayed and clicked items, with shuffling within each group. Impressions are tracked only when the card is at least 50% visible on screen, and clicks are recorded to update user preferences. Donation items open the in-app donation screen, while other items launch the associated URL.

_packages/smooth\_app/lib/pages/scan/carousel/main\_card/bottom\cards/news · high confidence

New text rendering utilities and dynamic layout support

The app introduces a new \text\ widget package providing several capabilities: \SmoothDynamicLayout\ automatically switches to a replacement widget if the primary text content exceeds available width; \TextHighlighter\ highlights search filter matches within text while correctly handling diacritics; \TextWithBoldParts\ renders text with bold sections marked by double asterisks; and various extensions (\StringExtension\, \TextStyleExtension\, \Selectable\) add helper methods for string manipulation, well-spaced typography, and selectable text support.

_packages/smooth\app/lib/widgets/text · high confidence

New theme system with AMOLED mode and color customization

The app introduces a new theming architecture in the themes package, adding an AMOLED dark mode option alongside Light, Dark, and System Default themes. This new mode allows users to customize the primary accent color (with options like Default, Blue, Cyan, Green, Magenta, Orange, Pink, Red, Rust, and Teal) and adjust text contrast levels (Low, Medium, High) for better readability on OLED screens. The implementation includes new providers (ColorProvider, TextContrastProvider, ThemeProvider) and color schemes to manage these settings, replacing previous hardcoded theme logic with a more flexible system that supports dynamic color application across the UI.

_packages/smooth\app/lib/themes · high confidence

New user management screens for login, sign-up, and password reset

The app now includes dedicated pages for user authentication: a Login page with autofill support and error handling, a Sign-Up page that collects display name, email, username, and password with validation, and a Forgot Password page for account recovery. These screens replace previous ad-hoc implementations, providing a consistent, localized, and accessible user experience for creating and managing accounts.

_packages/smooth\_app/lib/pages/user\management · high confidence

New v2 preferences page structure for About, Account, and App Settings

The preferences interface has been updated with new v2 root components for the About, Account, and App Settings sections. The About section now displays the app version, scanner type, and app store link, along with a development mode toggle. The Account section provides links to view the user profile, change passwords, and sign out, with a dedicated danger zone for account deletion. The App Settings section allows users to manage the graphical interface theme (including AMOLED mode), language, country, currency, image source, and data sharing preferences.

_packages/smooth\_app/lib/pages/preferences\v2/roots · high confidence

Product tags (folksonomy) editing with autocomplete and offline support

Users can now add, edit, and remove product tags directly within the app. The new Folksonomy page includes an edit modal with autocomplete suggestions for both tag keys and values, and tag values that look like URLs are clickable to open in a browser. Changes are saved locally first, allowing the list to be viewed and modified offline, and are synced to the server in the background.

_packages/smooth\app/lib/pages/folksonomy · high confidence

Redesigned Robotoff suggestion interface with proof images and animations

The product edit screen now displays Robotoff suggestions with a richer UI: each suggestion item includes an expandable proof image (with a hero animation to full-screen view), a toggle button to show/hide the image, and haptic feedback when confirming YES/NO answers. The list layout and styling have been updated to match the new theme colors and spacing, improving the visual clarity of AI-generated product insights.

_packages/smooth\_app/lib/pages/product/simple\input/list/suggestions · high confidence

Redesigned food preferences interface with new widgets

The food preferences section has been redesigned, introducing a new set of UI components in the widgets directory to improve the user experience. This includes an AttributeGroupPage that supports searching through attributes and displays warning banners, a dedicated UnwantedIngredientsInput widget for managing specific ingredient exclusions with autocomplete, and a SummarySection to review selected preferences. The navigation flow is now handled by a FoodPreferencesNavigationBar that adapts its buttons based on the current step, while supporting components like FoodPreferenceAttributeRow, TimelineStep, and FoodPreferencesSearchBar provide the underlying structure for the new layout.

_packages/smooth\_app/lib/pages/food\preferences/widgets · high confidence

Redesigned onboarding flow with new pages and currency selection

The onboarding experience has been rebuilt with a new multi-page flow, including a welcome screen, health and eco card examples, user preferences, and a permissions request. A new currency selector allows users to choose their preferred currency during onboarding, and the flow now includes a custom tooltip for guidance. Navigation is handled by a dedicated flow navigator, and the UI features a new bottom bar with previous/next buttons and a custom shape border for tooltips.

_packages/smooth\app/lib/pages/onboarding · high confidence

iOS app configuration and localization assets added

The iOS Runner project now includes the core configuration files required for the app to build and run, including the AppDelegate, Info.plist, and storyboards. The Info.plist explicitly locks the iPhone interface orientation to portrait mode, declares deep linking support, and defines usage descriptions for the camera and photo library. Additionally, the entry adds extensive localization files (InfoPlist.strings) for dozens of languages to translate the camera permission prompt, along with asset catalogs for the launch screen and branding image, and an entitlements file listing associated domains for universal links.

_packages/smooth\app/ios/Runner · high confidence

Architecture

Database layer refactored with unified DAO abstractions and bulk operations

The local database implementation has been restructured to use explicit DAO abstractions (AbstractDao for Hive, AbstractSqlDao for SQLite) and a new BulkManager for optimized batch inserts and deletes. This change introduces specific data access objects for folksonomy, OSM locations, and product last-access timestamps, while also adding support for transient folksonomy operations and secured string storage. For users, this provides a more robust and performant local storage foundation, particularly for bulk data handling and background task synchronization.

_packages/smooth\app/lib/database · high confidence

Windows Flutter build configuration and plugin registration

The Windows build system now includes the necessary CMake configuration to compile the Flutter engine and its C++ wrappers, alongside generated files that register the specific set of plugins used by the application. This ensures that native plugins such as audioplayers, connectivity, file selector, secure storage, permission handler, Rive, Sentry, share plus, and URL launcher are correctly linked and initialized on the Windows platform.

_packages/smooth\app/windows/flutter · high confidence

Behavioural changes

16 commits (2 fixes) modifying packages/smooth\_app/assets/animations

A change to existing behaviour in packages/smooth\_app/assets/animations — 16 commits (2 fixs), 2 files.

_packages/smooth\app/assets/animations · medium confidence · unverified

3 commits (1 fix) modifying packages/smooth\_app/assets/guides

A change to existing behaviour in packages/smooth\_app/assets/guides — 3 commits (1 fix), 73 files.

_packages/smooth\app/assets/guides · medium confidence · unverified

Added Let's Encrypt R3 root certificate for network connectivity

A PEM-encoded certificate for the Let's Encrypt R3 root authority has been added to the network assets. This inclusion allows the application to validate SSL connections to domains secured by this specific root CA, such as openfoodfacts.org, ensuring successful network requests on devices that may not have this certificate in their system trust store.

_packages/smooth\app/assets/network · high confidence

Added Xcode schemes for Runner and RunnerSatDev targets

The macOS project now includes explicit Xcode scheme definitions for the main Runner application and the RunnerSatDev variant. These new scheme files configure build, test, launch, profile, and archive actions, ensuring that the Xcode workspace has the necessary metadata to correctly build and run these specific targets on macOS.

_packages/smooth\app/macos/Runner.xcodeproj/xcshareddata · high confidence

Added iOS workspace configuration files

The iOS project now includes the standard Xcode workspace configuration files (contents.xcworkspacedata and IDEWorkspaceChecks.plist). This ensures the workspace is correctly recognized by Xcode and suppresses the 32-bit warning, providing a stable build environment for the iOS app.

_packages/smooth\app/ios/Runner.xcodeproj/project.xcworkspace · medium confidence

Android project structure and CI environment updates

The Android module now includes a .gitignore file to exclude build artifacts, Gradle wrappers, and sensitive keystore files, improving local development hygiene. Additionally, the .ruby-version file has been added to pin the Ruby runtime to version 3.4.10, ensuring consistent CI execution for Android-related tooling.

_packages/smooth\app/android · high confidence

App launch configuration now varies by store channel

The Android and iOS entry points have been restructured to explicitly configure the app based on the distribution channel. The Google Play build now uses the MLKit barcode scanner and the Google Play review SDK, while the F-Droid build switches to the ZXing barcode scanner and directs users to the F-Droid store page. The iOS entry point continues to use MLKit and the Apple App Store. This separation ensures that store-specific features, such as review prompts and barcode decoding libraries, are correctly applied for each variant.

_packages/smooth\app/lib/entrypoints · high confidence

Automated decryption of iOS AuthKey for Fastlane

A new script, decrypt\_secrets.sh, has been added to the Fastlane environment files to handle the decryption of the Apple AuthKey (AuthKey\_KDAUTTM76R.p8). This script uses GPG to decrypt the encrypted key file (.gpg) into its usable form, relying on the $AUTH\_KEY\_FILE\_DECRYPTKEY environment variable for the passphrase. This change supports the CI/CD pipeline by ensuring the necessary signing credentials are available in the correct location and format for iOS builds.

_packages/smooth\app/ios/fastlane/envfiles · high confidence

Country selector now displays localized names and reorders by user locale

The country selection interface in preferences has been updated to show country names in the user's current app language rather than raw codes or English defaults. This is achieved by introducing a new localization extension that maps ISO3 country codes to their translated names using the l10n\_countries library, with English as a fallback. Additionally, the list of countries is now automatically reordered so that the user's detected locale country appears at the top, improving discoverability. The selector UI also integrates with the app's theming and auto-sizing text components to ensure consistent display across different screen sizes and languages.

_packages/smooth\_app/lib/pages/preferences/country\selector · high confidence

The app now uses a custom HTML widget factory to render rich text content with improved visual consistency. List markers are now displayed as styled chips (for bullet points) or numbered circles (for decimal lists) instead of default browser-style markers. Links within HTML content are handled via a dedicated helper that attempts to open URLs in an in-app WebView or browser, with user-friendly error messages if a link cannot be opened. Additionally, text containing a right-arrow symbol followed by children is rendered as a styled button-like component with an external link icon, enhancing the interactivity of HTML-based content.

_packages/smooth\_app/lib/generic\lib/html · high confidence

Enforce entrypoint-based app startup and enable Android edge-to-edge mode

The application now requires launching via specific entrypoint files (e.g., \lib/entrypoints/android/main\_google\_play.dart\) rather than the generic \main.dart\, which now exits immediately to prevent direct execution. This change supports a new screenshot driver for integration tests and enables Android's edge-to-edge display mode, allowing the app content to extend behind the system navigation bar and status bar for a more immersive interface.

_packages/smooth\app/lib · high confidence

Homepage UI overhaul with new camera and list components

The homepage has been redesigned with a new flexible header that includes a search bar and a dynamic logo, alongside a new expandable camera view that slides up from the bottom with a peak view for scanning. The body now features a horizontal list component for displaying scanned products and a scan history section that shows the last 10 scanned items with product images and details.

_packages/smooth\app/lib/pages/homepage · high confidence

Knowledge panels now support action elements and simplified square panel layouts

The Knowledge Panel UI now renders 'action' elements via a dedicated action card, allowing interactive commands within panels. Additionally, the layout logic has been updated to support 'simplified' square panels: when the simplified mode is active, panel groups containing half-width panels are rendered as square cards instead of standard group cards, and panels with evaluations or half-width flags are treated as square panels. This change also introduces extension methods to determine if panels have content to display and to retrieve appropriate summary widgets for both standard and simplified views.

_packages/smooth\_app/lib/knowledge\panel · high confidence

Language selector now displays languages in English

The language selection interface in preferences now shows language names in English (e.g., "French (Français)") instead of their native names. This change ensures that users can easily identify and select their preferred language regardless of their current app language setting, improving accessibility for non-native speakers.

_packages/smooth\_app/lib/pages/preferences/language\selector · high confidence

MacOS workspace configuration updated

The macOS project workspace has been restructured to explicitly include both the main Runner project and the CocoaPods dependencies (Pods.xcodeproj) in the workspace file. This ensures that Xcode correctly recognizes and builds the project alongside its third-party dependencies.

_packages/smooth\_app/macos/Runner.xcodeproj/project.xcworkspace, packages/smooth\app/macos/Runner.xcworkspace · high confidence

New CI scripts for dependency management, testing, and F-Droid builds

The \ci/\ directory now includes dedicated shell scripts to standardize development and continuous integration workflows. \pub\_get.sh\ and \pub\_upgrade.sh\ separate reproducible dependency installation (using \pub get\ with lockfiles) from manual dependency updates (using \pub upgrade\), ensuring CI builds remain consistent. \testing.sh\ automates running Flutter tests with coverage across packages, while \update\_assets.sh\ fetches sample product data for onboarding. Additionally, \rename\_package\_name\_F-Droid.sh\ supports F-Droid packaging by adjusting the Android package identifier.

ci · high confidence

The Edit Product page has been replaced with a new implementation that adapts its editing options based on the product type (e.g., showing ingredients and trace fields for non-food items, and nutrition facts for food items). It also introduces a new slide-out footer component that provides quick access to actions like barcode scanning and contribution guides, along with a visual upload indicator for background operations.

_packages/smooth\_app/lib/pages/product/edit\product · high confidence

New UI for attribute importance and preference management

The app introduces a new interactive interface for managing product attribute importance. A new \AttributeButton\ widget replaces the previous display, allowing users to tap to enter an edit mode where they can select importance levels (Not Important, Important, Very Important, Mandatory) via radio buttons. This change is supported by new custom widgets including \AutoSizeText\ for responsive text scaling, \SmoothAppBar\ for consistent header styling with action modes, and \SmoothDropdownButton\ for selection inputs, all contributing to a more cohesive and accessible user experience for food preferences.

_packages/smooth\app/lib/widgets · high confidence

The app bar UI in the generic library has been replaced with a new set of widgets that provide a scrollable, adaptive header. A new \ProfileAppBar\ uses a custom \AppBarBackground\ painter to render a dynamic background with rounded corners, shadows, and decorative shapes that react to scroll offset. The layout now includes a dedicated \SearchBottomBar\ that integrates a search field and close button, automatically scrolling to keep the search input visible when focused. Additionally, a new \LoggedOutAppBar\ provides a distinct header for unauthenticated users, featuring authentication buttons for signing in or creating an account.

_packages/smooth\_app/lib/generic\_lib/widgets/app\bars · high confidence

New category card image caching system with SVG and raster support

The category cards now use a dedicated caching layer to display product labels (such as Nutri-Score, Eco-Score, and NOVA) more reliably. This change introduces separate cache folders for standard and tintable SVGs, allowing icons to adapt to dark mode colors. It also adds a fallback mechanism that automatically tries an alternate \/dist/\ URL path if the primary image location fails, and improves accessibility by attaching semantic labels to these score badges.

_packages/smooth\_app/lib/cards/category\cards · high confidence

New collapsible header and snap-scrolling layout for guide pages

The guides section now uses a new page layout that features a collapsible header which shrinks from a large view (with title and illustration) to a compact bar as the user scrolls, and a body that snaps to specific scroll positions for a smoother reading experience. This change also introduces a new footer component with a share button and a 'coming soon' label widget for upcoming guides, standardizing the visual structure and interaction model across all guide pages.

_packages/smooth\app/lib/pages/guides/helpers · high confidence

New country and language selector tiles in preferences

The preferences page now includes dedicated tiles for selecting the user's country and app language. The country selector displays the localized country name and its flag emoji, and when a new country is chosen, it prompts the user to update their currency if it differs from the current setting. The language selector lists available languages with their native and English names, and changing the language triggers a background refresh of product data and the news feed.

_packages/smooth\_app/lib/pages/preferences\_v2/tiles/app\_settings\tiles · high confidence

New icons added to preference pages

The preferences section now features new visual assets, including a contact icon, a contribute icon, a FAQ icon, a main icon, and a login icon. Additionally, specific contribution-related pages (hunger games, prices, and products) have been updated with new dedicated icons to improve visual distinction within the settings menu.

_packages/smooth\app/assets/preferences · high confidence

New logging infrastructure and in-app review service

The application now uses a new logging system based on Fimber that writes logs to a local file and sends them to Sentry, with specific behavior to ensure error logs are always captured as exceptions. Additionally, a new AppStore service has been introduced to allow users to open app details and request in-app reviews directly from the app.

_packages/smooth\app/lib/services · high confidence

New onboarding bottom hills component with device-aware padding

The onboarding v2 UI now includes a dedicated \OnboardingBottomHills\ widget that renders the bottom hill graphics and the 'Continue' button. This component introduces logic to handle devices without a transparent navigation bar (such as the iPhone SE) by adding a slight 4.0 padding when the system bottom padding is zero, ensuring the button is not obscured. It also applies platform-specific vertical adjustments for iOS versus other platforms to maintain consistent visual alignment.

_packages/smooth\app/lib/pages/onboarding/v2 · high confidence

New product basic details page with multilingual name support

The product editing flow now uses a dedicated AddBasicDetailsPage that consolidates name, quantity, and brand inputs. The product name field supports multilingual input, allowing users to add and edit names in multiple languages with an integrated language selector and image preview per language. The quantity field includes an explanation banner with guidance and examples, and the page provides a unified save/cancel flow with exit protection.

_packages/smooth\_app/lib/pages/product/add\_basic\details · high confidence

New product page UI components

The product page now uses a set of new, dedicated widgets to render its interface. This includes a reusable entry component for list items, a title bar with a modal sheet indicator, an explanation banner that can be dismissed by the user, a table for structured data (with support for clickable links), and a title header. These changes update the visual structure and interaction patterns of the product detail view.

_packages/smooth\_app/lib/pages/product/product\page/widgets · high confidence

New product query system with access limitations and analytics

The app now uses a new query architecture in the \query\ package to fetch product data. This includes dedicated query classes for barcodes, categories, keywords, and user-specific searches (contributor, informer, photographer, to-be-completed), as well as handling Robotoff questions. A key behavioral change is the introduction of rate limiting for product searches via \SearchProductsManager\, which enforces request thresholds (e.g., 10 requests/minute for live use, 3/minute for background tasks) to respect API access limitations. Additionally, the new \BarcodeProductQuery\ automatically tracks analytics events for obsolete products and scan/search failures, improving visibility into user interactions and error states.

_packages/smooth\app/lib/query · high confidence

New simplified interface for editing product attributes

Users can now edit specific product attributes—such as countries, traces, and folksonomy tags—via a dedicated, streamlined input page. This new UI replaces previous complex forms with a simpler list-based interface that supports adding and removing terms, provides autocomplete suggestions, and integrates Robotoff insights directly into the editing flow.

_packages/smooth\_app/lib/pages/product/simple\input · high confidence

Product page UI and contribution flow refactoring

The product page's user interface and contribution flows have been restructured. The 'Add new product' page now uses a dedicated helper class with standardized buttons and editors for fields like nutrition, packaging, and OCR. Attribute display is now driven by a new helper system that manages the first row of attributes (nutrition, ingredients, simple inputs) with expandable lists. A new comparison page allows side-by-side viewing of three products' scores and attributes. Additionally, image editing now features a dedicated button component, and language selection during editing is handled by a new tab bar widget with visual indicators for missing language states.

_packages/smooth\app/lib/pages/product · high confidence

Product page header now uses a dynamic, user-sortable tab bar

The product page header has been replaced with a new \ProductPageTabBar\ component that dynamically generates tabs based on the product's knowledge panels (such as Health, Environment, etc.) and includes hardcoded tabs for 'For Me', 'Prices', and 'Folksonomy'. Users can now see a scrollable, pinned tab bar in the product header that reflects the available information categories, and the order of these tabs is preserved locally according to the user's preferences, allowing for a personalized navigation experience within the product details view.

_packages/smooth\_app/lib/pages/product/product\page/header · high confidence

The Food Preferences screen has been rebuilt to support collapsible attribute groups (Nutritional Quality, Ingredients, Environment, etc.) that expand to reveal individual settings, and includes a new search feature to quickly locate specific preferences. The page now displays a header illustration and color, and provides a dedicated reset option for food preferences.

_packages/smooth\app/lib/pages/preferences · high confidence

Redesigned food preferences wizard with multi-step navigation

The Food Preferences screen has been completely redesigned to use a new multi-step wizard interface. Users now navigate through an introduction, individual attribute groups, and a summary page using a page controller with smooth animations. The changes introduce a new \FoodPreferencesController\ to manage the wizard state and a \PendingPreferences\ model to buffer unsaved changes before they are committed to the user's profile. The UI now includes a dedicated introduction page with a timeline of steps, a summary page that allows editing of previous selections, and a new navigation bar widget to guide the user through the process.

_packages/smooth\_app/lib/pages/food\preferences · high confidence

Redesigned logged-in app bar with user profile and statistics overview

The logged-in app bar has been updated to display a user profile picture and username at the top, with a dedicated button to manage the account. Below the header, the bar now shows two summary cards for contribution and price statistics, along with a button to view all statistics, providing a quick overview of user activity directly in the navigation bar.

_packages/smooth\_app/lib/generic\_lib/widgets/app\_bars/logged\in · high confidence

Redesigned nutrition editing interface with Robotoff extraction support

The nutrition page widgets have been completely rewritten to provide a modern, card-based editing experience. Users can now toggle whether a product has nutrition data, customize serving sizes, and switch between 'Per 100g/100ml' and 'Per serving' views. A new 'Add Nutrient' button allows users to manually include additional nutrients not currently tracked. Crucially, the editor now integrates Robotoff AI extraction: when available, extracted values are displayed with a visual indicator, and the system automatically enforces the 'Per 100g' standard for these AI-sourced figures to ensure consistency.

_packages/smooth\_app/lib/pages/product/nutrition\page/widgets · high confidence

Redesigned price addition flow with unified product input and infinite scrolling

The price addition experience has been restructured to offer a unified product input card where users can choose between scanning a barcode, manually entering a code, or selecting a product category. This new flow supports multi-product addition, allowing users to add several items in one session, and includes a dev-mode option for multi-product scanning. Additionally, all price list views now feature infinite scrolling to seamlessly load more data without manual pagination.

_packages/smooth\app/lib/pages/prices · high confidence

The product card UI in the scan carousel has been completely overhauled to provide distinct, optimized views for different product states. A new \ProductImageCarousel\ widget allows users to swipe through multiple product images. The 'found' state now displays a richer card with a prominent product picture, localized title, brand, and Nutri-Score/Eco-Score indicators, while 'not found' and 'error' states feature dedicated layouts with retry or add-product actions. A new loading state uses a Rive animation to indicate data fetching, and a template card with shimmer effects is available for placeholders. These changes improve visual clarity and user interaction during scanning.

_packages/smooth\_app/lib/cards/product\cards · high confidence

Redesigned product page with tabbed layout and scroll-aware header

The product page now uses a new tabbed interface that organizes product information into distinct sections, replacing the previous linear layout. A new sticky header dynamically adjusts its appearance based on scroll position, fading in the product title and compatibility score while adding a shadow effect. The page also includes a dedicated loading indicator banner to notify users when background operations are pending, and integrates a summary card with hero animations for smoother navigation between scan results and product details.

_packages/smooth\_app/lib/pages/product/product\page · high confidence

Redesigned product type selection with animated UI

The 'Add New Product' flow now features a new product type selection screen with a redesigned UI. Users can choose between different product categories (such as Food) using a new radio-list tile component that includes animated color transitions and SVG illustrations. This change updates the visual presentation and interaction model for selecting the product type before proceeding to the main product details entry.

_packages/smooth\_app/lib/pages/product/add\_new\product · high confidence

The scan experience has been restructured to display a persistent header bar at the top of the camera view, featuring a 'Clear' button to reset the session and a 'Compare' button to view a personalized ranking of scanned items. The bottom portion of the screen now hosts a carousel of product cards, which supports swipe-to-open navigation and provides immediate visual feedback with compatibility scores. This layout separates the scanning interface from the product results, allowing users to manage their scan list without losing the camera feed.

_packages/smooth\app/lib/pages/scan · high confidence

Redesigned search interface with product type filtering

The search experience has been overhauled with a new UI that includes a dedicated product type selector in the search bar, allowing users to filter results by category. The search page now features a persistent search history view with support for editing and removing past queries, as well as a new app bar that dynamically adjusts the back button behavior based on search state.

_packages/smooth\app/lib/pages/search · high confidence

Restores Android Quick Settings Tile and Updates MainActivity for Android 14 Compatibility

The Android app now includes a Quick Settings tile (AppMainTile) that allows users to launch the application directly from the system shade. The MainActivity implementation has been updated to handle the Android 14 API change for startActivityAndCollapse, ensuring the tile and app launch function correctly on newer Android versions without crashing.

_packages/smooth\app/android/app/src/main/kotlin · high confidence

Standardized design system and UI component library

The app introduces a centralized design system via new constants for spacing, colors, and border radii, ensuring visual consistency across interfaces. Animation timings are now managed through dedicated duration classes, and several generic UI components have been added or refined, including an empty screen layout, a stoppable loading dialog with error handling, a loading sliver for list views, and an SVG icon chip that supports NutriScore branding.

_packages/smooth\_app/lib/generic\lib · high confidence

The scan page now displays a single, shared carousel that aggregates all scanned barcodes into one continuous view, replacing the previous per-scan navigation. This new carousel automatically scrolls to the latest scanned item and supports manual swiping, while an external manager widget allows other parts of the app to programmatically control the carousel position (e.g., jumping to the search card) and receive haptic feedback.

_packages/smooth\app/lib/pages/scan/carousel · high confidence

Updated app icon assets

The app icon assets in the release build have been updated with new SVG files, including variants for light and dark modes with transparent backgrounds. This changes the visual appearance of the application icon displayed on the device.

_packages/smooth\app/assets/app · high confidence

Updated iOS minimum deployment target to 15.0

The iOS build configuration has been updated to require a minimum operating system version of 15.0. This change, reflected in the new AppFrameworkInfo.plist, ensures the app is built against the appropriate SDK constraints for modern iOS devices.

_packages/smooth\app/ios/Flutter · high confidence

Updated macOS Flutter plugin registration and build configuration

The macOS build configuration now includes explicit xcconfig files for Debug and Release modes that include CocoaPods support files, and the generated plugin registrant has been updated to register a broader set of native plugins, including FileSelectorPlugin, FlutterImageCompressMacos, and UrlLauncherPlugin, ensuring these capabilities are available in the macOS application.

_packages/smooth\app/macos/Flutter · high confidence

User preferences now support versioned migration

The app introduces a structured migration system for user preferences, allowing settings to be automatically updated when the internal data model changes. A new \UserPreferencesMigrationTool\ manages upgrades from version 1 to 3, handling specific legacy conversions such as mapping crash reporting flags to user tracking settings and initializing scan counts from first-scan indicators. This ensures that existing user data remains valid and consistent across app updates without manual intervention.

_packages/smooth\_app/lib/data\models/preferences · high confidence

Windows runner refactored to modern Flutter engine APIs

The Windows application runner has been updated to use the modern Flutter engine APIs, replacing the legacy \FlutterDesktopEngine\ and \FlutterDesktopView\ with \flutter::FlutterViewController\ and \flutter::DartProject\. This change improves window management and DPI scaling support on Windows, ensuring the app window is created and sized correctly across different display configurations.

_packages/smooth\app/windows/runner · high confidence

iOS build scheme configuration added for Xcode 15.1

The Xcode project scheme for the iOS Runner has been added, configuring the build environment for Xcode version 15.1. This update ensures that the app builds, runs, tests, profiles, and archives correctly within the specified Xcode version, including enabling GPU validation mode during debugging.

_packages/smooth\app/ios/Runner.xcodeproj/xcshareddata · high confidence

iOS project configuration updated with extensive localization support

The iOS project file (project.pbxproj) has been updated to include a comprehensive set of localization string files (InfoPlist.strings) for dozens of languages, enabling the app to display interface text in the user's preferred language. This change also ensures the project structure correctly references core iOS assets and build configurations required for the app to run.

_packages/smooth\app/ios/Runner.xcodeproj · high confidence

iOS project structure and environment updates

The iOS project directory now includes a .gitignore file to exclude build artifacts, derived data, and CocoaPods directories, and a .ruby-version file specifying Ruby 3.4.10 for consistent local and CI environments.

_packages/smooth\app/ios · high confidence

macOS Runner project structure and configuration updated

The macOS Runner target has been restructured to use a simpler, standardized project layout. This includes a new AppDelegate that ensures the application terminates after the last window is closed and supports secure restorable state, a reorganized MainMenu.xib with standard macOS menu items, and a new AppIcon asset catalog. Configuration is now managed via xcconfig files (AppInfo, Debug, Release, Warnings) which set the bundle identifier to org.openfoodfacts.app and enable strict compiler warnings. Additionally, entitlements have been defined for sandboxing, JIT execution, and network access, and the Info.plist now explicitly declares that the app uses non-exempt encryption.

_packages/smooth\app/macos/Runner · high confidence

macOS project structure reorganized for Flutter 3.13 compatibility

The macOS build configuration has been updated to support the Flutter 3.13 migration, introducing a simplified project structure with dedicated configuration groups (Configs, Flutter, Pods) and explicit entitlements for Debug/Release profiles. This change ensures the app builds correctly on macOS by properly wiring the Pods framework and Flutter assets, addressing previous setup issues that prevented the application from running on this platform.

_packages/smooth\app/macos/Runner.xcodeproj · high confidence

Fixes

Added iOS workspace configuration files

The iOS build environment now includes the \Runner.xcworkspace\ structure, specifically adding the \contents.xcworkspacedata\ file to define the workspace references for the main project and CocoaPods, along with the \IDEWorkspaceChecks.plist\ to manage Xcode workspace settings. This ensures the iOS project is correctly configured for building with its dependencies.

_packages/smooth\app/ios/Runner.xcworkspace · high confidence

New scrollable table widget for Knowledge Panels with HTML sanitization

Knowledge Panels now render HTML table content in a new, horizontally scrollable widget that properly displays icons and percentage gauges within cells. The implementation includes a new HTML tag remover to strip markup from cell text, ensuring that tooltips show clean, plain text instead of raw HTML tags. This change introduces a dedicated table extraction and rendering pipeline (SmoothTable, SmoothTableCell, ScrollableTableWidget) to handle complex table layouts and improve readability on smaller screens.

_packages/smooth\app/lib/widgets/table · high confidence

Test coverage

Added golden and accessibility tests for the User Preferences page; Added golden and accessibility tests for user management pages; Added golden tests for Contribute page bottom sheets; Added integration test for onboarding screenshots; Added localization signature checks and plural translation tests; Added placeholder test for scanner shared package; Added test utilities for golden comparisons and dependency mocking; Added tests for SmoothErrorCard widget behavior; Added tests for SmoothRevealAnimation and SmoothCategoryPicker dialogs; Added tests for barcode validation and analytics persistence; Added tests for news feed data models; Added tests for string utility and text input formatter helpers; Added tests for the Scan News Card component; Added tests for the in-app donation screen logic and UI; Added unit test for SmoothAlertDialog creation.

Dependencies

New app store and scanner package structures with Android build configuration

This change introduces new package structures for app store integrations (Apple App Store, Google Play, URI-based) and scanner implementations (ML Kit, Zxing), each with their own pubspec.yaml files. The Android build configuration has been updated to use Kotlin DSL (build.gradle.kts) with Java 17 compatibility, and the Gemfile for Android fastlane automation has been added. These changes establish the foundation for modular app store and scanner functionality while updating the Android build system to modern standards.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 9.2.0

The Android build system now uses Gradle 9.2.0 for project builds. This update ensures compatibility with the latest Gradle features and performance improvements, requiring the build environment to support this version.

_packages/smooth\app/android/gradle · high confidence

Housekeeping

Added localization maintenance documentation and ignored unsupported locale files

The localization directory now includes an AGENTS.md guide defining quality assurance rules for translation reviews (such as protecting brand names and checking placeholder syntax) and a .gitignore file that excludes generated Dart localization files and ARB files for unsupported languages, keeping the repository clean and ensuring consistent translation standards.

_packages/smooth\app/lib/l10n · 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

Baseline

  • First survey — no prior run to compare against. CAI 70.

Lenses

  • Code Health 88
  • Architecture 98
  • Maturity 68
  • Readiness 67
  • Security 65
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 235 feature/other, 65 fixes

By area

  • packages/smooth_app — 220 commits
  • .github/workflows — 64 commits
  • (root) — 8 commits
  • .github/agents — 2 commits
  • (repo) — 1 commit
  • .gemini/config.yaml — 1 commit
  • .github/dependabot.yml — 1 commit
  • .github/pull_request_template.yml — 1 commit
  • fastlane/README.md — 1 commit
  • packages/scanner — 1 commit

Notable commits

  • fix: Fix Photon request (#7301)
  • fix: Fix for invisible camera feed (#7371)
  • fix: Potential fixes for 2 code quality findings (#7599)
  • fix: Price proof picture fixes (#7237)
  • fix: fix(ci): Correct directory path for ml_kit pub package-ecosystem (#7279)
  • fix: fix: 6751 - image performance improvements (#7614)
  • fix: fix: 7093 - taking changed product types into consideration (#7226)
  • fix: fix: 7232 - clean "pop" management (#7608)
  • fix: fix: 7350 - hunger games questions use page numbers (#7368)
  • fix: fix: 7350 - let Robotoff manage the unicity of questions (#7417)
  • fix: fix: 7363 - no "set as" image operation for "OTHER" (#7612)
  • fix: fix: 7379 - currency fix decimals for prices (#7416)
  • fix: fix: 7431 - no health for OPF, sad icon instead of milk sad icon (#7619)
  • fix: fix: 7431 - now we support simplified KPs only for food (#7620)
  • fix: fix: 7473 - nutrition facts with not pinned and more compact header (#7510)
  • fix: fix: 7511 - edit folksonomy means just value edit (#7512)
  • fix: fix: 7530 - display barcode at product type selection page (#7588)
  • fix: fix: 7530 - explicitly showing when a barcode is fishy (#7579)
  • fix: fix: 7534 - bottom padding for folksonomy list (#7548)
  • fix: fix: 7536 - "no settings found" instead of "no product found" (#7537)
  • …and 280 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

openfoodfacts/smooth-app 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 19 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 65ac5001ff9bde5644f4ec94973a76383363a248 — 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-13a154b7f5d1.