Skip to content
CAI
Software that uses CAICheck a score

0niel/university-app

54.5

Adequate · 21 September 2026

183.7k

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This is a multi-tenant Flutter application serving as a comprehensive university campus platform, backed by Supabase and configurable via environment files. It provides students with core academic tools including schedule management, attendance tracking, and grade books, alongside social features like collaborative notes, mentorship, and real-time location sharing. The system also aggregates university news, forum discussions, and community events, while supporting digital NFC passes and a gamification wallet to enhance student engagement.

How it got here

2021–2023 — Multi-tenant platform architecture

30 changes.

The project was refactored from a single-purpose app into a configurable, multi-tenant Flutter platform backed by Supabase, introducing modular packages for storage, notifications, and data repositories. This period established a robust feature-first architecture with BLoC state management, expanded support to Windows and web platforms, and implemented comprehensive UI features including unified search, home screen widgets, and community integrations.

2024 — multi-platform expansion and navigation overhaul

30 changes.

This period focused on expanding the application to macOS and Linux while completely restructuring the navigation system with typed GoRouter and responsive UI components. Significant work was also dedicated to redesigning core user flows, including onboarding, the home dashboard, and profile settings, alongside introducing new features like schedule management, analytics tracking, and Discourse forum integration.

2025–2026 — comprehensive feature expansion and platform support

56 changes.

This period focused on significantly expanding the application's feature set with new modules for community interaction, gamification, and campus services, while establishing a robust, modular architecture through centralized dependency injection and dedicated repository packages. It also introduced critical platform support, including a Wear OS companion app, NFC pass integration, and a unified design system, alongside comprehensive testing and backend infrastructure updates to support these new capabilities.

Features

Add Linux desktop build support

This change adds the necessary source files and build configuration to support building the application on Linux. It introduces a CMake build system (CMakeLists.txt) that links against GTK+ 3 and the Flutter Linux library, along with native C++ entry points (main.cc, my\_application.cc) that initialize the GTK application window and register Flutter plugins. This enables the app to be compiled and run as a native desktop application on Linux distributions.

linux · high confidence

Add NFC pass card UI components and settings sheet

This change introduces the user interface for the NFC pass feature within the app. It adds a new \NfcPassCard\ widget that displays a pass ID and supports a custom media background (either an image or a looping, muted video), respecting user accessibility preferences for reduced motion. A \NfcCardSettingsSheet\ allows users to select or remove this media file and view pass details (ID, device name, status) with an option to unbind the pass. Supporting widgets include a \NfcNotConnected\ empty state with a 'How it works' guide, a \NfcPassHeader\ for navigation, and helper components for media preview and selection.

_lib/nfc\pass/widgets · high confidence

Add PackageInfoClient for retrieving app package metadata

A new PackageInfoClient class has been introduced to provide access to the application's package metadata, specifically exposing the app name, package name, and package version. This component allows the application to programmatically retrieve these details, supported by a corresponding test suite that verifies the storage and retrieval of this metadata.

_packages/package\_info\client · high confidence

Add Windows desktop support

The application now supports Windows desktop, introducing the native runner files (CMakeLists.txt, main.cpp, win32\_window, and resources) required to build and launch the Flutter app on Windows. This includes configuration for DPI awareness, dark mode theme support, and application metadata such as versioning and company information.

windows/runner · high confidence

Add contributor profile card widget

A new ContributorCard widget has been introduced to display individual contributor information, including their avatar, login name, and commit count. The card is interactive, allowing users to tap it to open the contributor's profile URL in an external application, and utilizes the app's unified design system for styling and localization.

lib/contributors/widgets · high confidence

Add iOS Home Widget for class schedule display

This change introduces a new iOS Home Widget extension that displays the user's class schedule directly on the home screen. The widget reads schedule data from a shared app group container, parses lesson details (subject, type, time, room), and renders a view showing today's and tomorrow's classes with color-coded lesson types. It includes the necessary asset catalogs, entitlements for shared data access, and configuration files to support the WidgetKit extension.

ios/HomeWidget · high confidence

Add schedule export capability

Users can now export their class schedule to a calendar application. This change introduces the state management logic (ScheduleExporterCubit) and state definitions required to handle the export process, including options for calendar name, lesson details, reminder settings, and display preferences like emojis.

_lib/schedule\management/bloc · high confidence

Add state management for community contributors list

The app now includes a dedicated BLoC implementation to manage the state for fetching and displaying a list of community contributors. This change introduces the necessary events, states, and status handling (initial, loading, loaded, failure) to support the 'community users list' feature, allowing the UI to react to data retrieval from the community repository.

lib/contributors/bloc · high confidence

Added English and Russian localization support

The app now supports English and Russian languages. This change introduces the necessary localization files (ARB source files and generated Dart classes) for both languages, enabling users to see interface text such as schedule titles, lesson types, and navigation buttons in their preferred language.

lib/l10n · high confidence

Adopts typed GoRouter navigation with new app sections

The app's navigation system has been rewritten to use GoRouter with typed routes, replacing the previous implementation. This change introduces a structured routing hierarchy with stateful shell branches for the Feed, Schedule, Map, and Services tabs. It also adds navigation support for several new features, including a global search page, a lost-and-found section, university modules, mini-apps, a wallet, and a knowledge bank, while maintaining routes for onboarding, authentication, and core schedule management.

lib/navigation/routes · high confidence

Initial Android Wear OS application scaffolding

This change introduces the foundational Android project structure for a new Wear OS application built with Flutter. It includes the main AndroidManifest declaring the watch-specific hardware feature and standalone capability, a MainActivity that integrates Samsung's rotary input plugin and configures a transparent background for rounded screens, and the necessary resource files for adaptive app icons, launch splash screens, and light/dark theme styles across development, staging, and production build variants.

wear/android · high confidence

Initial Supabase configuration for university app

Added the initial Supabase project configuration files, including \config.toml\ and \.gitignore\, to establish the local development environment for the university app. The configuration defines the project ID, enables core services such as the API, database (PostgreSQL 15), authentication, storage, and real-time subscriptions, and sets up specific email templates for user sign-up, login, and password recovery.

supabase · 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 macOS project structure, including the Xcode workspace, build configurations, and the main application entry point. It also configures the necessary system entitlements for network access and location services, which are required for features like map sharing.

macos · high confidence

Initial release of the Discourse API client package

The \discourse\_api\_client\ package has been added, providing a typed Dart client for interacting with the Discourse forum API. It exposes methods to fetch top topics, retrieve individual posts by ID, and load the full post stream for a specific topic, mapping responses to strongly-typed models (Post, TopicPost, Top, etc.) generated via Freezed and json\_serializable. The package includes robust error handling for HTTP failures and malformed responses, along with a standard project structure featuring GitHub Actions CI, Dependabot configuration, and issue/PR templates to support ongoing development.

(repo-wide) · high confidence

Introduce Gamification Wallet and Schedule Change Diff views

Users can now view a detailed breakdown of schedule updates through a new Schedule Diff screen, which categorizes lessons into new, modified, and removed items and displays specific field-level changes (such as time, teachers, or room) for each lesson. Additionally, a new Wallet feature has been added to the app, providing a centralized hub for gamification data where users can track their shuriken balance, streak days, and group rank, and switch between tabs to view earning opportunities, spending options, and transaction history.

