Commit Graph

277 Commits

Author SHA1 Message Date
null 608ddcfc5b feat(bubble): drag-to-dismiss zone, no auto-timeout, dismiss on conversation enter
- MessageBubbleOverlay: drag-to-dismiss target at bottom-center, no 12s auto-timeout (persists until read)
- MessageBubbleController: dismissFor clears bubble when its conversation is opened
- ActiveThreadMonitor: calls dismissFor on enter, clearing the bubble for that thread
2026-06-24 15:20:38 -05:00
null adb61715fe feat(home): partner photoUrl loaded and displayed in identity card
- PartnerHomeViewModel: loads partner photoUrl alongside name
- PartnerIdentityCard: shows AsyncImage when photoUrl available, fallback to initial letter
2026-06-24 15:20:32 -05:00
null a8fbbaa286 feat(notifications): deep link routing from FCM data extras, onMessageWritten includes author name + photo
- MainActivity: deepLinkRouteFromIntent resolves FCM data extras to navigation routes; pendingDeepLink state for onNewIntent
- AppNavigation: LaunchedEffect waits for HOME route before navigating deep link (fixes race with onboarding)
- onMessageWritten: includes author displayName + photoUrl in notification payload
2026-06-24 15:20:24 -05:00
null 06e4d609f2 feat(chat): image picker (gallery + camera), encrypted image rendering, messenger-style avatars on consecutive bubbles
- QuestionDiscussionThread: gallery picker via PickVisualMedia, camera capture via FileProvider, EncryptedChatImage composable decrypts + renders, MessageAvatar with partner photo
- QuestionThreadViewModel: sendImage, loadDecryptedMedia, dailyRevealed skip for already-revealed daily questions, partner photo loading
- QuestionThreadScreen: pass loadDecryptedMedia to discussion thread
- LocalQuestionContent: pass partnerPhotoUrl to discussion thread
- file_paths.xml: cache-path for camera capture
2026-06-24 15:20:18 -05:00
null c9aa5f1e12 feat(chat): encrypted image messages — Storage upload/download, Firestore send/load, domain model with type+mediaUrl 2026-06-24 15:20:11 -05:00
null 609ced4095 feat(notifications): FCM token registration on auth, Android 13 permission request, in-app chat bubble overlay, game results notification copy
- MainActivity: request POST_NOTIFICATIONS on TIRAMISU+, register FCM token when user signs in
- AppMessagingService: foreground chat messages show draggable bubble instead of OS notification
- MessageBubbleController/Overlay: new in-app chat-head that drifts over all screens, tap to open
- PartnerNotificationManager: GAME_RESULTS_READY type with proper copy, partner_finished_game maps to it
- onGameSessionUpdate: notify BOTH partners on completion (not just the non-starter), fix starter name in notification
2026-06-24 11:47:49 -05:00
null 0cb3d44f0d fix(reveal): partner option labels, release-key read rules, thread status uppercase, session id propagation, notification deep links, and re-open guard
- Firestore rules: partner can read user doc (name/photo), sender can read own release key
- QuestionThread: status stored UPPERCASE to match rules (lowercase broke discussion)
- GameSessionManager: propagate auto-generated session id (empty id crashed game start)
- AnswerReveal: decrypt partner's selectedOptionTexts from option IDs (showed raw ids)
- FirestoreAnswerDataSource: tolerate Timestamp/Date in updatedAt (serverTimestamp crash)
- FirestoreReleaseKeyDataSource: tolerate PERMISSION_DENIED on existence check (sender can't read)
- QuestionThreadRepository: runCatching status update (legacy lowercase status blocked submit)
- PartnerNotificationManager: suppress notification for active thread, deep link to thread
- ActiveThreadMonitor: new class tracks which thread user is reading (suppresses own notifs)
- DesireSync/HowWell/ThisOrThat: re-open guard skips INTRO if already answered; blank sessionId guard
- AppNavigation: deep link pattern for chat notification
2026-06-24 10:02:54 -05:00
null 77208ff1e6 fix(daily-question): deterministic per-day offset replaces RANDOM(); shared DailyQuestionResolver; auth profile fallback 2026-06-23 22:55:55 -05:00
null 6d74c6acec feat(brand): primaryMessage constant + rotator holds flagship slogan 3x longer 2026-06-23 22:39:31 -05:00
null 7923835861 docs(brand): update privacy slogan in CloserBrandCopy 2026-06-23 22:21:25 -05:00
null 3f22a38e18 docs(readme): update privacy slogan 2026-06-23 22:19:39 -05:00
null 9269a769be docs(readme): update privacy slogan 2026-06-23 22:17:42 -05:00
null 6e9cdfe8f6 docs(readme): fix slogan grammar — security → securely 2026-06-23 22:15:57 -05:00
null 06e09da596 docs(readme): add privacy slogan to header 2026-06-23 22:14:36 -05:00
null e5c05abe90 fix(settings): partner card visual states — paired vs unpaired colors, border, avatar fallback 2026-06-23 19:35:35 -05:00
null 272c8997d0 refactor(ui): celebration overlay polish, activity screen layout, home screen streak dialog, pairing success cleanup 2026-06-23 19:26:41 -05:00
null 17d7489dd8 feat(engagement): streak milestones, celebration overlays, Together screen, avatar in notifications 2026-06-23 18:23:49 -05:00
null d4b20a9845 feat(e2ee): encrypt date plan content; live answer observation; own-thread-answer decrypt; strict rules 2026-06-23 17:47:07 -05:00
null 039752d691 refactor(e2ee): remove v0/v1 migration paths, fail-closed decrypt, strict-only rules 2026-06-23 17:06:23 -05:00
null 17c7ed60b9 fix(nav): tab-switch routing prevents stacking tabs; fix(crash): runCatching around getUser/getCoupleForUser across 6 screens 2026-06-23 14:35:01 -05:00
null fe1808b36c refactor(theme): full dark mode pass — CloserPalette, Theme, Color, and all surface screens 2026-06-23 13:56:27 -05:00
null 7d3b47b3ba fix(firestore): handle Timestamp type for lastAnsweredAt/createdAt in Android + Cloud Function 2026-06-23 12:40:00 -05:00
null 424ef0e4ab refactor(theme): replace hardcoded colors with Material3 theme-aware composables + adaptive iOS surface color 2026-06-23 12:31:59 -05:00
null e5c13b6b6d feat(app-check): stable debug token via BuildConfig; feat(firestore): indexes for questions + bucket_list 2026-06-23 12:17:17 -05:00
null 6977db7600 fix(wheel-reveal): error state with retry, null-safe uid/couple, close on snapshot error 2026-06-23 11:34:46 -05:00
null acaa8e635c fix(challenges): null-safe activeChallenge guard; feat(this-or-that): skip question button 2026-06-23 11:31:17 -05:00
null b854c0b391 feat(history): tappable challenge/capsule cards, deep-link to capsule detail, emoji per game type, dedicated error card; feat(nav): MEMORY_LANE_CAPSULE route 2026-06-23 11:19:14 -05:00
null 658ead38cd security: App Check enforcement on all callables, fail-closed device integrity, no raw code in logs; release signing config; iOS RevenueCat log level 2026-06-23 10:56:42 -05:00
null 015ac8eefe feat(challenges): abandon challenge flow; fix(play): premium lock on history; fix(memory-lane): null-safe detail state 2026-06-23 10:51:14 -05:00
null 58be8ed021 fix(game-history): disable replay on unsupported game types, clean up session title/route 2026-06-23 10:32:49 -05:00
null 755077c7ba feat(memory-lane): edit/delete capsules, custom unlock date picker, error snackbar 2026-06-23 10:11:25 -05:00
null 9710bbc438 fix(challenges): error state snackbar, CTA routing for BOTH_COMPLETED/CHALLENGE_COMPLETE, README prem tiers 2026-06-23 10:04:53 -05:00
null c97371a12e feat: challenge state machine, game screen updates, state machine tests 2026-06-22 22:02:39 -05:00
null c56dd53edd feat: capsule/challenge data sources, game screens, wheel history + viewmodel 2026-06-22 21:38:18 -05:00
null 17403b1a75 feat: challenges, desire sync, how well, memory lane, this or that screens 2026-06-22 21:24:02 -05:00
null 3f5d7a5cc1 feat: nav, capsule data source, challenges, desire sync, question category, wheel history + viewmodel 2026-06-22 21:19:19 -05:00
null 2108d48914 feat: challenges, desire sync, how well, memory lane, play hub + viewmodel, this or that, wheel history 2026-06-22 20:46:40 -05:00
null 7db075d195 feat: navigation, answer history screen + viewmodel, answer reveal, iOS navigation & question views 2026-06-22 19:44:44 -05:00
null 125a24eb85 feat: answer reveal, auth screens, challenges, onboarding, pairing, paywall, wheel, settings, components 2026-06-22 19:18:49 -05:00
null b42544bafb feat: iOS app icon assets + Info.plist 2026-06-22 18:19:07 -05:00
null 42706b4dc6 feat: settings screen + iOS settings views 2026-06-22 18:14:55 -05:00
null b90b9bca77 feat(seed): daily fun multiple choice v3 2026-06-22 17:46:06 -05:00
null 5d3ab8385d feat: daily questions, answer reveal, home screens, auth, analytics, DB, repositories 2026-06-22 17:45:51 -05:00
null 174e56c5a0 feat: local question content, question header, daily question illustration, iOS question/wheel views 2026-06-22 13:57:09 -05:00
null f350c91b55 feat: question pack library screen, pack art assets, iOS question views 2026-06-22 13:45:48 -05:00
null d96221c5c8 feat: home screen + iOS pairing views 2026-06-22 12:52:33 -05:00
null bb119b054b feat: home screen update, pairing views, activation illustrations 2026-06-22 11:25:21 -05:00
null d307904ff8 feat: home screen + viewmodel, iOS home & pairing views 2026-06-22 11:14:19 -05:00
null 7d5fc11366 feat: nav routes, play hub, spin wheel screen + viewmodel, firestore rules 2026-06-22 10:53:05 -05:00
null ecc41a77d2 feat: wheel screen, play hub, storage data source, iOS wheel/play views 2026-06-22 10:25:58 -05:00