Skip to content
CAI
Software that uses CAICheck a score

fossasia/badgemagic-app

71.9

Strong · 19 September 2026

14.9k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Badge Magic is a cross-platform Flutter application designed to create, manage, and transfer LED badge content to physical devices. It provides a comprehensive interface for designing badges using text, drawings, clipart, and a wide variety of animations and visual effects. The system handles data transmission to LED badges via Bluetooth Low Energy and supports firmware updates through USB connections. It is deployed across Android, iOS, Linux, macOS, Windows, and as a Progressive Web App.

How it got here

2017–2024 — Cross-platform Flutter migration

17 changes.

The project was restructured from a single-platform Android app into a cross-platform Flutter application supporting Android, iOS, Linux, macOS, Windows, and Web. This period involved establishing the foundational multi-platform architecture, implementing core features like Bluetooth connectivity and badge creation interfaces, and adding comprehensive testing and CI/CD infrastructure.

2025–2026 — Localization, packaging, and animation features

5 changes.

This period focused on expanding the application's capabilities by adding support for Hindi, Italian, and Russian translations, alongside placeholder files for numerous other languages. Significant work was also done to introduce Debian packaging for Linux distribution and to implement a wide variety of custom LED badge animations. Under the hood, the codebase was refactored to improve maintainability through consolidated utilities and standardized logging, while unit tests were added to ensure reliability.

Features

Added CI/CD scripts for decrypting and preparing Android and iOS signing secrets

New shell scripts (prep-android-key.sh and prep-ios-key.sh) have been added to the scripts directory to automate the decryption and extraction of encrypted signing keys for Android and iOS builds during the CI pipeline. A .gitignore file has also been added to ensure sensitive artifacts like secrets.tar, fastlane.json, and .jks files are not committed to version control.

scripts · high confidence

Added web app manifest and entry point for PWA support

The web entry point (index.html) and web app manifest (manifest.json) have been added to the project. This enables the application to function as a Progressive Web App (PWA) by defining the app name, theme colors, and providing launcher icons for various screen sizes and maskable purposes, allowing users to install the app on their devices.

web · high confidence

Badge Magic app restructured for cross-platform Flutter support

The project has been rebranded from a single-platform Android app to the cross-platform 'Badge Magic' application, now supporting Android, iOS, Linux, macOS, Windows, and Web via Flutter. This change introduces a comprehensive multi-mode creation interface (Text, Draw, Clipart, Animation) with 22 animation types, 3 visual effects, and an 8-speed radial dial for controlling badge content. The app now features a tabbed UI for speed, transitions, effects, and animations, along with Bluetooth Low Energy connectivity for transferring designs to LED badges. Documentation has been updated to reflect the new architecture, coding standards, and multi-platform deployment options including App Store, Google Play, and F-Droid.

(repo-wide) · high confidence

Expanded localization support with Hindi, Italian, and Russian translations

The app now supports Hindi, Italian, and Russian languages, with full translation files provided for these locales. The English localization has also been updated to include new strings for features such as badge renaming, QR code sharing, and open-source license display. Several other language files (German, Greek, Spanish, French, Hebrew, Indonesian, Japanese, Malayalam, Burmese, Norwegian, Portuguese, Tamil, Telugu, Ukrainian, Vietnamese, and Chinese variants) have been added as placeholders to support future translation efforts.

lib/l10n · high confidence

Initial Android app structure and USB firmware update support

The Android application has been initialized with the core project structure, including launcher icons, splash screens, and necessary permissions for Bluetooth LE and camera access. A key addition is the native Java implementation in MainActivity, which establishes a MethodChannel to enable firmware updates via USB. This allows the app to detect compatible WCH devices, request USB permissions, and execute the ISP flashing protocol directly from the device.

android/app · high confidence

Initial Debian packaging support for Badge Magic

Added the necessary configuration files to build and distribute Badge Magic as a Debian package. This includes a build manifest defining the package metadata (version 1.0.0+1, dependencies like libgtk-3-0 and bluez) and a desktop entry file to integrate the application into Linux desktop environments with appropriate icons and categories.

debian · high confidence

Initial Linux desktop support for BadgeMagic

BadgeMagic is now available as a native Linux desktop application. This change introduces the complete Linux build infrastructure, including CMake configuration, GTK-based window management, and a desktop entry file, enabling users to install and run the app on Linux systems via Flatpak/Flathub.

linux · high confidence

Initial Windows desktop platform support

The application now includes the native Windows runner, enabling it to be built and executed on Windows desktop. This change introduces the CMake build configuration, the Win32 window management layer (handling DPI scaling and system themes), and the entry point that hosts the Flutter engine, allowing users to run the app as a native Windows executable.

windows · high confidence

Initial iOS project structure added for Flutter app

The iOS directory now contains the complete native project scaffolding required to build the Flutter application, including the Xcode project configuration, workspace settings, and build schemes. This setup integrates the Flutter framework and CocoaPods dependencies, configures the app bundle with the name "Badge Magic," and defines necessary permissions for Bluetooth, camera, and photo library access. The entry point uses a standard AppDelegate with implicit engine support and configures the app to use the Main storyboard for its UI.

iOS · high confidence

Initial macOS platform support added

The application now supports macOS, allowing users to run the app on Apple computers. This change introduces the native Xcode project structure, including the app bundle configuration (named 'Badge Magic'), a standard macOS menu bar, and the necessary entitlements for USB and Bluetooth device access required for the app's core functionality.

macos · high confidence

Initial project structure and core application setup

The application now includes its foundational structure, introducing a centralized theme with specific color definitions for surfaces, text, and errors, alongside a global constants file that defines animation and effect asset paths. The main entry point initializes the app with a responsive layout engine that adapts to phone and desktop viewports, registers core state management providers (including animation, font, and USB transfer providers), and configures multi-language support for English, Hindi, and Italian.

lib · high confidence

New badge animations added

The library now includes a wide variety of new animations for the LED badge, including Beating Hearts, Broken Hearts, Left Chevron, Cupid, Cycle, Diagonal, Diamond, Down, Emergency, Equalizer, Feet, Fireworks, Fish, Fixed, GIF, Laser, Left, Pacman, Picture, Right, Snowflake, and Splitting. These new animations expand the visual options available to users for their badge displays.

_lib/badge\animation · high confidence

New badge effect system and BLE state machine for transfers

This change introduces a structured effect system for LED badges, adding Flash, Invert LED, and Marquee effects that can be applied to animations. It also replaces the previous ad-hoc Bluetooth logic with a formal state machine (Scan, Connect, Write, Completed) using the universal\_ble library, which handles device discovery, connection, chunked data writing with retries, and progress updates. Additionally, it adds providers for managing badge scanning modes, font selection, and firmware updates via USB.

lib/providers · high confidence

New custom LED badge animations available

The app now supports a variety of new custom animations for LED badges, including Beating Hearts, Broken Hearts, Chevron, Cupid, Cycle, Diagonal, Diamond, Emergency, Equalizer, Feet, Fireworks, Fish, GIF, Pacman, and more. These animations are implemented in the custom transfers module and can be sent to the badge via the existing transfer mechanism.

_lib/others/custom\transfers · high confidence

Behavioural changes

Redesigned app navigation and new management screens

The app's navigation structure has been reorganized to include dedicated screens for managing saved content and app information. A new About screen displays app details, developer credits, and contact links with full localization support. The Saved Badges screen now allows users to import badges via file or QR code, delete selected items, and edit badge properties. A new Saved Clipart screen provides a gallery view for managing custom cliparts, including import and creation options. The Home screen has been updated to support USB firmware updates and improved layout handling for desktop and web platforms.

lib/view · high confidence

Redesigned badge creation interface with new widget components

The badge creation experience has been rebuilt using a new set of modular widgets in lib/view/widgets. This includes a dedicated animation tab with localized animation cards, a clipart picker, and a text input field that supports Google Fonts and restricts unsupported emojis. A new tab bar organizes controls into Speed, Transition, Effects, and Animation sections. The UI also introduces a BLE progress dialog with status-specific animations, a scan settings widget for filtering badges by name, and action buttons that conditionally show Save and Transfer options. Additionally, a new license dialog displays third-party notices, and a common scaffold standardizes the app bar and navigation drawer across screens.

lib/view/widgets · high confidence

Refactored core utilities and consolidated logging

