Skip to content
CAI
Software that uses CAICheck a score

JetBrains/kotlinconf-app

62.9

Adequate · 28 September 2026

18.8k

lines of production code

Kotlin

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a multiplatform conference application for KotlinConf that provides schedule browsing, speaker profiles, voting, and feedback capabilities across Android, iOS, Desktop, and Web clients. It features a dedicated admin interface for monitoring vote tallies and exporting data, backed by a Ktor server that manages persistent storage and integrates with external conference data sources. The architecture utilizes Compose Multiplatform for the UI and Metro for dependency injection, supporting adaptive layouts and deep-linking.

How it got here

2017–2025 — Initial project scaffolding and backend foundation

7 changes.

This period established the foundational structure for the KotlinConf application, including multiplatform module organization, core data models, and comprehensive documentation. It focused on building a modular Ktor backend with PostgreSQL persistence, automated release processes, and robust test coverage to ensure data integrity and API reliability.

2026 — multi-platform app initialization and admin panel

14 changes.

This period focused on establishing the foundational infrastructure for the KotlinConf 2026 application across Android, iOS, and desktop platforms, including migrating dependency injection to Metro and configuring native project structures. Significant work also involved implementing a new multi-tab navigation system with deep-linking, enhancing the UI with adaptive layouts and dark mode support, and launching a dedicated Compose-based admin panel for conference data management.

Features

Android app initialization and dependency injection setup

The Android application module now includes the core infrastructure files required to launch and configure the app. This includes the AndroidManifest.xml defining the main activity, permissions, and Firebase notification settings, alongside a new dependency injection graph (AndroidAppGraph) that initializes the app using the Metro framework. Additionally, the app now features a new adaptive icon with a monochrome variant, a splash screen theme, and the necessary resource files (colors, strings, backup rules) to support the initial user experience.

app/androidApp · high confidence

Android notification and platform integration

The Android shared module now includes the necessary manifest permissions (POST\_NOTIFICATIONS, SCHEDULE\_EXACT\_ALARM) and an AlarmBroadcastReceiver to support scheduled local notifications. An Android-specific LocalNotificationService implementation handles permission requests, alarm scheduling, and notification display, while companion files provide Android-specific bindings for dependency injection, logging, and platform utilities.

app/shared · high confidence

Initial project scaffolding and documentation

The repository has been initialized with the core structure for the KotlinConf app, including the Gradle wrapper, build scripts, and a comprehensive project guide (CLAUDE.md) detailing the module layout, architecture, and run commands. This entry also adds standard project governance files such as CONTRIBUTING.md, CODE\_OF\_CONDUCT.md, and .editorconfig, alongside configuration for Heroku deployment (Procfile, app.json) and a cleanup script.

(repo-wide) · high confidence

Introduce core data models for conference, speakers, sessions, and Golden Kodee awards

The core module now defines the primary data structures used by the application, including Conference, Session, Speaker, and AppConfig (which sets 2026 as the current year). New models support the Golden Kodee awards feature with Nominee and AwardCategory classes, and introduce ConferenceInfo for managing venue details, floor maps, and partner information. These shared serializable models provide the foundation for displaying session data, speaker profiles, and award nominations across the app.

core · high confidence

Introduce hosted Compose HTML admin panel SPA

The admin interface is now a standalone Single Page Application (SPA) served from the /admin path. This new client-side app provides an overview of conference data with histogram charts for vote distributions, allows admins to download feedback and votes as CSV files, and supports drilling down into individual user activity via deterministic pseudo-names (e.g., "Brave Otter") that map to user UUIDs without requiring server-side storage.

app/adminApp · high confidence

The app now features a multi-tab navigation structure with a new Golden Kodee tab, replacing the previous single-tab layout. Users can navigate between Schedule, Speakers, Golden Kodee, Map, and Info screens, with support for deep-linking to specific sessions and speakers via notifications. The navigation system includes a back stack for each tab, allowing independent navigation history per tab, and respects a flag to control back navigation behavior on top-level screens.

shared · high confidence

New Compose HTML admin panel for conference data

A new single-page admin application has been added, built with Compose for Web, to replace or supplement the previous admin interface. It provides an overview dashboard displaying per-session vote tallies (good/ok/bad), calculated rating and popularity scores, and user feedback. The interface supports filtering by keyword, minimum vote count, and feedback presence, as well as sorting by various metrics. It also includes charts for vote distributions and allows exporting the filtered data to CSV. The app loads conference data, votes, and feedback via API endpoints and persists the selected year in local storage.