_lib/schedule\diff, lib/wallet, scripts · high confidence

Introduce NFC pass client and connectivity client packages

This change adds two new packages to the repository. The \nfc\_pass\_client\ package provides a configurable gRPC-Web client for university NFC-pass providers, handling access token retrieval, verification code exchange, and digital pass issuance, along with a native \DigitalPassChannel\ for device-level NFC capabilities (HCE status, pass ID storage). The \connectivity\_client\ package offers a wrapper around \connectivity\_plus\ to detect Wi-Fi/Ethernet and VPN status. An example CLI application is included to demonstrate the NFC pass client workflow.

_packages/nfc\_pass\client · high confidence

Introduce NFC pass state management and security controls

This change adds the core state management logic for the NFC pass feature within the app. It introduces \NfcPassCubit\ to handle the pass lifecycle, including binding, unbinding, and verification workflows, with improved error reporting that distinguishes between unreachable backend hosts and active VPN connections. It also adds \NfcHceCubit\ to manage device NFC availability and enable/disable states, and \PassSecurityCubit\ to integrate local biometric authentication (e.g., fingerprint or face ID) for pass access. These components provide the necessary state and security infrastructure for the NFC pass to function.

_lib/nfc\pass/bloc · high confidence

Introduce NFC pass viewing and security controls

This change adds the user interface for the NFC pass feature, including a dedicated page that enforces biometric authentication (via a pass lock screen) before allowing access. The interface displays the pass card with a loading skeleton, handles verification states (such as code entry and retry timers), and provides settings to manage device binding and unbinding.

_lib/nfc\pass/view · high confidence

Introduce Wear OS companion app with schedule and NFC pass support

A new Wear OS application has been added to the project, providing a companion interface for the university app. The app features a home screen with two main sections: a class schedule viewer that syncs with a paired phone via WatchConnectivity (including caching and ambient mode support), and an NFC pass display for contactless access. The implementation includes localization for English and Spanish, a dark theme that adapts to ambient mode, and standard development workflows with three build flavors (development, staging, production).

wear · high confidence

Introduce academic calendar and GitHub client packages

This change adds two new packages to the repository. The \academic\_calendar\ package provides logic for determining academic periods, semester start dates, and week numbers, alongside a \RussianWorkCalendar\ utility that classifies days as workdays, weekends, or public holidays (including transferred days) for the years 2024–2026. The \github\ package introduces a \GithubClient\ that fetches repository contributors from the GitHub API, complete with models for contributor data and specific error handling for API request failures and malformed responses.

_packages/academic\calendar · high confidence

Introduce analytics event tracking via BLoC

The analytics module now provides a dedicated BLoC (AnalyticsBloc) for tracking user events. This component exposes a single event, AnalyticsEventTracked, which delegates to an injected AnalyticsRepository to record interactions such as viewing news or stories. The implementation uses the freezed package to define a simple initial state, ensuring a structured approach to analytics data flow within the application.

lib/analytics · high confidence

Introduce analytics repository with social sharing tracking

This change introduces the analytics repository package, providing a structured way to track user interactions via Firebase Analytics. It adds specific event models for the university app, including tracking news and story views, and notably adds a new SocialShareEvent class to monitor when users share content through the OS share menu. The repository handles platform-specific exceptions gracefully, ensuring analytics work correctly across web and desktop environments.

_packages/analytics\repository/lib · high confidence

Introduce attendance tracking and grades book features

This change adds two new campus features: an attendance tracker and a digital grades book. The attendance module allows users to log absences by subject and date, view weekly attendance statistics, and receive risk warnings for subjects with low attendance percentages. The grades book module enables users to view and manage their academic marks across different terms, including calculating GPA and tracking grade trends over time. Both features use local storage for persistence and integrate with the app's schedule data.

lib/attendance, lib/grades · high confidence

Introduce category management logic via BLoC pattern

The application now includes a dedicated category management system within the \lib/categories\ module. This change introduces a \CategoriesBloc\ that handles fetching news categories and sources from the \NewsRepository\, managing loading and error states, and tracking the user's selected category. The implementation uses the BLoC pattern with Freezed for immutable state and event handling, providing the foundational logic for category-based content filtering.

lib/categories · high confidence

Introduce centralized environment configuration for Supabase credentials

Added a new \Env\ class in \lib/env/env.dart\ to manage environment-specific configuration. This class retrieves the Supabase URL and publishable/anon keys from environment variables at compile time, providing a unified getter for the publishable key that falls back to the anon key if necessary, and includes a helper to verify if Supabase configuration is present.

lib/env · high confidence

Introduce community repository for aggregating GitHub and Discourse data

Added a new \community\_repository\ package that provides a unified interface for fetching community-related data. It aggregates GitHub repository contributors and Discourse forum content (top topics, posts, and comments) into structured, immutable response models using Freezed. The repository requires a Discourse base URL unless a custom \DiscourseApiClient\ is injected, and it exposes methods to retrieve contributor lists, paginated top topics with user metadata, individual posts, and post comments, handling API errors through specific failure types.

_packages/community\repository · high confidence

Introduce configurable partner promo banners with persistent dismissal tracking

This change adds a new promo system that displays configurable partner banners and persists user interactions such as dismissals and snoozes. The \lib/promo\ module introduces state management via \PromoBannersCubit\ (handling banner loading, caching, and impression tracking) and \PromoDismissalsCubit\ (persisting snooze and hide states locally and syncing them to the backend). The \packages/promo\_repository\ package provides the data layer, defining models like \PromoBanner\ and \PromoDismissal\, and a \PromoClient\ that communicates with Supabase RPCs (\get\_promo\_banners\, \track\_promo\_banner\_event\, \get\_promo\_banner\_dismissals\, \save\_promo\_banner\_dismissal\). UI components in \lib/promo/view\ include \PromoBannerSlot\ for displaying banners in specific placements, \PromoDetailsPage\ for viewing full banner content, and \PromoHideSheet\ for allowing users to snooze or hide banners permanently.

_lib/promo, packages/promo\repository · high confidence

Introduce dedicated article repository and news block UI packages

This change establishes two new foundational packages for the application. The \article\_repository\ package provides a centralized data layer for fetching article content, related articles, and managing local view counters via Supabase RPC and persistent storage, while defining domain models and failure types for robust error handling. Simultaneously, the \news\_blocks\_ui\ package introduces a comprehensive suite of reusable Flutter widgets for rendering news content, including article introductions, HTML blocks, image galleries, and various post layouts, supported by generated asset classes for consistent iconography.

_packages/news\_blocks\ui · high confidence

Introduce dedicated tooling for App Store, Google Play, and Firebase build workflows

This change adds a suite of new automation scripts to the \tool/\ directory to streamline release and build processes. It introduces \app\_store\_build\_status.py\ and \app\_store\_submit.py\ to programmatically verify App Store build processing states and manage review submission lifecycles. For Android, \google\_play\_internal\_release.py\ and \google\_play\_store\_icon.py\ handle internal track publishing and store icon uploads. Firebase integration is improved with \build\_web.py\ for web push builds, \configure\_firebase.py\ for mobile release configuration, and \configure\_university.dart\/\configure\_university\_provider.dart\ for generating university-specific metadata. Additional utilities include \ci\_packages.py\ and \ci\_plan.py\ for CI optimization, \export\_campus\_fixtures.py\ for map data, \generate\_brand\_assets.py\ for icon generation, and \decrypt\_release\_symbols.ps1\ for Windows symbol decryption.

