Skip to content

Latest commit

 

History

History
112 lines (83 loc) · 3.75 KB

File metadata and controls

112 lines (83 loc) · 3.75 KB

CrystalQore Mobile App

Community-driven mobile application for CrystalQore Unified Communications.

Status: Looking for Contributors

The CrystalQore backend already provides full mobile support:

  • JWT authentication (POST /api/auth/mobile) for login, token refresh, and logout
  • Push notifications via Firebase Cloud Messaging (iOS APNs + Android FCM)
  • Device registration (POST /api/devices) for push token management
  • PWA support as a fallback for mobile browsers

We are looking for community contributors to build native iOS and Android applications.

Recommended Stack

Layer Technology Rationale
Framework React Native (Expo) Shared codebase with web React knowledge
Navigation React Navigation Standard for RN apps
State React Query + Zustand Matches the web app stack
Push @react-native-firebase/messaging FCM integration already built server-side
WebRTC react-native-webrtc Audio/video calls
Storage @react-native-async-storage/async-storage Token persistence

Backend API Endpoints for Mobile

Authentication

POST   /api/auth/mobile          # Login (returns JWT)
GET    /api/auth/mobile          # Verify token
DELETE /api/auth/mobile          # Logout

Device Registration

GET    /api/devices              # List registered devices
POST   /api/devices              # Register push token
DELETE /api/devices/:id          # Unregister device

Core Features (all require Authorization: Bearer <jwt>)

GET    /api/dashboard            # Dashboard data
GET    /api/chat/conversations   # Chat conversations
POST   /api/chat/conversations/:id/messages  # Send message
GET    /api/cdr                  # Call detail records
POST   /api/click2dial           # Initiate call
GET    /api/contacts             # Contacts list
GET    /api/presence/stream      # Presence SSE stream
GET    /api/webrtc/stream        # WebRTC signaling SSE
POST   /api/webrtc/call          # Initiate WebRTC call
GET    /api/notifications        # Notifications
GET    /api/fax                  # Fax list
GET    /api/files                # Files
GET    /api/calendar             # Calendar events
GET    /api/notes                # Notes

Getting Started

  1. Install prerequisites:

    npm install -g expo-cli
  2. Initialize the project (from this directory):

    npx create-expo-app@latest . --template blank-typescript
  3. Configure the API base URL in your environment:

    EXPO_PUBLIC_API_URL=https://your-crystalqore-instance.com
    
  4. Implement authentication flow using /api/auth/mobile

  5. Store the JWT securely using expo-secure-store

Contribution Guidelines

  1. Fork the repository and create a feature branch
  2. Follow the existing code style (TypeScript, functional components)
  3. Test on both iOS and Android simulators before submitting PRs
  4. Keep dependencies minimal and well-maintained
  5. Document any new API integrations needed

Priority Features

  • Login / authentication flow
  • Push notification handling (incoming calls, messages)
  • Chat (1:1 and group messaging)
  • Contacts list with Click2Dial
  • Call history (CDR)
  • Presence status display
  • WebRTC audio/video calls
  • Settings and profile management

Architecture Notes

The mobile app should authenticate via JWT (not session cookies). The server middleware already supports Authorization: Bearer <token> headers and injects user context for all API routes.

For real-time features (presence, WebRTC signaling), connect to the SSE streams at /api/presence/stream and /api/webrtc/stream with the Bearer token.

License

Copyright 2025-2026 ClearConverse Corporation. Licensed under Apache-2.0.