adminApp · high confidence

New icon assets and Android dark-mode theme support

The app now includes a comprehensive set of new vector icons (arrows, bookmarks, clocks, close, info, and awards) in both outline and filled styles at 16, 24, and 28dp sizes, along with a dark-mode background asset for error animations. Additionally, the Android theme module now provides a \LocalAppTheme\ implementation that detects the system's dark mode and allows the app to programmatically override the UI mode, ensuring consistent appearance across light and dark themes.

app/ui-components · high confidence

New large-screen UI components and navigation rail

The ui-components library introduces a suite of new composables designed for large-screen and adaptive layouts, including a MainNavigationRail with multi-backstack support, a LargeSearchBar, a LargeSwitcher for day selection, and a DayHeader for conference schedules. Additionally, new interactive components such as Action, CardTag, Filters, HeaderToggleButton, and a redesigned FeedbackForm with emotion-based Kodee icons are added to support the updated v2 design system and enhanced user interactions.

ui-components · high confidence

Web app now renders emojis and displays branded splash screens

The web application now supports full emoji rendering by loading the Noto Color Emoji font, ensuring that special characters display correctly across all browsers. Additionally, the app now features branded splash screens for both light and dark modes, which appear as the background while the application loads, improving the initial visual experience.

app/webApp · high confidence

iOS app project structure and configuration established

The iOS application project (KotlinConf.xcodeproj) has been initialized with a standard Xcode structure, including the main Swift entry point (iOSApp.swift), a content view, and asset catalogs. The configuration integrates Firebase (FirebaseCore and FirebaseMessaging) via Swift Package Manager and includes necessary resources such as a privacy manifest (PrivacyInfo.xcprivacy) and GoogleService-Info.plist. The build scheme is configured to compile Kotlin sources as part of the build process, enabling the native iOS app to interface with the shared Kotlin codebase.

app/iosApp/KotlinConf.xcodeproj · high confidence

Behavioural changes

Automated release preparation and version bumping

A new Gradle script (gradle/releases.gradle.kts) introduces the 'prepareRelease' task, which orchestrates the release process by first invoking 'updateVersion' and 'exportLibraryDefinitions'. The 'updateVersion' task automatically increments the app version code and name across Android (build.gradle.kts), iOS (project.pbxproj and Info.plist), and shared resources (version.xml), while validating that all platforms remain synchronized before applying the changes.

gradle · high confidence

Backend application structure and data persistence overhaul

The backend has been restructured into a modular Ktor application with explicit DI, routing, and plugin setup. It now persists user identities, policy signatures, votes, and feedback to a PostgreSQL database (falling back to H2) using Exposed v1, with schema definitions and migration support. The API exposes year-agnostic endpoints (health, time, config, admin panel SPA, sessionize sync) and year-scoped routes for schedule, voting, feedback, user policy signing, documents, conference info, partner logos, maps, and image proxying. Archived conference data is served from embedded JSON resources for past years, while live data comes from Sessionize, and startup validation ensures data integrity for archives, conference info, Golden Kodee, and required documents.

backend/src/main/kotlin · high confidence

Database schema migration system and initial schema definition

The application now uses a SQL-based migration system (V001–V004) to manage database state, replacing the previous programmatic schema creation. This introduces the Users, Votes, Feedback, and SignedPolicies tables, adds a 'year' column to Votes and Feedback, and corrects table name casing issues to ensure compatibility across H2 and PostgreSQL environments.

backend/src/main/resources/db · high confidence

Desktop app entry point and release configuration

The desktop application now includes a dedicated main entry point that initializes the UI using the Metro dependency injection graph and configures the window with the app name from localized resources. To support release builds, a ProGuard configuration file has been added to suppress warnings for optional OkHttp dependencies and preserve necessary Ktor, SLF4J, and Kotlin serialization classes.

app/desktopApp · high confidence

Migrate Android dependency injection from Koin to Metro

The Android application now uses Metro for dependency injection instead of the previous Koin implementation. This change updates the application entry point to initialize the Metro graph and provide it to the rest of the app, ensuring that all dependency resolution follows the new Metro-based architecture.

androidApp · high confidence

Updated Gradle wrapper to version 9.6.1