tool · high confidence

Introduce generic authentication client interface and Supabase implementation

This change adds a new \auth\_client\ package that defines a generic \AuthenticationClient\ interface, supporting email/password sign-in, email links, anonymous guest sessions, and password resets, along with an \AuthenticationUser\ model and specific exception types. It also introduces a \supabase\_authentication\_client\ package that implements this interface using Supabase, including a callback handler to manage authentication flows and preserve guest sessions, and a \token\_storage\ package providing an in-memory token storage implementation. Additionally, a \preferences\_repository\ package is added to handle user preferences via Supabase RPCs, featuring a \UserPreferenceEntry\ model with revisioning to manage concurrent updates.

_packages/auth\client · high confidence

Introduce home screen state management and persistence

The home screen now uses a dedicated state management layer to handle user preferences and identity data. The new \HomeCubit\ persists app settings (such as onboarding completion) and search coach visibility using \HydratedBloc\, ensuring these preferences survive app restarts. Additionally, new cubits manage home-specific data: \HomeIdentityCubit\ loads the user's full name and handle from the gamification repository, \HomeGamificationCubit\ fetches the user's gamification profile, and \HomeStoriesCubit\ tracks which content items have been seen.

lib/home/cubit · high confidence

Introduce local notification client for lesson reminders and push notifications

Added a new local\_notifications\_client package that wraps flutter\_local\_notifications to schedule local device notifications for lesson reminders and handle push notifications. The client initializes platform-specific settings for Android, iOS, macOS, Linux, and Windows, manages notification channels (including a dedicated 'lesson\_reminders' channel), and exposes APIs to show push notifications, retrieve pending interactions, and check/request permissions. It includes error handling via custom exceptions and a PendingReminder model, with comprehensive tests verifying notification display details, payload handling across client initializations, and permission behaviors on desktop platforms.

_packages/local\_notifications\client · high confidence

Introduce mini-apps repository package with catalog, moderation, and proxy-based runtime support

A new \mini\_apps\_repository\ package provides the data layer for the mini-apps platform, enabling users to browse a catalog of mini apps, submit and manage their own apps (including draft and moderation workflows), and view insights. The repository wraps all network calls through typed failures to prevent raw Supabase exceptions from reaching the UI, and routes screen fetching and API calls through a \miniapp-proxy\ edge function, which allows for cached, offline-capable launches and secure handling of user permissions (identity, email, profile, etc.) without exposing the Supabase session to developer servers.

_packages/stac\bridge · high confidence

Introduce modular storage abstraction with persistent and secure implementations

The application now features a dedicated storage layer within the \packages/storage\ directory, introducing a unified \Storage\ interface that defines standard key-value operations (read, write, delete, clear) and a \StorageException\ for error handling. This abstraction is implemented by two new packages: \persistent\_storage\, which backs the interface using \SharedPreferences\ for general app data, and \secure\_storage\, which utilizes \flutter\_secure\_storage\ for sensitive information. This change provides a consistent API for data persistence while allowing the app to choose the appropriate storage mechanism based on security requirements.

packages/storage · high confidence

Introduce new Friends module with location sharing and friend discovery

The app now includes a new Friends section that allows users to discover and connect with other students. This update adds a 'Find Friends' feature where users can search for people, view suggestions, and send friend requests, including a bulk action to add an entire group at once. It also introduces a Friends Map that displays the real-time locations of friends and other students on campus, with privacy controls to toggle location sharing and set visibility (all, students, or none). The module handles location permissions, background tracking, and geofencing logic to ensure accurate and privacy-compliant location updates.

lib/friends · high confidence

Introduce new news feed and story viewer components

This change adds a complete news feed experience to the application, including a \FeedBloc\ for managing asynchronous data fetching, pagination, and error states for news categories. It introduces a \NewsFeedView\ with a source selection rail and a \NewsFeedContent\ widget that displays hero posts and post rows with loading skeletons and retry options. Additionally, a new \StoryViewer\ is implemented, featuring a full-screen slide viewer with progress bars, swipe-to-dismiss gestures, and media handling.

lib/feed · high confidence

Introduce new search UI components and global search entry point

The search interface now uses a dedicated set of widgets in lib/search/widgets, including a global search button that opens a search sheet, a text field with a Hero animation for transitions, and a mode selector that lets users filter results by scope (all, schedule, people, community, classrooms). Search results are displayed using new cards and list items that highlight matching query terms, support multiple item types (groups, teachers, classrooms, people, posts), and include clear actions for history items. A coach overlay with a spotlight effect guides users on how to use the search feature.

lib/search/widgets · high confidence

Introduce news repository for fetching and mapping feed data

This change adds the \news\_repository\ package, which provides the data layer for the news feed. It defines models for feed items, categories, and search results, and implements a repository that fetches data via Supabase RPC calls (\get\_news\_feed\, \get\_news\_categories\). The repository maps raw remote data into \NewsBlock\ UI components, handling card sizing logic and category aggregation, and exposes methods for loading the feed, fetching categories, and performing popular/relevant searches.

_packages/news\repository/lib · high confidence

Introduce notifications client abstraction and Firebase implementation

This change adds a new \notifications\_client\ package that defines a generic \NotificationsClient\ interface for subscribing and unsubscribing from notification categories, along with specific failure exceptions. It also introduces a \firebase\_notifications\_client\ implementation that delegates these operations to Firebase Cloud Messaging topics, including tests to verify the integration.

_packages/notifications\client · high confidence

Introduce notifications repository for managing permissions and category subscriptions

The app now includes a dedicated notifications repository that centralizes the management of notification permissions and topic subscriptions. This component handles the logic for requesting and checking notification permissions, persisting the enabled state and user-selected category preferences to local storage, and subscribing or unsubscribing from specific notification categories via the notifications client. It provides a clean interface for enabling/disabling notifications and updating category preferences, ensuring that permission states are correctly handled (including directing users to settings when permanently denied or restricted) and that storage operations are robust against malformed data.

_packages/notifications\repository · high confidence

Introduce schedule exporter repository for device calendar integration

Added a new \schedule\_exporter\_repository\ package that exports university schedule lessons and calendar events to the user's device calendar. The repository handles permission requests, creates or updates a named calendar, and deduplicates events to ensure repeated exports only update existing entries without deleting unrelated personal events. It supports both timed lessons and all-day events, with configurable reminders and optional emoji/short-type-name formatting in event titles.

_packages/schedule\_exporter\repository · high confidence

Introduce schedule repository package with unified data source exports

The new \schedule\_repository\ package exposes a consolidated set of data sources and models for the university app's scheduling features. Users benefit from a unified interface that aggregates data for deadlines, exam readiness, lesson reactions, schedule changes, and user activities, along with supporting types like schedule targets and change kinds, enabling consistent access to schedule-related information across the application.

_packages/schedule\repository/lib · high confidence

Introduce share\_launcher package for external sharing

A new \share\_launcher\ package has been added to the repository, providing a \ShareLauncher\ class that enables users to open the system's external share overlay. The implementation wraps the \share\_plus\ library, allowing the share behavior to be customized via an optional provider while ensuring that any errors during the sharing process are wrapped in a \ShareFailure\ exception for consistent error handling. Unit tests are included to verify that the provider is called correctly and that failures are properly propagated.

_packages/share\launcher · high confidence

Introduce top discussions feed with Discourse integration

Added a new top discussions section that displays trending topics from the university's Discourse forum. This feature includes a horizontal scrollable list of topic cards showing titles, excerpts, author avatars, and engagement metrics (likes and comments), along with pagination support to load more topics. The implementation uses a BLoC architecture to manage state and fetch data from the community repository, with UI components for loading skeletons, error handling, and retry actions.

_lib/top\discussions · high confidence

Introduce unified app UI package with design system and components

The \packages/app\_ui/lib\ directory now contains a new, centralized UI package that establishes the app's visual identity and component library. This includes a comprehensive color system with light and dark themes (including AMOLED support), typography definitions, and a set of reusable widgets such as avatars, badges, banners, cards, dialogs, and navigation bars. The package also provides animation presets and page transition themes to ensure consistent motion design across the application.

_packages/app\ui/lib · high confidence

Introduce unified notification inbox and schedule-change tracking

The app now features a consolidated notification system that merges push notifications with schedule changes into a single feed. This change introduces a new \NotificationsCubit\ and \NotificationInboxRepository\ to manage state, persist read statuses locally, and sync with the backend via Supabase RPCs. Users will see a new notifications sheet that displays both push alerts and schedule updates (such as room or teacher changes) with distinct visual indicators. The system tracks read states for both inbox and schedule notifications, ensuring that viewing a schedule change or reading a push notification updates the global unread count and persists the state across app restarts.

lib/notifications · high confidence

Introduce unified search with mode selection and history tracking

The search interface now supports multiple search modes (schedule, people, community, classrooms, or all), allowing users to filter results by category. The search experience includes a persistent history of recent queries that can be individually removed or cleared entirely, and displays trending searches to help users discover popular content. Search queries are debounced to optimize performance, and the system handles state transitions for loading, populated, and failure statuses across all result types.

lib/search/bloc · high confidence

Introduce user\_repository package for centralized user identity and authentication

This change introduces the new \user\_repository\ package, which centralizes user identity management and authentication workflows. It provides a \User\ model (built with Freezed) to represent authenticated, guest, and anonymous states, and a \UserRepository\ class that exposes a reactive \user\ stream to keep the UI synchronized with authentication changes. The repository handles core authentication actions including signing up, logging in via email links or passwords, signing in anonymously, and managing guest account linking. It also integrates with deep links to process email-based login flows and uses \UserStorage\ to persist and retrieve the app open count.

_packages/user\repository · high confidence

Introduction of optional university modules with Pulse host integration

Users can now access optional university-specific modules that integrate with the Pulse digital pass infrastructure. This change introduces a new module system featuring a registry for managing available services, scoped secure storage tied to specific accounts, and a host interface that bridges the app with the NFC pass repository for session management and device binding. The implementation includes UI pages for module availability and account status, ensuring that modules are only presented when the user is authenticated and the necessary hardware (NFC) is available on the device.

_lib/university\_modules, packages/university\_modules, packages/university\provider · high confidence

New Discourse forum post viewer and structured service catalog

Users can now view individual Discourse forum posts and their comments directly within the app via a new \discourse\_post\_overview\ module, which handles post details, HTML rendering, and comment lists. Additionally, the Services page has been restructured to use a new \ServicesDirectory\ and \ServiceCatalogCubit\, allowing services to be organized into categories (Campus, Study, Community, etc.) and fetched from a remote catalog, with support for marking services as favorites.

lib/services · high confidence

New Free Rooms and Lost & Found modules

This change introduces two new self-contained features within the app. The Free Rooms module provides a dedicated page to browse, search, and filter available rooms by campus, floor, and query, with real-time updates on how long a room remains free and the ability to view room photos. The Lost & Found module adds a complete workflow for reporting and managing lost or found items, including category filtering, status toggling (lost/found), deletion, and photo uploads, all managed via dedicated state and repository layers.

lib/map · high confidence

New RTU MIREA schedule API client and shared schedule data models

This change introduces a new \rtu\_mirea\_schedule\_api\_client\ package that provides a client for the RTU MIREA schedule API (\schedule-of.mirea.ru\), enabling users to search for groups, teachers, and rooms, and retrieve schedules in iCal format. It includes an \ICalParser\ to parse iCal data into structured schedule parts, handling custom metadata fields for disciplines, teachers, groups, and classrooms, along with campus location data and lesson bell times. The \schedule\ package now exposes shared data models and utilities, including \SearchData\ and \SearchItem\ for API responses, \SchedulePart\ types, and schedule diffing capabilities, forming the foundation for the redesigned university app.

_packages/rtu\_mirea\_schedule\_api\client, packages/schedule · high confidence

New ad management system with sticky and full-screen ad support

The app now includes a dedicated ad infrastructure in lib/ads, introducing a user-controllable toggle for ad visibility via the AdsBloc (persisted via HydratedBloc) and new UI components for displaying ads. Users will see a new StickyAd widget (anchored adaptive banner) integrated into the UI, which respects the user's ad preference, and a MeasuredStickyAd helper for layout calculations. Additionally, the system supports full-screen ads (interstitial and rewarded) via FullScreenAdsBloc, handling loading, retry policies, and platform-specific unit IDs for Android and iOS.

lib/ads · high confidence

New ads\_ui package for banner ad display and management

A new \ads\_ui\ Flutter package has been introduced to provide reusable UI components for displaying banner advertisements. This package includes a \BannerAd\ widget and a \BannerAdContent\ stateful widget that handles the integration with the Yandex Mobile Ads SDK, including initialization, ad loading, and event listening. It also provides an \AdsRetryPolicy\ for configuring retry logic, a \BannerAdContainer\ for consistent styling, and standard Google Ad size definitions. The package exports these components along with generated asset code for icons and custom exception classes for ad loading failures.

_packages/ads\ui · high confidence

New article reading experience with saving, sharing, and source following

The app now features a dedicated article view that allows users to read content, save articles to a personal list, and share them via the system share sheet. Users can also follow or unfollow specific news sources directly from the article page, with their preferences persisted locally. The view supports rich media including images, videos, and HTML content, and displays related articles at the bottom of the page.

lib/article · high confidence

New campus\_repository package for unified data access and collaboration

This change introduces the \campus\_repository\ package, providing a centralized data layer for the university app. It exposes a \CampusRepository\ class that handles core campus workflows—including group spaces, polls, events, and announcements—via Supabase RPC calls. The package also adds support for real-time collaborative notes with presence tracking and introduces new data models for features like free rooms and market listings.

_packages/campus\repository · high confidence

New common utility library for caching, calendar logic, and logging

The app introduces a new set of shared utilities in lib/common/utils to standardize core functionality. AppCache provides methods to estimate disk usage and clear both memory and disk image caches, while CalendarUtils handles semester start date calculations and weekly date ranges. A simple Logger singleton is now available for consistent logging, and utility functions like ninjaInitials are exposed for common string operations.

lib/common/utils · high confidence

New communities catalog and schedule state management

The app introduces a dedicated communities section, allowing users to browse, search, and save their favorite student groups and organizations via a new catalog UI and persistent join state. Simultaneously, the schedule module has been refactored to support multiple saved schedules (group, teacher, classroom) with robust remote restoration, ensuring the correct schedule is selected and synced when users switch accounts or devices.

lib/schedule · high confidence

New community catalog repository and schedule management utilities

This change introduces the \community\_catalog\_repository\ package, providing models and a Supabase-backed client to fetch organization-specific community catalogs (sections, entries, and featured items). It also adds core schedule management utilities, including \ScheduleLiveStatus\ to determine the current ongoing and next lessons, \OngoingLesson\ and \relative\_time\ helpers for displaying lesson timing, and \HomeScreenWidgetService\ to handle saving and updating the home screen schedule widget data.

(repo-wide) · high confidence

New community features: collaborative notes, deadlines, events, and mentorship

The app now includes a new community section with four distinct capabilities: collaborative notes (create, rename, change visibility, delete, and watch for updates), deadlines (create, update, toggle done, delete with undo, and filter by hot/mine/group/done), events (create, update, delete, and RSVP), and mentorship (save/delete profile, send requests, and act on requests). These features are implemented via new Cubit state management classes and Freezed state models in the lib/community directory, relying on CampusRepository and ScheduleRepository for data operations.

(repo-wide) · high confidence

New contributors list screen with loading and error states

A new ContributorsView has been added to display a horizontal list of community users. The view integrates with the ContributorsBloc to manage state, showing a skeleton loading animation while data is fetched, displaying an error card with a retry option if the request fails, and handling empty states gracefully.

lib/contributors/view · high confidence

New data layer for deadlines, exam readiness, and lesson materials

The repository now includes a comprehensive data access layer for managing deadlines, exam readiness, and lesson materials. Users can track deadlines with priority levels, sources, and progress, view their exam readiness per subject, and interact with lesson materials including uploading files, leaving reviews, and reacting to lessons. This is implemented through new data source classes (DeadlinesDataSource, ExamReadinessDataSource, LessonMaterialsDataSource, etc.) that communicate with the backend via Supabase RPC calls and storage, along with the corresponding data models (Deadline, ExamReadiness, LessonMaterial, etc.).

_packages/schedule\repository/lib/src · high confidence

New debug tools and Apple Watch connectivity support

This update introduces a new debug overlay accessible via a draggable floating action button in debug builds, providing a panel with actions to clear various caches (image, hydrated, secure storage), log out, copy access tokens, and reset onboarding. It also adds Apple Watch connectivity, allowing the app to sync pass IDs and schedules to a paired watch and respond to watch requests for binding or schedule data.

lib/debug, lib/watch, supabase/templates · high confidence

The university app now includes a dedicated deep link client and service package. The client wraps the platform's app links API to retrieve initial links and stream incoming deep links, while the service manages the lifecycle of these streams, handling initial link retrieval and error propagation via a custom failure class. This provides a unified way for the app to process deep links from both cold starts and background states.

_packages/deep\_link\client · high confidence

The navigation layer now includes a dedicated deep-link handler that normalizes incoming URLs (both custom scheme and HTTPS) against allowed paths like /feed, /schedule, and /map, and can generate shareable or app-specific links. Additionally, a tab reselection notifier has been added to allow tabs to respond when tapped again, improving interaction feedback in the app's navigation structure.

lib/navigation · high confidence

New developer tools for localization management and schedule synchronization

This update introduces several new command-line utilities and infrastructure scripts to the tools directory. For localization workflows, it adds \dedupe\_arb.dart\ to deduplicate and sort ARB JSON files, \find\_unlocalized.dart\ to scan Dart source code for hardcoded strings, and \find\_unused\_l10n.dart\ to identify unused localization keys. For schedule management, it adds a \schedule\_fetcher\ package with a \RetryingSourceClient\ that implements robust retry logic (honoring Retry-After headers and capping delays) and a source selection mechanism that probes the official MIREA schedule API before falling back to a relay. It also includes a \schedule\_relay\ component with a Node.js proxy, a PowerShell supervisor to manage a Cloudflare tunnel, and setup scripts to automate the relay's deployment on a residential machine, ensuring the GitHub Actions runner can access the schedule data despite IP restrictions. Finally, it adds a \social\_media\_fetcher\ tool with a Dockerfile and configuration examples for ingesting university news and social media content.

tools · high confidence

New friends repository package for social and location features

The \friends\_repository\ package has been added to provide a unified interface for managing social connections and location data. It introduces a \FriendsRepository\ class that communicates with Supabase via RPC calls to handle friend requests, user searches, group rosters, and location visibility settings. The package includes domain models for friends, location updates, and group members, utilizing Freezed and json\_serializable for immutable data structures and JSON serialization. It also integrates with a \NetworkLocationClient\ to support Zenly-style realtime location sharing.

_packages/friends\repository · high confidence

New interactive app tour guides users through key features

The app now includes a guided tour that walks users through the navigation bar, home feed, schedule, services catalog, and profile. This new capability uses a spotlight overlay to highlight specific UI elements and automatically navigates to the relevant screens as the user progresses through the steps.

lib/tour · high confidence

New login, sign-up, and password-reset workflows

The \lib/login\ area now provides a complete authentication suite. Users can log in with email and password, sign up for a new account, or reset a forgotten password. The login flow also supports email-link authentication (including a code-confirmation screen) and guest access. All forms enforce validation rules, such as allowed email domains and minimum password length, and provide clear error feedback for invalid credentials or network issues.

lib/login · high confidence

New media viewer for images, videos, PDFs, and files

A new media viewer has been added to the app, allowing users to view and interact with media content. The viewer supports images (with zoom and swipe navigation), videos (with playback controls), PDFs (with pinch-to-zoom and page navigation), and generic files (with open and download options). It includes features like downloading media to the device, sharing files, opening them in external apps, and handling loading and error states with retry options.

_lib/common/media\viewer · high confidence

New onboarding flow with identity and group preloading

The onboarding experience has been redesigned to include a multi-stage flow (welcome, group, identity, settings) that automatically preloads user identity and group information from the gamification repository. This change ensures that returning users see their existing details pre-filled, while new users are guided through identity verification. The flow also integrates with the schedule system to automatically request the user's group schedule upon completion and triggers an in-app tour after the onboarding is finished.

lib/onboarding/view · high confidence

New permission\_client package for managing device permissions

A new \permission\_client\ package has been introduced to centralize device permission handling. It provides a \PermissionClient\ class that wraps the \permission\_handler\ library, offering specific methods to request and check the status of notifications, foreground location, and nearby Wi-Fi device permissions, as well as a utility to open the system app settings. The package includes a comprehensive test suite to verify these interactions.

_packages/permission\client · high confidence

New profile and gamification state management

The profile section now uses a comprehensive set of new Cubits to manage user data and preferences. The ProfileCubit handles the main profile view, loading and displaying gamification elements such as quests, badges, leaderboards, and activity calendars, while the NinjaPathCubit provides a dedicated state machine for deeper gamification tracking. Additionally, new Cubits manage specific user settings: GeoSharingCubit controls location visibility and ghost mode, ProfileExtrasCubit stores bio and notification preferences, UiPreferencesCubit handles UI customizations like home screen sections and lesson colors, and StartupScreenCubit remembers the user's preferred launch screen.

