Skip to content

Add Supabase integration and call infrastructure#1

Merged
gavyncaldwell merged 32 commits intomainfrom
feature/supabase-setup
Mar 1, 2026
Merged

Add Supabase integration and call infrastructure#1
gavyncaldwell merged 32 commits intomainfrom
feature/supabase-setup

Conversation

@gavyncaldwell
Copy link
Collaborator

Summary

  • Supabase SDK integration: Replace stub client with real Supabase SDK, add auth services (login, signup, session management), wire contacts/favorites/search to live data, and add initial database schema migration
  • Call infrastructure: Add WebRTC, CallKeep, InCallManager dependencies, implement CallProvider context for signaling and call management, wire call screens to real CallManager actions, add camera/mic permissions and VoIP background modes
  • Screen updates: Wire RecentsScreen to real call history store, add auth-aware profile editing and sign-out to SettingsScreen, update navigation with auth gating
  • Build config: Update metro.config for monorepo resolution, update Xcode project with Hermes/new architecture flags, add JWT verification to signaling server

Test plan

  • Verify login and signup flows work against Supabase
  • Confirm contacts, favorites, and search load real data
  • Test call screens (outgoing, incoming, active) with signaling server
  • Verify RecentsScreen displays call history from store
  • Confirm SettingsScreen profile editing and sign-out work
  • Run iOS build to verify Xcode project config changes

Hermes URL implementation has read-only protocol property which
the Supabase Realtime client tries to mutate.
…onfig

- Replace mock call history with Zustand callHistoryStore in RecentsScreen
- Add auth-aware profile editing and sign-out to SettingsScreen
- Update metro.config.js for monorepo watch folders and module resolution
- Update Xcode project with PrivacyInfo, Hermes, and new architecture flags
- Add Gemfile.lock and Xcode workspace files
The shared package exports types from dist/, which doesn't exist in a
fresh CI checkout. Build it first so signaling can resolve the module.
ESLint 8 requires a config file and the trailing slash on `src/` caused
"no files found" in CI. Add .eslintrc.json and use `src` without slash.
- Android: Fix gradle plugin path to resolve from monorepo root
  node_modules instead of local (hoisted by npm workspaces)
- iOS: Update Gemfile.lock bundler version from 1.17.2 to 2.5.6
  (1.17.2 incompatible with Ruby 3.2, untaint method removed)
- Tests: Mock validateToken in server tests so they don't require
  a real SUPABASE_JWT_SECRET (tests predate real JWT verification)
Top-level await is not allowed in CommonJS modules under NodeNext.
vi.mock is hoisted before imports by vitest, so a static import works.
- iOS: Use Ruby 3.1 (CFPropertyList 3.0.9 in Gemfile.lock requires < 3.2)
- Android: Set react-native paths in app/build.gradle to resolve from
  monorepo root node_modules (npm workspaces hoists dependencies)
AsyncStorage v3 ships shared_storage as a local Maven artifact in
android/local_repo/ but doesn't declare the repo in its own gradle
config. Add it to allprojects.repositories with monorepo-aware path.
@gavyncaldwell gavyncaldwell merged commit d9294f6 into main Mar 1, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant