Commit Graph

42 Commits

Author SHA1 Message Date
null 08e9be626e docs: reconcile stale docs with project reality (Batch 1 doc hygiene)
Every point-in-time doc now carries an explicit status header so no one works
from a dead plan or stale claim:

- CopyMigration.md: CLOSED — migration stopped by owner decision after Slice 1;
  Slices 2-4 cancelled (several target strings since rewritten by the Closer
  Couples prose rename anyway).
- store-assets.md + NameChange.md: the support-URL 'couplesconnect.app' claim
  was stale — ExternalLinks.kt already uses closer.app/support; remaining action
  is Play-console listing fields only.
- internal-testing-checklist.md: SUPERSEDED by store-assets.md + release_guide;
  also corrected its applicationId error (app.closer -> closer.app, the same
  namespace swap behind the 4e807cb0 deep-link bug).
- private-mvp-checklist.md: SUPERSEDED by the ClaudeQAPlan system.
- UI_UPGRADE / standardization-review / ui-review / date-planning-roadmap /
  IOS_E2EE_STATUS / iphone ARCHITECTURE_AUDIT: stamped historical/paused with
  pointers to the live sources (Future.md, ClaudeBrandingReview, ERM).

NOT touched: DEVELOPMENT_LOG.md (verified alive — newest entry 2026-07-08,
prepend-ordered; earlier 'log is dead' read was wrong) and the Engineering
Reference Manual (another agent's Phase-4 review owns its drift).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 18:29:08 -05:00
null 6668a3c4b7 refactor(brand): in-app prose -> 'Closer Couples' (launcher + wordmark stay 'Closer')
Extends the store/marketing rename to in-app user-facing PROSE, per owner decision.
Every string where 'Closer' names the app in a sentence now reads 'Closer Couples'
(Android + iOS): settings, pairing, invite share, widget headlines, paywall
subhead/thank-you, age gate, privacy body.

Deliberately KEPT as 'Closer' (judgment calls, documented in docs/NameChange.md):
- launcher label / iOS CFBundleDisplayName (14 chars truncates under the icon)
- wordmark logos (onboarding, auth alt-text, widget header, share-card drawText,
  iOS onboarding) + their asserting tests
- 'Grow Closer' onboarding pun (intimacy, not the app name)
- entity/length-capped lines: privacy rotator 'so Closer cannot read them'
  (hard 64-char cap), iOS 'not even Closer's servers'
- iOS 'Settings > Closer' help path (must match the kept display name)
- 'Closer Premium' tier label (matches the RevenueCat entitlement display name)
- all technical identifiers (app.closer / closer.app / closer_premium / etc.)

TodayWidgetTest exact-match assertions updated. compileDebugKotlin + unit tests green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 17:07:31 -05:00
null 42fba641f1 chore(cleanup): remove the unused server/ Express backend (Tier 3)
server/ was a standalone Express webhook/health service (couples-connect-server, 17 files)
that duplicated the Firebase Cloud Functions — entitlement logic, FCM sends, an answer
listener, a webhook route — and was documented as "not client-facing… most teams will not
need it." It hadn't been touched since 2026-06-20 (pre-dating the whole v2 Functions
migration), had no deploy/CI wiring, and was a standing source of "which backend is real?"
confusion. Cloud Functions are the sole backend.

Removed the directory + all doc references so nothing dangles: README + Engineering Reference
Manual directory trees and the "Optional Express server" section; the iOS ARCHITECTURE_AUDIT
intro, its Section 8 (now a "removed" note), and the file-count table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 00:48:02 -05:00
null 763ca0c7cb feat(tools+docs): add androidTest deps for paired-CI vector harness; add SCHEMA_VERSION_DECISION + SPEC §19 pre-deploy checklist (iOS E2EE Batch 8) 2026-06-28 17:56:44 -05:00
null 7f17f4c673 docs(ios/crypto): SPEC §18 Batch 5 status + Argon2id fixture-driven test (skips until paired CI fills TODO_ANDROID_RUN) 2026-06-28 17:22:31 -05:00
null ade4667db7 feat(ios): wire wrapReleaseKeyForPartner + MockFirestoreReleaseKey tests for the new Cloud Function 2026-06-28 17:19:11 -05:00
null 3d3209806c fix(ios/crypto): AnswerCrypto AAD to coupleId-only (matches Android FieldEncryptor); add vector fixtures for sealed-answer canonical JSON + Argon2id (TODO_ANDROID_RUN placeholders for paired CI) 2026-06-28 17:19:00 -05:00
null 60c0003114 feat(ios/e2ee): schemaVersion 3 sealed answers + ECIES keyboxes Path A + DeviceKeyStatus (Batch 4) 2026-06-28 17:14:50 -05:00
null 922364f8e8 feat(ios/e2ee): wire createInvite/acceptInvite + schemaVersion 2 daily-answer encrypt/decrypt (Batch 3) 2026-06-28 17:04:47 -05:00
null faac40afbf feat(ios/crypto): CryptoKit interop primitives — RecoveryKeyManager, FieldEncryptor (enc:v1:), CoupleEncryptionManager (Argon2id v1.3), Keychain store, wordlist bundle, tests + FirestoreService E2EE contract annotation 2026-06-28 16:56:51 -05:00
null ae4e6f4542 docs(ios/crypto): wire-format spec for CryptoKit interop with Android Tink AEAD + Argon2id (E2EE Batch 1) 2026-06-28 16:45:19 -05:00
null fed91dbe46 brand: finalize app icon, brand docs, onboarding visuals, feature graphic 2026-06-25 14:52:21 -05:00
null 334cb079fa brand: update app icon, iOS assets, Android drawables, brand docs (Pass H) 2026-06-25 14:34:27 -05:00
null 17d7489dd8 feat(engagement): streak milestones, celebration overlays, Together screen, avatar in notifications 2026-06-23 18:23:49 -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 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 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 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 ecc41a77d2 feat: wheel screen, play hub, storage data source, iOS wheel/play views 2026-06-22 10:25:58 -05:00
null b29280ba87 feat: invite flow improvements, pairing success screen, iOS pairing updates 2026-06-22 09:06:40 -05:00
null 5e16177eb2 feat: code push -- notifications, cloud functions, iOS updates 2026-06-22 08:53:23 -05:00
null 9166721282 feat: notification improvements + daily question reminder cloud function 2026-06-22 08:34:15 -05:00
null 8f47593cf5 fix: user repository cleanup, settings VM, iOS app init + settings parity 2026-06-21 17:44:56 -05:00
null 6b50e84f60 fix: onboarding flow, settings screen polish, iOS settings parity 2026-06-21 17:37:14 -05:00
null b720f0cf14 feat: pending invite store, iOS subscription illustration, settings theme polish 2026-06-21 17:04:40 -05:00
null b19fc0934c feat: paywall illustrations, subscription polish, recovery store, settings cleanup 2026-06-21 16:27:55 -05:00
null af70280daa feat: E2EE recovery flow, iOS parity updates, onboarding + pairing polish 2026-06-21 11:20:48 -05:00
null 26419ce08d 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 2a1e5fad10 feat(functions): add createInviteCallable and tighten invite rules 2026-06-20 23:28:20 -05:00
null fb371b10c8 fix(ios): register Closer source path in Package.swift and fix compile errors 2026-06-20 23:05:43 -05:00
null 59c239694a fix(ios): address Pass B warnings from code audit 2026-06-20 22:58:11 -05:00
null cb54ed3079 feat(ios): fix Pass A compile blockers from code audit 2026-06-20 22:54:21 -05:00
null 8967fd23cd 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 67251537eb 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