lib/profile/cubit · high confidence

New profile settings, appearance customization, and gamification UI components

This change introduces a suite of new UI components and utilities within the profile section. Users can now customize the app's appearance through new settings for accent colors, AMOLED mode, and per-lesson-type color pickers, including custom color selection. The profile interface now includes an identity editing sheet for managing names and handles with availability checks, and a guest upgrade flow to link accounts. Additionally, the gamification experience is enhanced with new widgets for displaying badges, leaderboard rankings, and profile activity stats.

lib/profile/widgets · high confidence

New push notification and content ingestion services

This change introduces new Supabase Edge Functions to handle push notifications and content ingestion. The push notification system (\app-push\, \friends-push\) now supports multi-platform delivery (FCM, APNS, HMS, RuStore) via Yandex Cloud CNS, including logic to manage endpoint lifecycle, handle stale/missing endpoints, and enforce delivery time budgets. Additionally, a new content ingestion service (\ingest\) is added to securely ingest news, schedules, and community observations, featuring tenant-scoped authentication, hashed content keys, and payload validation for story media and community data.

supabase/migrations · high confidence

New schedule hub UI components

Added a new set of widgets for the schedule hub, including PrimaryScheduleCard, ScheduleHubRow, ScheduleEntityAvatar, and supporting badges and status pills. These components provide a redesigned visual interface for displaying schedule targets (groups, teachers, classrooms) with live lesson status indicators, update timestamps, and localized metadata.

_lib/schedule\management/widgets · high confidence

New schedule management hub with add, edit, and search capabilities

The app now includes a dedicated Schedule Management hub that lets users view, add, and organize their academic schedules. Users can search for and subscribe to schedules by group, teacher, or classroom via a new Add Schedule page, with results displayed in a list that indicates which items are already added. A new Edit Schedules page allows users to reorder and remove saved group, teacher, and classroom schedules, with changes reflected immediately in the hub. The hub itself displays a primary selected schedule alongside sections for groups, teachers, and classrooms, supporting pull-to-refresh and handling loading, empty, and error states.

_lib/schedule\management/view · high confidence

New unified date, time, and search picker widgets

The app introduces a new set of common UI widgets for selecting dates, times, and entities, replacing previous implementations with a consistent design system. Users will now see a redesigned date picker featuring quick-select chips (Today, Tomorrow, Next Week) and a flat calendar view, alongside a time picker that supports both single-point selection and time ranges with quick slots. A new SearchableEntityPicker widget provides debounced, asynchronous search with skeleton loading states and a manual entry fallback, while a NinjaFormInput widget standardizes form field validation and error display.

lib/common/widgets · high confidence

Project restructured as a multi-tenant Flutter platform with Supabase backend

The application has been refactored from a single-purpose university app into a configurable, multi-tenant platform. Users can now run the app with custom branding and data sources by providing a \.env\ file (containing \SUPABASE\_URL\ and \SUPABASE\_PUBLISHABLE\_KEY\) and a \config/university.local.json\ file, rather than relying on hardcoded settings. The architecture now uses a Dart workspace with feature-first BLoC state management and \yx\_scope\ for dependency injection, while data is fetched via Supabase RPCs and Edge Functions. The project also introduces a Python-based content worker for normalizing external data (RSS, Telegram, etc.) into the Supabase backend, and supports over-the-air updates via Shorebird.

(repo-wide) · high confidence

Redesigned search interface with unified views and history

The search experience has been redesigned to include a dedicated full-page SearchPage and a modal SearchSheet, both featuring a new visual style with skeleton loading states and distinct empty/failure screens. Users can now view and manage their search history directly within the search interface, with recent queries displayed in the zero-state and empty-state views. The search results are organized into a 'best match' card followed by a list of other results, supporting navigation to schedules, teacher profiles, classrooms, people, and services.

lib/search/view · high confidence

iOS app now supports Home Screen widgets

The iOS project has been updated to include a new HomeWidgetExtension target, integrating WidgetKit and SwiftUI frameworks to enable Home Screen widgets. This change adds the necessary build phases, entitlements, and source files (HomeWidget.swift) to the Xcode project, allowing the app to display dynamic content on the device's home screen.

ios/Runner.xcodeproj · high confidence

Architecture

Centralized dependency injection via new AppScope

The application now uses a unified \AppScope\ container to manage dependencies, replacing the previous scattered initialization approach. This change centralizes the setup of core services—including repositories for schedules, users, and community features, as well as initializers for Firebase, Supabase, and secure storage—into a single entry point, ensuring consistent configuration and lifecycle management across the app.

lib/di · high confidence

Introduce structured state management for mini apps

The mini apps module now uses a dedicated cubit layer to manage application lifecycle and catalog data. This change introduces state management for running mini apps (including consent handling, caching, and auto-refresh), the public catalog (search, filtering, and moderation flags), app submission workflows, usage statistics, and the moderation queue, providing a consistent reactive foundation for the mini apps experience.

_lib/mini\apps · high confidence

Behavioural changes

Added ProGuard rules for XML parsing libraries

The Android app now includes a ProGuard configuration file that preserves classes and suppresses warnings for XML parsing libraries (specifically org.xmlpull and related packages). This ensures that the application's XML processing capabilities remain intact after code shrinking and obfuscation during the build process.

android/app · high confidence

Android package rename and new schedule home screen widget

The app's Android package name has been updated from com.example.rtu\_mirea\_app to ninja.mirea.mireaapp, with the main activity now extending FlutterFragmentActivity to support native feature plugins. Additionally, a new Glance-based home screen widget has been added to display the weekly class schedule, allowing users to view today's or tomorrow's lessons directly from their device's home screen without opening the app.

android/app/src/main/kotlin · high confidence

App initialization restructured to support build flavors via separate entry points

The application now uses distinct entry points for development and production environments (main\_development.dart and main\_production.dart) to enable build flavors. Both entry points initialize the app through a new bootstrap function and utilize the AppScope for dependency injection, with the development entry point specifically enabling debug actions and logging.

lib/main · high confidence

Centralized app state and notification handling via AppBloc

The app now uses a new \AppBloc\ to manage core application state, including user authentication status, AMOLED theme preferences, and deep-link navigation triggered by push notifications. This change introduces a unified mechanism for handling Firebase messaging events, ensuring that notification destinations are correctly processed and that the app state persists across sessions. Users benefit from more reliable notification routing and consistent theme state management.

lib/app/bloc · high confidence

Centralized configuration system for university-specific settings and services

The app now uses a new, centralized configuration module in lib/config to manage university-specific settings and service endpoints. This change introduces structured configuration classes for Firebase (supporting web, Android, iOS, macOS, and Windows), NFC digital pass integration (with legacy host redirection to pulse.mirea.ru), lesson bell time slots, and feature capabilities (campus map, NFC pass, virtual tour). University-specific defaults such as organization ID, display name, allowed email domains, and session dates are now defined in UniversityConfig, allowing for easier customization and environment-based overrides via build-time environment variables.

lib/config · high confidence

Custom local storage implementation for state persistence

The application now uses a custom storage layer backed by shared\preferences to persist hydrated bloc state. This replaces the default file-system-based storage with a key-value store approach, ensuring state is saved locally on the device using a specific key prefix (\\_hydrated\bloc\\_).

lib/common · high confidence

