Commit Graph

9 Commits

Author SHA1 Message Date
airkjw a9380a7b27 fix(android): launcher label 'Block Seasons' (was default 'block_seasons') 2026-06-13 23:14:12 +09:00
airkjw 40abc26f5d build(release): Android signing, iOS privacy manifest, store assets (Phase 7)
- Android: release keystore signing wired via gitignored key.properties (falls
  back to debug when absent). Verified: signed AAB built (signer CN=Block Seasons).
- iOS: app PrivacyInfo.xcprivacy (ATT tracking flag, device-id/usage data types,
  UserDefaults+FileTimestamp required-reason APIs) registered in the Runner target.
- Store: app-ads.txt (pub-5605900229781491), EN/KO listing copy, owner submission
  guide (privacy labels, app-ads hosting, upload/submit steps).
Secrets (keystore, key.properties) are gitignored — owner backs them up.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 22:49:43 +09:00
airkjw 734c8a4cf7 feat(ads): wire real AdMob ids (Phase 5 finalize)
Replaces the TODO_REAL_* ad-unit placeholders with the owner's real AdMob
console ids (publisher pub-5605900229781491) and the native AdMob app ids
(iOS ~8397095848, Android ~8257495040) in place of the Google sample ids.
Debug builds still serve Google test ads via kDebugMode; release builds now
use the real units.
2026-06-13 19:05:10 +09:00
airkjw e1098949be build(brand): generate iOS/Android launcher icons from brand mark
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 18:08:13 +09:00
airkjw 245a065ac7 build: add AdMob/IAP/ATT plugins and native ad config (test ids)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 13:40:23 +09:00
airkjw 41b0180b44 feat(analytics): wire Firebase Analytics into app startup
flutterfire configure registered the iOS/Android apps under project
block-seasons and generated firebase_options.dart + native config. main()
now initializes Firebase and routes analytics through FirebaseAnalyticsBackend
in release builds (console logger in debug, so dev traffic never pollutes
GA4). Firebase init is guarded — failure falls back to the debug logger
rather than blocking startup.

firebase.json keeps the existing Hosting config and gains the FlutterFire
platform section. Client config files are committed (they ship in the binary;
Firebase security is enforced by rules, not config secrecy).

flutter analyze clean, all 161 tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 12:10:03 +09:00
airkjw 189ab469af feat: logo-assembly splash screen and native launch colors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 22:30:04 +09:00
airkjw 607278928b Add daily streak system and normalize bundle id to com.airkjw.blockseasons
Pure advanceStreak (1-day grace none, milestone flags at 3/7/14/30),
persisted in the save blob; StreakNotifier advances on every finished
attempt; home screen flame chip and milestone snackbar. Fix flutter
create's camelCased iOS bundle id and underscored Android application
id to the agreed lowercase form before any store registration.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:25:39 +09:00
airkjw 40528238b2 Scaffold Block Seasons Flutter app
flutter create (com.airkjw.blockseasons, iOS+Android), Riverpod,
shared_preferences, audioplayers, gen-l10n EN/KO wiring, app shell
with Home -> Game placeholder.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 12:55:59 +09:00