The Gradle wrapper has been updated to use Gradle 9.6.1. This change ensures that the project builds using this specific version of the Gradle build tool, which may include new features, performance improvements, and bug fixes compared to previous versions. Users will automatically download and use this version when running Gradle commands.

gradle/wrapper · high confidence

iOS app rebranded for KotlinConf 2026 with new icon and Firebase integration

The iOS application has been updated to reflect the KotlinConf 2026 branding, featuring a new app icon composed of eye, head, and pupil assets, and a custom launch screen image. The app now integrates Firebase Cloud Messaging for push notifications, including foreground display handling and remote notification processing, and supports English and German locales.

app/iosApp/iosApp · high confidence

iOS app workspace and privacy manifest added

The iOS application now includes a dedicated Xcode workspace (KotlinConf.xcworkspace) to manage project references and a PrivacyInfo.xcprivacy manifest. This manifest declares the specific API categories the app accesses—disk space, user defaults, and file timestamps—ensuring compliance with Apple's privacy requirements for App Store submissions.

app/iosApp, app/iosApp/KotlinConf.xcworkspace · high confidence

Test coverage

Added comprehensive backend test coverage

New integration and unit tests have been added to the backend to verify API contracts, data integrity, and database migration logic. These tests validate that admin endpoints correctly expose user identifiers, that conference data for archived years is served accurately, and that the Golden Kodee awards endpoint returns valid categories and nominees. Additionally, the suite covers the SQL migration runner's idempotency and data backfilling (specifically the V002 migration adding year columns), ensures document and map SVG endpoints handle year-based routing and errors correctly, and confirms that voting and feedback submissions are blocked on archived years.

backend/src/test/kotlin · high confidence

Dependencies

Initial project structure and dependency configuration

This change introduces the foundational build configuration for the KotlinConf application, establishing the multiplatform project structure and defining all library dependencies. It sets up the core modules (core, backend, shared, ui-components) and platform-specific apps (Android, iOS, Desktop, Web, Admin), while configuring the version catalog with specific versions for Kotlin (2.4.10), Compose Multiplatform (1.11.1), Ktor (3.5.1), and other key libraries. The configuration also includes iOS package resolution files and Node.js version pinning to ensure consistent builds across environments.

(dependencies) · high confidence

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

How this codebase got here

Score

  • CAI 59 → 63 (+4.3)
  • Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 96 → 96 (+0.0)
  • Architecture 99 → 94 (-5.3)
  • Maturity 62 → 62 (+0.0)
  • Readiness 58 → 57 (-0.4)
  • Security 50 → 60 (+10.0)
  • Accessibility 74 → 74 (+0.0)
  • Performance 100 (new)

Resolved (52)

  • Change coupling: AppInit.kt ↔ ApplicationStorageImpl.kt (app/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/AppInit.kt)
  • Critical CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • Critical CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/wasm/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/wasm/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • High CVE: [CVE redacted] (kotlin-js-store/yarn.lock)
  • …and 32 more

New (11)

  • Documentation: no project overview (README.md)
  • High CVE: [GHSA redacted] (kotlin-js-store/wasm/yarn.lock)
  • High CVE: [GHSA redacted] (kotlin-js-store/wasm/yarn.lock)
  • High vulnerability: [GHSA redacted] (kotlin-js-store/yarn.lock)
  • Low cohesion: KotlinConfRepository (LCOM4 10) (backend/src/main/kotlin/org/jetbrains/kotlinconf/backend/repositories/KotlinConfRepository.kt)
  • Low cohesion: ScheduleViewModel (LCOM4 5) (app/shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/ScheduleViewModel.kt)
  • No ADRs found
  • Off the main sequence: :app:ui-components
  • Off the main sequence: :core
  • Off-boarding risk: anonymized user #1
  • Split app/shared

Changes since last survey

  • 1 commits — 1 feature/other, 0 fixes

By area

  • .github/workflows — 1 commit

Notable commits

  • change: Update Junie workflow reference

Architecture

  • Containers 0 added · 0 removed · contexts 5 added · 0 removed · edges 5 added · 0 removed

Added bounded contexts (5)

  • adminApp
  • androidApp
  • backend
  • shared
  • ui-components

Added dependency edges (5)

  • adminApp → core (coupling)
  • androidApp → shared
  • backend → core (coupling)
  • shared → core (coupling)
  • shared → ui-components (coupling)

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

Survey your own repository

JetBrains/kotlinconf-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 28 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 248474dd27e1f84dadf309618a4e0fa82d7e9bfb — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.