Enhanced iOS permissions, background capabilities, and launch experience

The iOS app now requests additional permissions for Face ID, location, photo library, camera, calendar, microphone, and speech recognition, with localized usage descriptions. Background modes for fetch and remote notifications are enabled, and the app supports deep linking via a configurable URL scheme. The launch screen has been updated to include a background image layer, and the main storyboard is refreshed for modern device dimensions. Impeller is enabled for rendering, and App Tracking Transparency SKAdNetwork identifiers for various ad providers are registered.

ios/Runner · high confidence

Generated asset registry and schedule management module exports

The codebase now includes a generated asset registry (lib/gen/assets.gen.dart) that exposes the 'shorebird.yaml' file, and a new schedule management module (lib/schedule\_management) that re-exports its view and widget components for use by other parts of the application.

lib/gen · high confidence

Introduces structured local notification reminders and robust device token synchronization

This change adds a new \LocalNotificationsRepository\ package that manages lesson reminders with strict adherence to iOS pending notification limits (capping at 60) and ensures that scheduled reminders are correctly scoped to their schedule ID, preventing collisions with foreign notifications. It also introduces a \DeviceTokenSyncController\ to handle Firebase device token lifecycle management, including registration, unregistration, and rotation, alongside a helper for retrieving web push tokens, thereby stabilizing push notification delivery workflows.

_lib/app/services, packages/local\_notifications\repository · high confidence

Introduces unified app shell with edge-to-edge UI and background sync

The app now uses a new root widget structure that configures edge-to-edge system UI for a modern look and feel, and initializes a comprehensive set of state management providers (BLoCs/Cubits) for features like schedule, ads, and NFC. This shell also introduces background services that automatically synchronize device tokens and refresh schedule data while the app is in the foreground, ensuring content stays up to date without manual intervention.

lib/app/view · high confidence

NFC Pass features disabled on iOS

The NFC Pass functionality is now explicitly unavailable on iOS devices. A new availability check ensures that the feature is only supported on non-iOS platforms, effectively hiding or disabling NFC-related capabilities for users on Apple mobile devices while maintaining support for Android, macOS, Windows, Linux, and Fuchsia.

_lib/nfc\pass · high confidence

New theme customization options and lesson type color palette

Users can now choose from five accent color schemes (blue, violet, yellow, red, green) and enable an AMOLED dark mode for deeper blacks. The app also introduces a dedicated lesson type palette, assigning distinct colors to lecture, practice, lab, and other class types, with a migration logic that updates legacy green accent selections to blue. Additionally, theme mode labels (light, dark, system) are now localized for the settings UI.

lib/app/theme · high confidence

Redesigned app shell with adaptive theming and unified notification handling

The application shell has been restructured to support adaptive themes (including AMOLED mode) and a unified navigation system. A new \AdaptiveThemeWrapper\ and \AppThemeBuilder\ manage light/dark mode switching and system UI configuration, while \AppRouter\ centralizes routing and responsive breakpoints. Notification interactions are now handled by dedicated listeners (\FirebaseInteractedMessageListener\ and \LocalNotificationListener\) that navigate users to specific content and mark notifications as read. Additionally, \UserPreferencesScope\ initializes key state management cubits (startup screen, promo dismissals, friends map, notifications, and geo-sharing) upon user login.

lib/app/widgets · high confidence

Redesigned home dashboard with contextual lesson hero and unified UI components

The home screen has been rebuilt with a new \HomeDashboardPage\ and \HomeDashboardContent\ that feature a prominent, context-aware lesson hero card. This hero dynamically adapts its appearance and actions based on the current schedule state—displaying a countdown for upcoming lessons, a live progress bar for ongoing classes, break information with free-room links, or a summary of completed lessons with upcoming deadlines. The view also introduces a dedicated \HomeNoteSheet\ for adding lesson-specific notes, integrates deadlines and gamification metrics into the main feed, and standardizes the visual language across the home area using new shared widgets like \HomeGreeting\, \HomeDeadlinesGroup\, and \HomeLessonsGroup\.

lib/home/view · high confidence

Redesigned navigation shell with responsive rail and animated branch transitions

The app's navigation UI has been updated to support a responsive layout: on wider screens (≥720px), a navigation rail is displayed on the left, while smaller screens continue to use a bottom navigation bar. The underlying branch switching mechanism now uses a new \NavigationBranchContainer\ that applies animated opacity and slide transitions when switching tabs, with animations disabled for users who have reduced motion preferences enabled.

lib/navigation/view · high confidence

Redesigned navigation with unified bottom bar and rail components

The app's navigation interface has been redesigned to unify the visual style and restore core workflows. A new bottom navigation bar and navigation rail have been introduced, featuring icons for Home, Schedule, Map, Services, and Profile. The Schedule tab now displays a badge indicating unread notifications, leveraging the notifications and schedule change cubits to update the UI in real time. Navigation selection triggers haptic feedback and supports tab reselection to refresh the current view.

lib/navigation/widgets · high confidence

Redesigned onboarding experience with new steps and UI components

The onboarding flow has been completely redesigned, introducing a multi-step process that guides users through a welcome screen, identity setup with handle availability checking, group selection with search and skeleton loading states, and a settings step for configuring push notifications, location sharing, and theme preferences. New widgets include a group result row with animated selection indicators, a settings toggle row, and a theme card with segmented control, all integrated into a unified app design.

lib/onboarding/widgets · high confidence

Redesigned profile experience with new settings and account management pages

The profile section has been restructured to provide a more comprehensive user experience. The main profile page now displays gamification stats, badges, and weekly quests, with a new settings entry point. A dedicated Profile Settings page introduces a searchable interface for managing appearance, schedule, privacy, and account options. New pages have been added for Account Management (allowing password resets, sign-out, and account deletion), Notifications Settings (controlling push, schedule, and gamification alerts), and an About App page (showing open-source info, contributors, and social links). The Ninja Path (gamification) view is now accessible from the profile, and the UI has been updated to use slivers and a consistent design system.

lib/profile/view · high confidence

Removal of Flutter default template code and addition of feature exports

The default Flutter application entry point (lib/main.dart), which contained the standard counter-app template, has been removed. In its place, new barrel files have been added to export the logic and views for the Contributors, Onboarding, and Search features, indicating the integration of these specific application modules.

lib · high confidence

Structured app initialization with centralized error handling and analytics

The app's startup process has been restructured into a modular bootstrap system that initializes core services (Supabase, Firebase, Hydrated Storage, Package Info) via dedicated lifecycle components. This change introduces robust error handling: startup failures now display a user-facing error screen instead of crashing, and unhandled errors are captured by Sentry. Additionally, BLoC state changes are now automatically tracked via the Analytics Repository, providing better visibility into user interactions and state transitions.

lib/main/bootstrap · high confidence

University app web interface redesign and push notification support

