null
d81611b95d
fix: user repository cleanup, settings VM, iOS app init + settings parity
2026-06-21 17:44:56 -05:00
null
cc445b74ca
fix: onboarding flow, settings screen polish, iOS settings parity
2026-06-21 17:37:14 -05:00
null
e3f8b99994
feat: security screen, theme polish, settings navigation, build config
2026-06-21 17:25:39 -05:00
null
da8ddf9ed3
feat: pending invite store, iOS subscription illustration, settings theme polish
2026-06-21 17:04:40 -05:00
null
5c85e0ee51
feat: paywall illustrations, subscription polish, recovery store, settings cleanup
2026-06-21 16:27:55 -05:00
null
991b70f405
chore: firebase config, gitignore updates, build tweaks
2026-06-21 16:07:19 -05:00
null
60b3468bea
feat: E2EE recovery flow, iOS parity updates, onboarding + pairing polish
2026-06-21 11:20:48 -05:00
null
768536861a
feat: subscription screen with clear pricing, restore, cancel instructions
2026-06-21 09:54:59 -05:00
null
8ed8061fb4
feat: settings polish, privacy strings, home partner state, proguard rules
2026-06-21 09:49:02 -05:00
null
2f303819ff
fix(accept-invite): dynamic encryptionVersion, Firestore TTL on attempt docs, wipe recoveryPhrase on accept
2026-06-21 09:13:29 -05:00
null
dc34462f0b
feat: remove email invite screen, add accept-invite rate limiting, clean up iOS pairing (v0.2.2)
2026-06-21 08:55:43 -05:00
null
9b22e6d135
chore: gitignore .kotlin/ and review2.md
2026-06-21 08:15:34 -05:00
null
de164ccc81
docs: update README with store positioning, pricing philosophy (v0.2.1)
2026-06-21 08:15:20 -05:00
null
ad9ba29346
fix(outcomes): use AutoMirrored.TrendingUp to resolve icon import/type mismatch
2026-06-21 00:07:52 -05:00
null
391ea68793
fix(home): resolve OutcomeDay import for outcome dialogs
2026-06-21 00:03:02 -05:00
null
b84377a8fa
feat(outcomes): add 30/60/90 day check-in flow with baseline + reminders
2026-06-20 23:59:24 -05:00
null
ea051bf4d3
feat(home): surface couple streak count on Home dashboard
2026-06-20 23:47:55 -05:00
null
ca2a3b0431
feat(home): add "5-minute check-in" time budget framing to daily question card
2026-06-20 23:46:28 -05:00
null
e32d4860d4
feat(functions): add createInviteCallable and tighten invite rules
2026-06-20 23:28:20 -05:00
null
e373496682
fix(couples): align onCoupleLeave cloud function name with Android caller
2026-06-20 23:27:54 -05:00
null
3a61644b45
fix(functions): add server-side throttle to gentle_reminders callable
2026-06-20 23:27:54 -05:00
null
c33058d5eb
fix(firestore): harden isImmutable helper to reject non-list args
2026-06-20 23:14:47 -05:00
null
a0e0771d2d
fix(ios): register Closer source path in Package.swift and fix compile errors
2026-06-20 23:05:43 -05:00
null
857d48e14f
fix(ios): address Pass B warnings from code audit
2026-06-20 22:58:11 -05:00
null
cd28f25234
feat(ios): fix Pass A compile blockers from code audit
2026-06-20 22:54:21 -05:00
null
73910bd459
fix(crypto): define single source of truth for encryptionVersion and document v0/v2 drift risk
...
- Add EncryptionVersion.kt with constants PLAINTEXT(0), MIGRATING(1), STRICT(2)
- Route CoupleEncryptionManager through the new constants and add explicit v2 branch
- Comment acceptInviteCallable.ts:91 explaining the version and sync contract
- Add TODO in iOS FirestoreService.swift warning that iOS MVP creates v0 couples
Fixes Risk #2 from review.md.
2026-06-20 22:29:43 -05:00
null
d83e557b8d
docs(readme): update with MVP scope, both platforms, iOS port status
...
- Add Closer tagline + private-space positioning at top
- Add explicit anti-scope (not social, not therapy, not productivity)
- Add Platform Status table (Android active, iOS in progress, backend shared)
- Add MVP scope split: Free / Premium / Out-of-Scope
- Add iOS folder layout with each layer's purpose
- Add iOS build commands (xcodegen + xcodebuild)
- Expand privacy section (App Check, server-verified subscriptions, E2EE note)
- Clear MVP status breakdown: complete / in-progress / release-prep
- Link HISTORY.md and PROJECT.md for deeper context
2026-06-20 22:20:31 -05:00
null
9040c4789c
feat(settings): add appearance screen with theme picker, refactor settings nav
2026-06-20 18:45:44 -05:00
null
688929813d
feat: add onMessageWritten cloud function, notification settings screen, user repo cleanup
2026-06-20 18:25:05 -05:00
null
53f133d92c
refactor: update crypto, invite flow, and account screen patterns
2026-06-20 18:09:46 -05:00
null
5a2bdf7b0f
refactor(android): update question thread and answer mapping patterns
2026-06-20 18:02:21 -05:00
null
eebdee6120
refactor(android): update question flow and navigation patterns (batch 6)
2026-06-20 17:17:51 -05:00
null
fbfb6b7a92
feat(ios): add native SwiftUI iOS app scaffold under /iphone/ (batch 1-6)
...
- ARCHITECTURE_AUDIT.md: full audit covering 49 screens, Firestore schema,
35 domain models, 17 Cloud Functions, RevenueCat integration, auth flow,
E2EE skip-for-MVP decision
- Project config: project.yml (XcodeGen), Info.plist, Closer.entitlements, Package.swift (SPM)
- Core: AuthService (rate limiter), FirestoreService (callable wrappers),
BillingService (RevenueCat), NotificationService (FCM)
- Models: AuthState (ObservableObject), FirestoreModels (20+ codable types),
DomainModels (35 structs)
- Theme: CloserTheme (50+ colors, typography, spacing), CommonViews
- Screens: Onboarding, pairing, home, daily questions, play hub + games
(ThisOrThat, HowWell, DesireSync, ConnectionChallenges), spin wheel
(animated 8-slice), dates (swipe cards, bucket list), settings + paywall
(RevenueCatUI)
2026-06-20 17:15:25 -05:00
null
bd36e15cdd
chore: update store assets doc with 9 screenshots (batch v1.0.22)
2026-06-20 02:02:05 -05:00
null
5175ccba7c
chore: update README, screenshots, answer data source cleanup (batch v1.0.21)
2026-06-20 02:01:42 -05:00
null
853e0b5b1b
fix: reveal screen UX and rules hardening (batch v1.0.20)
2026-06-20 01:51:02 -05:00
null
215e63314a
fix: sealed reveal flow fixes (batch v1.0.19)
2026-06-20 01:40:24 -05:00
null
97a4b6b486
fix: block answer delete in rules, enforce userId match on create (batch v1.0.18)
2026-06-20 01:19:02 -05:00
null
7192d39901
fix: add Tink dependency, release key cleanup, rules hardening (batch v1.0.17)
2026-06-20 01:10:20 -05:00
null
d62f2fc9a2
feat: add thread sealed answers, release key cleanup, rules hardening (batch v1.0.16)
2026-06-20 00:41:48 -05:00
null
17d1a1152a
fix: add answerDate to Firestore rules allowed fields (batch v1.0.15)
2026-06-20 00:26:52 -05:00
null
e027b7a687
feat: implement partner-proof sealed answers (batches 1-8)
...
- UserKeyManager: per-user keypair stored in Android Keystore
- SealedAnswerEncryptor: one-time answer key, sealed:v1 ciphertext
- PendingAnswerKeyStore: local EncryptedSharedPreferences storage
- ReleaseKeyEncryptor: keybox:v1 encrypted to recipient public key
- SealedRevealManager: full reveal flow with mutual key release
- AnswerCommitment: SHA-256 commitment hash over canonical payload
- FirestoreDeviceKeyDataSource: public key CRUD
- FirestoreReleaseKeyDataSource: release key CRUD
- FirestoreAnswerDataSource: sealed answer writes with schemaVersion=3
- FirestoreCollections: sealed answer and release key paths
- firestore.rules: ownership, immutability, timing, prefix enforcement
- HomeViewModel: sealed answer state integration
- AnswerRevealScreen/ViewModel: sealed reveal flow with UX states
- CloserApp: initialize UserKeyManager on startup
- LocalAnswer model: schemaVersion field
- Unit tests: SealedAnswerEncryptor, ReleaseKeyEncryptor, AnswerCommitment
- Crypto test vectors: docs/crypto/sealed-answer-test-vectors.json
- .gitignore: add partner-proof build plan
2026-06-20 00:23:58 -05:00
null
5b3e31fbae
fix: remove duplicate comparison in StreakCalculator (batch v1.0.14)
2026-06-19 23:53:50 -05:00
null
903498ef4d
refactor: replace PendingActionCard.action lambda with HomeActionTarget (batch v1.0.13)
...
- PendingActionCard now uses target enum instead of lambda
- HomeScreen routes pending actions through toActionHandler
- Remove onPendingAction callback, simplify HomeCallbacks
- Fix WeeklyRecapGenerator filter logic (remove always-true || true)
2026-06-19 23:51:47 -05:00
null
af67194117
feat: add gentle reminder callable and wire into HomeViewModel (batch v1.0.12)
...
- GENTLE_REMINDER notification type with warm copy
- sendGentleReminderCallable Cloud Function
- HomeViewModel.sendGentleReminder() calls function, shows snackbar
- Snackbar event consumed after display
2026-06-19 23:47:01 -05:00
null
ecf24be837
feat: wire retention signals into HomeViewModel (batch v1.0.11)
...
- Replace TODO placeholders with real data source calls
- Add hasWaitingGame, hasActiveChallenge, hasUpcomingDatePlan, hasUnlockedCapsule, weeklyRecapReady
- Parallel async fetches in loadHome(), failures default to false
- FirestoreCapsuleDataSource.getCapsules() for capsule status checks
2026-06-19 23:42:54 -05:00
null
0e8952cab3
fix: add coEvery import and re-set settings flow in PartnerNotificationManagerTest (batch v1.0.10)
2026-06-19 22:52:27 -05:00
null
6c84a7cdef
test: add unit tests for retention features (batch v1.0.10)
...
- PartnerNotificationManagerTest: notification creation, type mapping, deep links
- build.gradle.kts: enable Robolectric and default return values for unit tests
- AppRoute: fix NPE in asRouteArg when android.net.Uri is stubbed on test classpath
2026-06-19 22:51:08 -05:00
null
f5340be156
feat: add memory capsule generator for saving meaningful moments (batch v1.0.9)
2026-06-19 22:47:36 -05:00
null
aff583f8bf
chore: update UI copy to match retention tone guidelines (batch v1.0.9)
2026-06-19 22:46:07 -05:00