Feat 2026 Rebrand - #244
Draft
NewtonMutugi wants to merge 26 commits into
Draft
NewtonMutugi wants to merge 26 commits into
NewtonMutugi wants to merge 26 commits into
Conversation
…button to sign-in screen
…logos for app bar and sign-in screen
…heme dependencies
Android Studio now bundles JDK 25, which Gradle 8.14 cannot run (it failed with 'Error resolving plugin dev.flutter.flutter-plugin-loader > 25.0.3'). Gradle 9.1+ supports Java 25; pinned to 9.5.1 because AGP 8.13.0 relies on a Gradle internal API removed in 9.6.0. Verified: flutter build apk --flavor development succeeds. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
chore(android): upgrade Gradle wrapper to 9.5.1 for JDK 25 support
…le 3.3.2 - flutter upgrade: 3.44.6 -> 3.47.3 (Dart 3.12.2 -> 3.13.3) - Moved isar_community/isar_community_flutter_libs/isar_community_generator off the 3.3.0-dev.3 prerelease pin onto stable 3.3.2. That prerelease transitively capped analyzer at <9.0.0, which crashed 'dart run build_runner build' on Dart 3.13's dot-shorthand syntax (Exception: Missing implementation of visitDotShorthandPropertyAccess). Stable 3.3.2 allows analyzer <11.0.0, letting freezed resolve to 3.2.5 and analyzer to 10.2.0, which understands the new syntax. This is the actual fix for the pr-check/release-apk 'build_runner' CI failures. - Regenerated pubspec.lock, analysis_options.yaml, and macos/Flutter/GeneratedPluginRegistrant.swift via flutter pub get / code generation under the new SDK. Verified: - dart run build_runner build --delete-conflicting-outputs: succeeds (was crashing before) - dart format --set-exit-if-changed lib test: clean - flutter analyze lib: 1 pre-existing warning, no errors - flutter build apk --flavor development --debug: succeeds Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
chore: upgrade Flutter SDK to 3.47.3, fix build_runner CI crash
- AGP 8.13.0 -> 9.4.0 and Kotlin Gradle plugin 2.2.20 -> 2.4.20, per
Flutter's deprecation warning that support for the old versions will
soon be dropped.
- AGP 9.4.0 requires Gradle >=9.6.0, so the wrapper is bumped
8.13.0-era 9.5.1 -> 9.7.1 to match (9.5.1 was previously the ceiling
because it was the last version AGP 8.13.0 tolerated).
- AGP 9.4.0 also removes support for getDefaultProguardFile('proguard-android.txt')
(it hardcodes -dontoptimize, which blocks R8 optimizations); switched
the release buildType to the '...-optimize.txt' variant it now requires.
Verified:
- flutter build apk --flavor development --debug: succeeds
- dart format --set-exit-if-changed lib test: clean
- flutter analyze lib: 1 pre-existing warning, no errors
Not included: migrating to Flutter's Built-in Kotlin (still warns that
several plugins - firebase_analytics, firebase_auth, firebase_core,
firebase_crashlytics, firebase_remote_config, share_plus - apply their
own Kotlin Gradle Plugin). That depends on upstream plugin releases,
not something this repo controls alone.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
chore(android): upgrade AGP to 9.4.0, Kotlin to 2.4.20, Gradle to 9.7.1
flutter analyze treats warnings as fatal by default, so this warning was failing CI. It was previously masked by a build_runner crash (see #251) that aborted the pipeline before the analyze step's exit code mattered; once that crash was fixed, this became the new blocker. signInWithGoogle() returned Future.value(authResult.credential?.accessToken) from inside a try block without awaiting it, tripping unawaited_return_in_try_block. Removing the unneeded Future.value wrapper exposed a real, pre-existing type mismatch: the method's declared return type is Future<String> (non-nullable) but accessToken can be null. Fixed by throwing a Failure in that case, consistent with how the rest of the method already handles invalid auth states. Verified: - flutter analyze lib: no issues found (was 1 fatal warning) - dart format --set-exit-if-changed lib test: clean - No existing tests cover this method; project has no test/ files yet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fix(auth): resolve unawaited_return_in_try_block analyzer warning breaking CI
Initializes Claude Code project guidance (CLAUDE.md) and a docs/ directory aimed at AI coding agents: deeper reference material with file:line citations covering DI/state management, the Isar+Hive data layer and cache-first fetch pattern, per-feature breakdown, routing (including the missing auth guard and a stale globalNavigatorKey getter), the full auth flow (including the reviewer-bypass ghost sign-in), networking/error-mapping/flavor config (including a 60000-second Dio timeout typo and the fact all three flavors hit the same API domain), notifications, and exactly what each GitHub Actions workflow triggers on and does. docs/README.md asks agents to keep these files updated as the code they describe changes, rather than letting them go stale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs/README.md already asked for this, but CLAUDE.md is the file guaranteed to load into every Claude Code session's context, so the instruction needed to live there too, stated as a requirement rather than a suggestion. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs: add CLAUDE.md and AI-agent architecture docs
Analyzed the flutterconKE web redesign (flutterconKE2024Web#23, and its dev branch design tokens/components) to ground a phased plan for porting the same rebrand to this app. Documents what's already aligned (primary/accent colors, the app-bar logo, bottom-nav accents all already match the web's tokens) versus the real gap (color ramps, rounded-card system, pill badges, stat-card color inversion, the licensed Rauschen B display font, halftone/duotone imagery, pill button language), plus the phase breakdown that will become GitHub sub-issues under #243. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs: add 2026 rebrand migration plan (#243)
…256) Foundation tokens for the 2026 flutterconKE rebrand (docs/design/REBRAND-PLAN.md), ported from the flutterconKE web repo's tailwind.config.js / globals.css on its dev branch. Nothing here is wired into an existing screen yet — this is deliberately inert until Phase 1+ adopts it. - AppColorRamps: full blue50-900/magenta50-900 ramps, matching the web's Figma-export values exactly. - Corners: extended with the rebrand's rounded-card scale (s16/s24/s32/s40) plus a pill/pillBorder/pillRadius trio for pill buttons and badges. - PillBadge: level (magenta) / format (blue) chip widget, matching SessionListCard.tsx's levelPill/formatPill exactly. - AppButtonStyles: primary/accent/outline pill ButtonStyle builders, matching .btn-primary/.btn-accent/.btn-outline. Opt-in — not wired into ThemeData's elevatedButtonTheme/outlinedButtonTheme defaults, since that would restyle every existing button as a side effect. - AppTextStyles.display: Montserrat Black stand-in for the licensed Rauschen B display font, pending the Phase 0b decision (flutterconKEApp#257). - InvertedPanelColors: a ThemeExtension encoding the two documented light/dark color-inversion panels (e.g. the About stat block), registered on both AppTheme.lightTheme()/darkTheme(). Verified: flutter analyze (clean), dart format (clean), full debug APK build succeeds. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…kens feat(theme): rebrand Phase 0 — design tokens
…258) (#264) Confirmed the app-bar/sign-in logo assets already pixel-match the web repo's new rebrand mark (rendered both to PNG and compared directly, light and dark variants) and that there are no stray pre-rebrand hardcoded colors anywhere in lib/ — every color reference already goes through ThemeColors. No asset or color-usage changes needed. sign_in.dart's only visible button is the auth_buttons package's GoogleAuthButton, which shouldn't be restyled (Google's own brand guidelines govern its shape); the ghost sign-in path is a hidden long-press gesture, not a visible button. So there was no real apply-pill-styles work available on that screen specifically. Applied Phase 0's pill language where a real opportunity existed instead: - FeedbackButton (app bar, visible on most screens): fixed 10px radius -> Corners.pillBorder - LogOutDialog: confirm button -> Corners.pillBorder (kept red; that's destructive-action semantics, not a rebrand color); cancel button -> AppButtonStyles.outline Left session_filter.dart's SegmentedButton/filter-panel buttons alone — that's session-filtering UI, not global chrome, and belongs with Phase 3's more thorough Sessions pass. Verified: flutter analyze (clean), dart format (clean), full debug APK build succeeds. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…utterconKEApp#257) Checked the droidconKE/private-fonts repo's own README for the actual license terms rather than assuming the web's build-time-fetch pattern would transfer cleanly. It doesn't: the license explicitly permits serving Rauschen B as a web font from droidcon's own infrastructure, and explicitly forbids committing it to a public repo or sharing it externally — but says nothing about bundling the file inside a distributed app binary. A compiled mobile app ships the font file inside every installed APK/IPA, trivially extractable by unzipping — a materially different distribution than serving over HTTPS from a server droidcon controls, and not something covered by the existing grant. Decision (confirmed with the repo owner): don't port this. Montserrat Black (AppTextStyles.display, shipped in Phase 0) is the permanent display font for this app, not a placeholder pending resolution. Revisiting this would need an explicit confirmation from whoever actually holds the Rauschen B license/usage rights (Out of the Dark or droidcon's brand team) that app-binary embedding is covered — not an inference from the web's existing, web-scoped grant. Updated docs/design/REBRAND-PLAN.md and the AppTextStyles doc comment accordingly; no functional code change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ision docs: rebrand Phase 0b — decide against porting Rauschen B
* feat(about): rebrand Phase 2 — home/about stat panel (closes flutterconKEApp#259) Ported the web's About-section 2x2 stat block (components/home/About.tsx on flutterconKE2024Web's dev branch) — same four values (3RD Fluttercon edition, 7th Droidcon edition, 230+ sessions delivered, 3,000+ attendees since 2018), same deliberate light/dark color inversion (black+magenta figures in light, magenta+ white figures in dark). Placement decision: the About screen, not Home. about_screen.dart already had an About headline + description paragraph structurally identical to the web's About section intro, so the stat block reads as a natural continuation of that content rather than a dashboard summary that fits Home. Left Home's hero-style header treatment out of scope — that's a distinct, larger visual question from the web's own Hero component, better handled on its own rather than folded into this stat-panel port. AboutStatsPanel (lib/features/about/widgets/about_stats_panel.dart) reads Phase 0's InvertedPanelColors extension and AppTextStyles.display rather than hardcoding the light/dark swap. Wired into about_screen.dart right after the existing intro text, before Organising Team. Verified visually, not just via analyze/build: ran the app on an emulator, navigated to the About screen, and confirmed both color-inversion states directly (toggled via adb shell cmd uimode night yes/no) — matches the web's design exactly in both modes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(localization): update aboutFluttercon description for rebranding --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This pull request introduces a major visual and branding update across the application, shifting the color palette and assets from the previous Droidcon theme to the new Fluttercon branding. It also updates some dependencies and improves navigation and asset handling. Below are the most important changes:
Branding and Visual Redesign:
blueDroidconColor,orangeDroidconColor, etc.) with new Fluttercon colors (flutterconBlue,flutterconMagenta) throughout the codebase, affecting app bars, buttons, icons, backgrounds, and text styles. (lib/core/theme/theme_colors.dart[1]lib/core/theme/theme_data.dart[2] [3]lib/common/widgets/app_bar/app_bar.dart[4] [5] [6]lib/common/widgets/app_bar/feedback_button.dart[7] [8]lib/common/widgets/app_bar/user_profile_icon.dart[9]lib/common/widgets/bottom_nav/bottom_nav_bar.dart[10]lib/common/widgets/personnel_widget.dart[11]lib/features/about/ui/organising_team_details.dart[12]lib/features/home/ui/speaker_details/speaker_details.dart[13]lib/features/home/widgets/search_bar.dart[14] [15]lib/features/home/widgets/sessions_card.dart[16]flutterConKeLogoand replaced with new SVG assetsflutterConLogoLightandflutterConLogoDarkfor light/dark theme support. Updated all logo usages to use these SVGs. (lib/common/utils/constants/app_assets.dart[1]lib/common/widgets/app_bar/app_bar.dart[2]lib/features/auth/ui/sign_in.dart[3]scaffoldBackgroundColorfrom the theme for better consistency. (lib/common/widgets/app_bar/app_bar.dart[1]lib/common/widgets/bottom_nav/bottom_nav_bar.dart[2]lib/features/about/ui/about_screen.dart[3]lib/features/auth/ui/sign_in.dart[4]Navigation Improvements:
pushNamedinstead ofgoNamedfor sign-in routes, ensuring proper navigation stack behavior. (lib/common/widgets/app_bar/feedback_button.dart[1]lib/common/widgets/app_bar/user_profile_icon.dart[2]lib/features/auth/ui/sign_in.dartlib/features/auth/ui/sign_in.dartL48-R60)Dependency and Build System Updates:
android/gradle/wrapper/gradle-wrapper.propertiesandroid/gradle/wrapper/gradle-wrapper.propertiesL6-R6)android.builtInKotlin=false,android.newDsl=false) to the Gradle properties. (android/gradle.propertiesandroid/gradle.propertiesR6-R9)Code and Dependency Injection Maintenance:
generateForDir: ['lib']argument from the@InjectableInitannotation in the dependency injection setup. (lib/core/di/injectable.dartlib/core/di/injectable.dartL9-R9)These changes collectively modernize the app’s appearance and branding, improve navigation, and keep dependencies up to date
Type of Change
Issues
Test Changes on Device
You can download your APK from Firebase App Distribution once this PR builds successfully via the following link: https://appdistribution.firebase.dev/i/c796669942f8a811
Screenshots