null
896bf26b28
feat: date reflection reveal, UI upgrade plan, seed updates, ime-scan script
2026-07-01 04:12:58 -05:00
null
d8408a2c44
chore(functions): rebuild dist with pruneDeadTokens wired into all 19 push sites
2026-06-30 23:45:42 -05:00
null
afd1eab299
feat(users): wire pruneDeadTokens into onUserDelete
2026-06-30 23:45:36 -05:00
null
2488e18790
feat(notifications): wire pruneDeadTokens into streakReminder
2026-06-30 23:45:31 -05:00
null
40e4f48131
feat(notifications): wire pruneDeadTokens into dailyQuestionReminder
2026-06-30 23:45:26 -05:00
null
355edd0887
feat(couples): wire pruneDeadTokens into acceptInviteCallable
2026-06-30 23:45:21 -05:00
null
f55c49010d
feat(notifications): wire pruneDeadTokens into sendThinkingOfYouCallable
2026-06-30 23:36:09 -05:00
null
5306d40c72
feat(notifications): wire pruneDeadTokens into sendGentleReminderCallable
2026-06-30 23:35:59 -05:00
null
e35b8151c6
feat(notifications): wire pruneDeadTokens into reengagement
2026-06-30 23:35:49 -05:00
null
35eca7d08d
feat(notifications): wire pruneDeadTokens into gameRetention
2026-06-30 23:35:42 -05:00
null
7b5790da43
feat(billing): wire pruneDeadTokens into onEntitlementChanged
2026-06-30 23:35:38 -05:00
null
c7181e276f
feat(questions): wire pruneDeadTokens into onMessageWritten
2026-06-30 23:35:29 -05:00
null
8b3356e60d
feat(questions): wire pruneDeadTokens into onAnswerWritten
2026-06-30 23:35:24 -05:00
null
9ca9f19c51
feat(questions): wire pruneDeadTokens into onAnswerRevealed
2026-06-30 23:35:20 -05:00
null
13c0769efb
feat(games): wire pruneDeadTokens into onGameSessionUpdate
2026-06-30 23:35:15 -05:00
null
ffa038ca56
feat(dates): wire pruneDeadTokens into onDateReflectionWritten
2026-06-30 23:35:07 -05:00
null
2aa08efd39
feat(dates): wire pruneDeadTokens into onDateHistoryCreated
2026-06-30 23:35:00 -05:00
null
f8240e01a9
feat(dates): wire pruneDeadTokens into createDateMatch
2026-06-30 23:34:56 -05:00
null
342ca37e91
feat(couples): wire pruneDeadTokens into scheduledOutcomesReminder
2026-06-30 23:34:39 -05:00
null
c32a5ad8cc
feat(couples): wire pruneDeadTokens into onCoupleLeave
2026-06-30 23:34:33 -05:00
null
6fda1574ea
feat(backup): wire pruneDeadTokens into onRestoreRequested
2026-06-30 23:34:26 -05:00
null
b564d1da42
feat(notifications): add pruneDeadTokens utility for FCM dead-token cleanup
2026-06-30 23:34:22 -05:00
null
37815af781
chore: rebuild functions dist (add onRestoreRequested + onRestoreFulfilled exports)
2026-06-30 20:43:58 -05:00
null
4b4f79361f
feat(backup): add onRestoreRequested and onRestoreFulfilled Cloud Functions (partner push + owner self-alert)
2026-06-30 20:43:22 -05:00
null
4dd60a6a4d
chore(date-memories): add compiled onDateReflectionWritten
2026-06-30 18:14:54 -05:00
null
2c47c222de
chore(date-memories): add compiled onDateHistoryCreated
2026-06-30 18:14:52 -05:00
null
d4cedaf304
chore(date-memories): update compiled function index
2026-06-30 18:14:50 -05:00
null
b7ad62054b
feat(date-memories): export onDateHistoryCreated and onDateReflectionWritten from index
2026-06-30 18:14:48 -05:00
null
7a5f4e9bbd
feat(date-memories): add onDateReflectionWritten Cloud Function
2026-06-30 18:14:46 -05:00
null
2eb21f42f9
feat(date-memories): add onDateHistoryCreated Cloud Function
2026-06-30 18:14:44 -05:00
null
6dddac4615
Revert "feat(date-memories): add onDateHistoryCreated + onDateReflectionWritten Cloud Functions (batch 5/8)"
...
This reverts commit 8829cffa7e .
2026-06-30 18:13:00 -05:00
null
8829cffa7e
feat(date-memories): add onDateHistoryCreated + onDateReflectionWritten Cloud Functions (batch 5/8)
2026-06-30 16:51:59 -05:00
null
d87603211a
feat(activity): ActivityScreen timeline, HomeScreen activity feed, HomeViewModel wiring, PartnerNotificationManager, sendThinkingOfYouCallable Cloud Function
2026-06-30 03:54:01 -05:00
null
e74b6f59af
feat(cloud-functions): onEntitlementChanged, acceptInviteCallable, onGameSessionUpdate, onAnswerRevealed, onMessageWritten — FirestoreUserDataSource E2EE, AppMessagingService, EditProfileScreen, iOS plan
2026-06-30 02:38:31 -05:00
null
2a5c40508e
feat(notifications): QuietHoursManager + NotificationSettingsScreen rewrite, Cloud Functions (streakReminder, quietHours, reengagement, gameRetention), UserRepository E2EE wiring, SettingsDataStore, firestore rules, wiring-scan
2026-06-30 00:38:06 -05:00
null
f51a55743c
feat(games): partner game-session push orchestration — in-app notification banner, Firestore rules, Cloud Function, QA docs
2026-06-28 22:24:46 -05:00
null
fa8005f25f
feat(functions): wrapReleaseKeyCallable — server-side Tink wrap for iOS→Android release keys (closes keybox Path A interop gap)
2026-06-28 17:19:06 -05:00
null
37ed7cebec
feat: quiet hours notifications, settings UI, game session updates, docs
2026-06-28 10:00:25 -05:00
null
4eed0a8115
feat(premium): couple-shared unlock notification + reveal retry + users update allowlist + brand glyphs
...
- New Cloud Function: onEntitlementChanged (Firestore onWrite on entitlements/premium) — edge-triggered inactive→active, notifies the OTHER partner so couple-shared unlock isn't silent
- New notification type SUBSCRIPTION_CHANGED → routes to SUBSCRIPTION
- AnswerRevealViewModel: re-issue markRevealed if best-effort failed (offline/transient) so partner_opened_answer push eventually fires
- firestore.rules: harden users/{uid} update allowlist (defense-in-depth; no live hole)
- 18 new brand glyph vector drawables (drawable-nodpi/)
- SettingsScreen / PlayHubScreen / WaitingForPartnerScreen: swap Material icons for new brand glyphs
- ClaudeQA docs + Future.md updated
2026-06-27 16:35:41 -05:00
null
2cd0af65a8
chore: working tree changes — QA docs, app tweaks, Cloud Functions updates
2026-06-27 13:31:09 -05:00
null
6e79cd9704
fix(notif): replace status-diff with idempotent flag-claim for game start/finish pushes (F-RACE-001)
2026-06-26 20:04:05 -05:00
null
47867b5663
feat(notif): onAnswerWritten detects both-answered — send 'unlocked' notification instead of 'go answer'
2026-06-26 12:40:41 -05:00
null
8b4c5ba005
feat(notif): add onAnswerRevealed cloud function — notify partner when answers are opened
2026-06-26 12:40:36 -05:00
null
765916a8ef
build(functions): recompile dist for E-OBS + E-003 results-ready changes
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 12:40:38 -05:00
null
21b078a180
fix(notif): set FCM channel on remaining reminder senders (E-OBS)
...
Add android.notification.channelId to the 4 senders not covered by the earlier batch:
scheduledOutcomesReminder + dailyQuestionReminder + reengagement -> 'reminders';
sendGentleReminderCallable -> 'partner_activity'. Completes E-OBS so backgrounded pushes land on
their proper channels (importance/sound + per-category toggle) instead of fcm_fallback. tsc green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 12:39:59 -05:00
null
aaab768cb0
fix(notif): deep-link results-ready pushes to per-session results/replay screen (E-003)
2026-06-25 12:35:49 -05:00
null
29beff1702
build(functions): rebuild dist from source — revenueCatWebhook ack-after-process, acceptInvite strict E2EE, onMessageWritten conversations path, onGameSessionUpdate both-partner notify
2026-06-24 16:15:30 -05:00
null
060ef69ca5
feat(rules+trigger): conversations Firestore rules, onMessageWritten listens on conversations path, gitignore
...
- firestore.rules: conversations doc read/write rules with ciphertext validation, messages subcollection create rules (image or ciphertext text)
- onMessageWritten: trigger path changed from question_threads to conversations, passes conversation_id in FCM data, removed questionId resolution (no longer needed)
- .gitignore: deduplicate ClaudeReport.md entry
2026-06-24 16:14:18 -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
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