Install expo-observe (56.0.29, matching the SDK 56 line) and configure
its endpoint under expo.extra.eas.observe in app.json, alongside the
existing EAS projectId. Leave dispatchInDebug and sampleRate at their
defaults.
Log an app_started custom event once per cold start from the root
layout's existing "run once" startup effect, and install a global JS
error handler that logs xprem_js_crash and then always delegates to
whatever handler was previously registered, so existing Crashlytics
reporting is unaffected.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Unpaired users could only reach a waiting-room dead end and could not answer
questions until a partner joined. Responses.couple_id is now nullable so a
solo user answers immediately and banks "sealed answers" (couple_id IS NULL).
Pairing claims both members' sealed answers and computes matches for every
question both have now answered. Invite copy and the unpaired push nudge
escalate with the sealed answer count.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Both share modals opened the instagram-stories:// scheme without ever
placing the captured PNG on the pasteboard, so Instagram opened an empty
story. Replace the manual scheme launch with react-native-share
shareSingle(INSTAGRAM_STORIES), which writes the image to UIPasteboard
under com.instagram.sharedSticker.backgroundImage on iOS and uses the
ADD_TO_STORY intent on Android. Gate the flow on the required Facebook
App ID (EXPO_PUBLIC_FACEBOOK_APP_ID) and Instagram being installed, with
fallback to the system share sheet, and remove the dead base64 reads.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lets new users skip the onboarding avatar step and instead defers the ask
to a lightweight, dismissible prompt shown once after the couple's first
match. Also personalizes the home screen's first pack recommendation using
the usage_reason already collected during onboarding, which now round-trips
through GET /v1/me.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds a shareable https://sauci.app/join/{code} link as an alternative to
manually typing an 8-character invite code:
- apps/web: /join/[code] page that validates the code shape client-side,
attempts the app.sauci:// scheme link, and falls back to a large code
display with copy button plus App Store/Play Store links; PostHog events
for page view, code copy, and store-button clicks.
- apps/web: apple-app-site-association and assetlinks.json under
/.well-known so iOS Universal Links and Android App Links can verify
sauci.app for /join/*. The Android release cert SHA-256 fingerprint is a
placeholder pending the real value.
- apps/mobile: associated domains (iOS) and an intent filter (Android) for
https://sauci.app/join/*, alongside the existing app.sauci scheme.
- apps/mobile: parse incoming join links, pre-fill and highlight the code on
the pairing screen, stash the code for signed-out/mid-onboarding users and
apply it once they reach pairing, and offer a once-per-session clipboard
hand-off that is never auto-applied.
- apps/mobile: share message now leads with the join link, keeping the raw
code visible as a fallback.
- Analytics: invite_link_opened, pairing_code_prefilled (mobile);
join_page_viewed, join_page_code_copied, join_page_store_button_clicked
(web).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add a conditional Home cue for partner-answered questions and route both the card and catch-up reminders into the pending answer flow. Track prompt engagement and cover hidden, visible, CTA, and notification behavior.
Measure untouched mobile source, add regression coverage for native media paths and account operations, and enforce ratcheting API and mobile thresholds in required CI checks.
Share bounded database pools across API repositories, consolidate sync and chat queries, and make mobile refreshes cache-aware and foreground-aware.
Add focused regression coverage, client freshness documentation, and repository agent role configuration.
Use reported user timezones for daily response limits, expose couple streak state and reminders, and improve swipe and live-drawing synchronization with focused tests and documentation.
Replace the Supabase application data plane with the Node/PostgreSQL API, migrate mobile, admin, web, and MCP callers, add controlled cutover tooling, and define hardened Dokploy infrastructure.