The application's internal utility layer has been reorganized to improve code structure and maintainability. A shared logger instance has been introduced to standardize logging across the codebase. Additionally, the previous monolithic file handling logic has been split into focused, dedicated classes: \FileHelper\ now manages file I/O and caching, \ClipartImageProcessor\ handles image trimming and normalization, and \DataToByteArrayConverter\ manages the specific byte-packet formatting for badge data. Supporting utilities for byte-array manipulation, image processing, and localization persistence have also been consolidated into this location.

lib/others · high confidence

Test coverage

Added automated E2E screenshot tests for badge creation flows; Added unit tests for BadgeLoaderHelper; Added unit tests for core badge data processing and conversion utilities.

Dependencies

Android Gradle wrapper updated to version 9.7.1

The Android build system now uses Gradle 9.7.1 as the distribution version, replacing the previous wrapper configuration. This ensures that the project builds with the specified Gradle release, which may include performance improvements, bug fixes, or new features relevant to the Android application plugin and build tools.

android/gradle · high confidence

Initial project scaffolding and dependency configuration

This change introduces the foundational build configuration for the Badgemagic Flutter application. It adds the \pubspec.yaml\ manifest defining the Flutter SDK (3.47.4) and Dart SDK (3.3.4) constraints, along with direct dependencies such as \universal\_ble\, \go\_router\, \file\_picker\, and \provider\. It also includes the generated \pubspec.lock\ file, platform-specific dependency manifests (\Podfile\ for iOS/macOS, \Gemfile\ for Fastlane), and the Android Gradle build scripts (\build.gradle\, \settings.gradle\) required to compile the app.

(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

Baseline

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

Lenses

  • Code Health 79
  • Architecture 96
  • Maturity 67
  • Readiness 73
  • Security 71
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 224 feature/other, 76 fixes

By area

  • (root) — 116 commits
  • lib/view — 55 commits
  • .github/workflows — 31 commits
  • android/settings.gradle — 19 commits
  • lib/l10n — 15 commits
  • .github/actions — 14 commits
  • lib/providers — 10 commits
  • lib/bademagic_module — 9 commits
  • android/gradle — 5 commits
  • lib/main.dart — 3 commits
  • lib/others — 3 commits
  • assets/vectors — 2 commits
  • iOS/Runner — 2 commits
  • lib/badge_animation — 2 commits
  • lib/utils — 2 commits
  • linux/org.fossasia.BadgeMagic.metainfo.xml — 2 commits
  • .github/dependabot.yml — 1 commit
  • assets/animations — 1 commit
  • assets/gifs — 1 commit
  • assets/icons — 1 commit

Notable commits

  • fix: <fix: UISceneDelegate adoption Flutter migration
  • fix: Revert "chore: get keys" (#1323)
  • fix: Revert "fix: created two build versions " (#1461)
  • fix: Revert "fix: restrict unsupported emoji input in badge creator" (#1901)
  • fix: chore: Fixes Breaking of IOS Screenshot Preview (#1418)
  • fix: chore: fixed iOS screenshot workflow (#1405)
  • fix: fix(clipart): Add await to clipart cache generation to fix race condition (#1618)
  • fix: fix(saved-badges): mode, preview, edit and layout + live preview (#1754)
  • fix: fix-drawer-navigation-orientation
  • fix: fix: iOS text/animation disappearing issue after app resume (#1345)
  • fix: fix: Added visible Scrollbar on right of animation tab (#1426)
  • fix: fix: Align Spacing and Colors Between Animation and Transition Screens (#1479)
  • fix: fix: BLE Connection Fails When Transferring the Message Multiple Times to Badge (#1315)
  • fix: fix: BLE connection only allowed one update without app restart (#1334)
  • fix: fix: Bluetooth Connection Issue Despite Being Turned On (#1324)
  • fix: fix: Changed default font to default and change dropdown color to gray (#1475)
  • fix: fix: Display randomly disappears due to missing state update (#1313)
  • fix: fix: Draw clipart crashing on android 10 (#1300)
  • fix: fix: Drawer screen responsive on DESKTOP and WEB (#1763)
  • fix: fix: Eraser works correctly when shape tool is selected in Draw Badge (#1598)
  • …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

fossasia/badgemagic-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 77d9e50fb55d39551a7e5f96879eb171498f023c — 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.