The web interface has been redesigned to reflect the 'University App' branding, updating the title, description, and theme colors (blue \#2F7AFF) in index.html and manifest.json. A splash screen with light/dark mode support has been added to improve the initial load experience. Additionally, a new service worker (firebase-messaging-sw.js) enables push notifications, handling background messages and click events to navigate users to specific discourse posts or the home screen.

web · high confidence

iOS deployment target raised and tenant configuration added

The iOS minimum deployment target has been increased from iOS 8.0 to 12.0, requiring devices to run iOS 12 or later. Additionally, the build configuration files (Debug.xcconfig and Release.xcconfig) now include tenant-specific settings, setting the app display name to "Ninja Mirea" and the deep link scheme to "mireaninja", while the workspace has been updated to reference the Pods project.

ios/Flutter · high confidence

Test coverage

Added comprehensive test coverage for the Ninja UI kit; Added comprehensive test coverage for the schedule repository; Added database contract tests for push delivery, campus maps, and collaborative notes; Added tests for motion preset accessibility and reduced motion handling; Added unit and widget tests for app core, theme, and notification services; Added unit tests for NewsRepository feed and category logic; Added unit tests for the analytics repository; Added widget tests for the Wear OS app navigation and ambient mode behavior; Added widget tests for the app\_ui component library.

Dependencies

Gradle wrapper upgraded to version 9.5.1

The Android build system now uses Gradle 9.5.1 (via the wrapper) instead of the previous version 6.7. This upgrade changes the underlying build tooling used to compile and package the application, which may affect build performance and compatibility with existing plugins or custom build scripts.

android/gradle · high confidence

Initialize workspace packages and tooling dependencies

This change introduces dependency manifests for a new set of internal packages (including \app\_ui\, \academic\_calendar\, \auth\_client\, \schedule\, and various repositories) and tooling scripts (\schedule\_fetcher\, \social\_media\_fetcher\). It establishes a Dart workspace structure with SDK constraints pinned to Dart 3.7.0+ and Flutter 3.24.0+, and adds specific dependencies such as \vitepress\ for documentation, \PyYAML\ and \Pillow\ for CI, and \supabase\ for backend integration.

(dependencies) · high confidence

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

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 53 → 54 (+1.9)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 50 (-48.1)
  • Architecture 100 → 98 (-1.9)
  • Maturity 63 → 63 (-0.1)
  • Readiness 41 → 47 (+6.2)
  • Security 42 → 78 (+35.7)
  • Domain Modelling 100 → 100 (+0.0)
  • Accessibility 65 (new)

Resolved (69)

  • Coverage not included — suite not readable by the collector
  • Critical CVE: [GHSA redacted] (api/social_media_fetcher/requirements.txt)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • FileTooLong: src/web_automation_framework.dart (packages/web_oauth_interceptor_client/lib/src/web_automation_framework.dart)
  • FileTooLong: theme/theme.dart (packages/app_ui/lib/src/theme/theme.dart)
  • FileTooLong: view/custom_lesson_editor_page.dart (lib/schedule/view/custom_lesson_editor_page.dart)
  • FileTooLong: widgets/schedule_analytics.dart (lib/schedule/widgets/schedule_analytics.dart)
  • High CVE: [GHSA redacted] (api/social_media_fetcher/requirements.txt)
  • High CVE: [GHSA redacted] (api/social_media_fetcher/requirements.txt)
  • High CVE: [GHSA redacted] (api/social_media_fetcher/requirements.txt)
  • High IaC: DS-0002 (api/Dockerfile)
  • High IaC: DS-0029 (api/social_media_fetcher/Dockerfile)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 49 more

New (843)

  • (anonymous) (cognitive 16) (tools/schedule_relay/local_proxy.mjs)
  • (anonymous) (cognitive 19) (web/firebase-messaging-sw.js)
  • (anonymous) (cyclomatic 17) (web/firebase-messaging-sw.js)
  • AnalyticsStats.fromLessons (cognitive 17) (lib/schedule/view/analytics/analytics_stats.dart)
  • AppActivityHeatmap.build (cognitive 17) (packages/app_ui/lib/src/widgets/app_activity_heatmap.dart)
  • AppButton.build (cognitive 21) (packages/app_ui/lib/src/widgets/buttons/app_button.dart)
  • AppButton.build (cyclomatic 20) (packages/app_ui/lib/src/widgets/buttons/app_button.dart)
  • AppChip.build (cognitive 24) (packages/app_ui/lib/src/widgets/app_filter_chip.dart)
  • AppChip.build (cyclomatic 23) (packages/app_ui/lib/src/widgets/app_filter_chip.dart)
  • AppColors.== (cognitive 18) (packages/app_ui/lib/src/colors/colors.dart)
  • AppColors.== (cyclomatic 19) (packages/app_ui/lib/src/colors/colors.dart)
  • AppListRow.build (cognitive 16) (packages/app_ui/lib/src/widgets/app_list_row.dart)
  • AppListRow.build (cyclomatic 17) (packages/app_ui/lib/src/widgets/app_list_row.dart)
  • AppTourController._show (cognitive 27) (lib/tour/app_tour_controller.dart)
  • AppTourController._show (cyclomatic 19) (lib/tour/app_tour_controller.dart)
  • AppWeekGridCell.build (cognitive 27) (packages/app_ui/lib/src/widgets/app_week_grid_cell.dart)
  • AppWeekGridCell.build (cyclomatic 30) (packages/app_ui/lib/src/widgets/app_week_grid_cell.dart)
  • ArticleBlockView.build (cyclomatic 16) (lib/article/widgets/article_block_view.dart)
  • ArticleBody.build (cognitive 17) (lib/article/widgets/article_body.dart)
  • ArticleContentModel.fromBlocks (cyclomatic 18) (lib/article/widgets/article_content_model.dart)
  • …and 823 more

Changes since last survey

  • 98 commits — 78 feature/other, 20 fixes

By area

  • .github/workflows — 21 commits
  • test/tool — 19 commits
  • (root) — 4 commits
  • lib/map — 4 commits
  • lib/schedule — 4 commits
  • supabase/functions — 4 commits
  • lib/friends — 3 commits
  • lib/mini_apps — 3 commits
  • packages/stac_bridge — 3 commits
  • android/app — 2 commits
  • lib/l10n — 2 commits
  • lib/profile — 2 commits
  • packages/app_ui — 2 commits
  • test/gallery — 2 commits
  • docs/campus-map-backend.md — 1 commit
  • docs/shorebird-releases.md — 1 commit
  • ios/HomeWidget — 1 commit
  • ios/Podfile — 1 commit
  • ios/Runner — 1 commit
  • ios/Runner.xcodeproj — 1 commit

Notable commits

  • fix: Fix Google Play release commit request
  • fix: Fix OTA validation
  • fix: Fix Shorebird patch validation
  • fix: Fix beta release entrypoint
  • fix: Fix campus map API access (#566)
  • fix: Fix database outage and restore schedule sync (#580)
  • fix: Fix foldable viewport scaling
  • fix: Fix iOS archive signing
  • fix: Fix iOS device compatibility
  • fix: Fix iOS review requirements
  • fix: Fix iOS scene startup
  • fix: Fix iOS widget version metadata
  • fix: Fix map label interior checks (#567)
  • fix: Fix mini app runtime stalls on cached screens (#583)
  • fix: Fix mobile scaling and schedule clock (#526)
  • fix: Fix mobile services and iOS release workflows (#482)
  • fix: Fix notification navigation and system surfaces
  • fix: Fix patch workspace validation
  • fix: Fix push notification delivery
  • fix: Fix session and profile persistence (#528)
  • …and 78 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

0niel/university-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 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit e53819f73b4e9bd9ee6197e56cfed0367127dba7 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.