Skip to content

About

React Native messaging app with real-time chat and six AI features, including semantic search over embeddings. (Gauntlet AI, late 2025)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

334 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MessageAI

Intelligent team messaging with AI-powered features

A production-ready React Native messaging app with real-time communication and 6 AI-powered features for productivity. Built with Expo, Firebase, and Claude AI.

License Tests Platform


✨ Key Features

πŸ”₯ Core Messaging

  • Real-time messaging with instant delivery
  • Direct & group chats with participant management
  • Read receipts with detailed read status in group chats
  • Typing indicators with presence tracking
  • Online/offline status for all participants
  • Local notifications with conversation deep links
  • Offline support with message retry/delete

πŸ€– AI-Powered Productivity (6 Features)

  1. πŸ“ Thread Summarization

    • Generate AI summaries of long conversations
    • Configurable message count (10, 25, 50, 100)
    • Extracts key points and main topics
  2. πŸ” Semantic Search

    • Search by meaning, not just keywords
    • Powered by embeddings (OpenAI + Pinecone)
    • Fast vector similarity search
  3. βœ… Action Items Extraction

    • Auto-detects tasks from conversations
    • Assigns to participants
    • Tracks completion status
    • Priority levels (high/medium/low)
  4. 🎯 Priority Detection

    • Automatically flags urgent messages
    • Visual badges for high-priority items
    • Background processing pipeline
  5. πŸ“Š Decision Tracking

    • Captures key decisions from discussions
    • Confidence scoring for decisions
    • Searchable decision history
  6. πŸ“… Smart Meeting Scheduler

    • Analyzes scheduling discussions
    • Suggests 3 optimal meeting times
    • Provides reasoning for each suggestion
    • Copy-to-clipboard for quick sharing

πŸ›‘οΈ Production-Ready Error Handling

  • 3-tier error boundaries (app, screen, feature)
  • User-friendly error messages (technical β†’ plain language)
  • Message retry/delete for failed sends
  • AsyncStorage persistence (last 100 errors, last 50 failed messages)
  • Developer logging with context and stack traces

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    React Native App                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Screens (Expo Router)                                 β”‚ β”‚
β”‚  β”‚  - Auth (login, register)                              β”‚ β”‚
β”‚  β”‚  - Conversations List                                  β”‚ β”‚
β”‚  β”‚  - Chat Screen (messages + AI features)               β”‚ β”‚
β”‚  β”‚  - New Chat (direct + group)                          β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Components                                            β”‚ β”‚
β”‚  β”‚  - MessageList, MessageBubble, MessageInput           β”‚ β”‚
β”‚  β”‚  - AI Modals (Summary, Search, Actions, etc.)        β”‚ β”‚
β”‚  β”‚  - Error Boundaries & Fallbacks                       β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Services                                              β”‚ β”‚
β”‚  β”‚  - authService, firestoreService                      β”‚ β”‚
β”‚  β”‚  - aiService (Cloud Functions wrapper)                β”‚ β”‚
β”‚  β”‚  - presenceService, notificationService               β”‚ β”‚
β”‚  β”‚  - errorLogger, failedMessagesService                 β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  State (Zustand + AsyncStorage)                       β”‚ β”‚
β”‚  β”‚  - authStore, chatStore                               β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Firebase Backend                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Firebase Authentication                               β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Cloud Firestore                                       β”‚ β”‚
β”‚  β”‚  - /users, /conversations, /messages                  β”‚ β”‚
β”‚  β”‚  - /typingUsers, /ai_summaries, /ai_action_items     β”‚ β”‚
β”‚  β”‚  - Real-time listeners, participant-based security    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Cloud Functions (Node.js + TypeScript)               β”‚ β”‚
β”‚  β”‚  - AI features (summarize, search, actions, etc.)     β”‚ β”‚
β”‚  β”‚  - Rate limiting, caching, embeddings pipeline        β”‚ β”‚
β”‚  β”‚  - Security validation                                 β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            ↕
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  External AI Services                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚  β”‚  Anthropic       β”‚  β”‚  OpenAI          β”‚                β”‚
β”‚  β”‚  Claude 3.5      β”‚  β”‚  text-embedding  β”‚                β”‚
β”‚  β”‚  (Sonnet)        β”‚  β”‚  -3-small        β”‚                β”‚
β”‚  β”‚  - Summarization β”‚  β”‚  - Embeddings    β”‚                β”‚
β”‚  β”‚  - Extraction    β”‚  β”‚                  β”‚                β”‚
β”‚  β”‚  - Analysis      β”‚  β”‚                  β”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                       β”‚
β”‚  β”‚  Pinecone        β”‚                                       β”‚
β”‚  β”‚  Vector DB       β”‚                                       β”‚
β”‚  β”‚  - Semantic      β”‚                                       β”‚
β”‚  β”‚    search        β”‚                                       β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

See ARCHITECTURE.md for detailed documentation.


πŸš€ Tech Stack

Frontend

  • React Native 0.81 with Expo SDK 54
  • Expo Router (file-based navigation)
  • TypeScript for type safety
  • Zustand for state management
  • AsyncStorage for persistence

Backend

  • Firebase Authentication (email/password)
  • Cloud Firestore (NoSQL database)
  • Cloud Functions (Node.js 20 + TypeScript)
  • Firebase Admin SDK for server-side operations

AI Services

  • Anthropic Claude 3.5 Sonnet (summarization, extraction, analysis)
  • OpenAI text-embedding-3-small (semantic embeddings)
  • Pinecone (vector database for semantic search)

Testing & Quality

  • Jest (265 tests: 212 backend + 53 frontend)
  • ESLint with TypeScript rules
  • TypeScript strict mode
  • Firebase Emulator for integration tests

πŸ“¦ Installation & Setup

Prerequisites

  • Node.js 20+ (use nvm use to auto-select)
  • Expo CLI
  • Firebase CLI (npm install -g firebase-tools)
  • iOS Simulator (Mac) or Android Emulator

1. Clone & Install

git clone <repository-url>
cd message-ai
npm install

2. Configure Environment Variables

Create .env in project root:

# Firebase Config (from Firebase Console)
EXPO_PUBLIC_FIREBASE_API_KEY=your_api_key
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
EXPO_PUBLIC_FIREBASE_APP_ID=your_app_id

# AI Services (Optional - only needed for AI features)
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
PINECONE_API_KEY=...
PINECONE_ENVIRONMENT=us-west1-gcp
PINECONE_INDEX_NAME=messageai-embeddings

See PHASE_0_SETUP.md for detailed Firebase setup guide.

3. Deploy Backend

# Deploy Firestore rules
firebase deploy --only firestore:rules

# Deploy Cloud Functions (for AI features)
cd functions
npm install
npm run build
firebase deploy --only functions

4. Run the App

npx expo start

Then press:

  • i for iOS Simulator
  • a for Android Emulator
  • Scan QR code for physical device

πŸ§ͺ Testing

Run All Tests

npm run validate  # Lint + type-check + all tests

Unit Tests (Frontend + Backend)

npm test          # Run all unit tests (265 tests)
cd functions && npm test  # Backend only (212 tests)

Integration Tests (Firebase Emulator)

# Terminal 1: Start emulator
firebase emulators:start

# Terminal 2: Run tests
npm run test:integration

What's Tested:

  • Rate limiting (per-user, per-conversation, global)
  • Caching (age-based, message-count invalidation)
  • Security (participant validation, access control)
  • Error handling (translation, logging, retry/delete)
  • Message array operations (pagination, deduplication)

Performance Testing

# Create 1500-message test conversation
node scripts/createPerformanceTestData.js

# Test burst performance (10 messages in 2 seconds)
node scripts/testMessageBurst.js perf_test_1500

# Cleanup test data
node scripts/cleanupPerformanceTestData.js

See PERFORMANCE_TEST_RESULTS.md for benchmarks.


πŸ“š AI Features Documentation

1. Thread Summarization

Purpose: Generate concise summaries of long conversations.

How to Use:

  1. Open any conversation
  2. Tap the ✨ AI menu button
  3. Select "Summarize Thread"
  4. Choose message count (10/25/50/100)
  5. View summary with key points

Implementation:

  • Cloud Function: functions/src/ai/threadSummary.ts
  • Client: components/SummaryModal.tsx
  • Caching: 1 hour (invalidates on new messages)

2. Semantic Search

Purpose: Search by meaning, not just keywords.

How to Use:

  1. Open any conversation
  2. Tap the πŸ” search icon
  3. Enter natural language query
  4. View semantically relevant results

Example Queries:

  • "When is the deadline?" β†’ Finds deadline mentions
  • "Who's working on the API?" β†’ Finds API discussions
  • "Budget approval status" β†’ Finds budget-related messages

Implementation:

  • Embeddings: OpenAI text-embedding-3-small
  • Vector DB: Pinecone (1536 dimensions)
  • Background pipeline: Auto-embeds new messages
  • Cloud Function: functions/src/ai/semanticSearch.ts

3. Action Items Extraction

Purpose: Automatically detect and track tasks from conversations.

How to Use:

  1. Open any conversation
  2. Tap ✨ AI menu β†’ "Extract Action Items"
  3. View detected tasks with:
    • Task description
    • Assigned person
    • Priority (high/medium/low)
    • Due date (if mentioned)
    • Completion status

Features:

  • Auto-assignment based on mentions
  • Priority detection (urgent keywords)
  • Toggle completion status
  • Persistent in Firestore

Implementation:

  • Cloud Function: functions/src/ai/actionItems.ts
  • Caching: 15 minutes
  • Client: components/ActionItemsModal.tsx

4. Priority Detection

Purpose: Auto-flag urgent messages for quick triage.

How to Use:

  • Happens automatically in background
  • High-priority messages show πŸ”΄ badge
  • Detects: "urgent", "asap", "critical", deadlines

Implementation:

  • Background pipeline: Batch analysis every 15 minutes
  • Quick heuristic + Claude analysis
  • Firestore: messages/{id}.priority field
  • Visual: Priority badges in message bubbles

5. Decision Tracking

Purpose: Capture and track key decisions from discussions.

How to Use:

  1. Open any conversation
  2. Tap ✨ AI menu β†’ "Track Decisions"
  3. View captured decisions with:
    • Decision statement
    • Confidence level
    • Context/reasoning
    • Timestamp

Implementation:

  • Cloud Function: functions/src/ai/decisionTracking.ts
  • Caching: 1 hour
  • Client: components/DecisionsModal.tsx

6. Smart Meeting Scheduler

Purpose: Analyze scheduling discussions and suggest meeting times.

How to Use:

  1. Have a conversation about scheduling
  2. Tap ✨ AI menu β†’ "Suggest Meeting Times"
  3. View 3 suggested times with reasoning
  4. Tap "Copy All" to paste into calendar app

Features:

  • Analyzes last 50 messages
  • Considers mentioned availability
  • Provides confidence scores
  • Accounts for constraints

Implementation:

  • Cloud Function: functions/src/ai/proactiveMeeting.ts
  • Uses Claude Tool Use API
  • Client: components/MeetingSchedulerModal.tsx

πŸ› οΈ Development

Project Structure

message-ai/
β”œβ”€β”€ app/                      # Expo Router screens
β”‚   β”œβ”€β”€ (auth)/              # Login, register
β”‚   β”œβ”€β”€ (tabs)/              # Conversations list, new chat
β”‚   β”œβ”€β”€ chat/[id].tsx        # Main chat screen
β”‚   └── _layout.tsx          # Root layout (error boundary)
β”œβ”€β”€ components/               # UI components
β”‚   β”œβ”€β”€ MessageList.tsx      # Inverted FlatList for messages
β”‚   β”œβ”€β”€ MessageBubble.tsx    # Individual message UI
β”‚   β”œβ”€β”€ AI modals/           # 6 AI feature modals
β”‚   β”œβ”€β”€ ErrorBoundary.tsx    # Error handling
β”‚   └── ErrorFallback.tsx    # Error UI components
β”œβ”€β”€ services/                 # Business logic
β”‚   β”œβ”€β”€ aiService.ts         # Cloud Functions wrapper
β”‚   β”œβ”€β”€ authService.ts       # Firebase Auth
β”‚   β”œβ”€β”€ firestoreService.ts  # Firestore operations
β”‚   β”œβ”€β”€ errorLogger.ts       # AsyncStorage error logging
β”‚   └── failedMessagesService.ts  # Message retry
β”œβ”€β”€ store/                    # Zustand state
β”‚   β”œβ”€β”€ authStore.ts         # User session
β”‚   └── chatStore.ts         # Conversations list
β”œβ”€β”€ utils/                    # Helpers
β”‚   β”œβ”€β”€ errorTranslator.ts   # User-friendly errors
β”‚   β”œβ”€β”€ timeFormat.ts        # Smart date formatting
β”‚   └── constants.ts         # App constants
β”œβ”€β”€ functions/                # Cloud Functions
β”‚   └── src/
β”‚       β”œβ”€β”€ ai/              # 6 AI feature functions
β”‚       β”œβ”€β”€ embeddings/      # Background pipeline
β”‚       └── index.ts         # Function exports
└── docs/                     # Documentation
    β”œβ”€β”€ ARCHITECTURE.md      # Detailed architecture
    β”œβ”€β”€ phase2-ai-spike/     # AI implementation docs
    └── phase3-full-implementation/  # Final sprint docs

Code Quality

npm run lint          # ESLint
npm run type-check    # TypeScript
npm run validate      # All checks + tests

Git Workflow

  • Commit messages follow conventional commits
  • All features tested before commit
  • Validation passes before push
  • No force pushes to main

πŸ“Š Performance

Benchmarks (1500-message conversation)

Metric Target Actual Status
Message delivery <200ms ~150ms βœ…
Scroll performance 60 FPS Smooth βœ…
Initial render <500ms ~300ms βœ…
Burst handling (10msg/2s) No jank Smooth βœ…

Optimizations

  • Inverted FlatList for natural chat scrolling
  • Pagination (100 messages initially, load more on scroll)
  • Deduplication for real-time + paginated data
  • Efficient array operations (sub-millisecond prepend/append)

See PERFORMANCE_TEST_RESULTS.md for details.


πŸ› Troubleshooting

Common Issues

"Firebase config missing"

  • Ensure .env file exists in project root
  • Variables must start with EXPO_PUBLIC_
  • Restart dev server after adding .env

"Cloud Functions not working"

  • Deploy functions: cd functions && firebase deploy --only functions
  • Check API keys in Firebase Console β†’ Functions β†’ Configuration
  • View logs: firebase functions:log

"Tests failing"

  • Clear cache: npm test -- --clearCache
  • For integration tests: Ensure emulator is running
  • Check Node version: node -v (should be 20+)

See DEVELOPER_SETUP.md for comprehensive troubleshooting.


πŸ“– Documentation


🚧 Known Limitations (MVP)

  • Local notifications only (FCM not configured)
  • No message editing/deletion (intentional for MVP)
  • No media uploads (text-only for now)
  • No voice/video calls
  • English only (no i18n)

See POST_MVP.md for roadmap.


🀝 Contributing

This is an MVP project. For production use, consider:

  • Implementing FCM for background notifications
  • Adding message editing/deletion
  • Media upload support (images, files)
  • End-to-end encryption
  • Internationalization (i18n)
  • Analytics and monitoring

πŸ“„ License

MIT License - See LICENSE for details.


πŸ™ Acknowledgments

Built with:


Made with ❀️ for the Gauntlet.ai Founder Fellowship

About

React Native messaging app with real-time chat and six AI features, including semantic search over embeddings. (Gauntlet AI, late 2025)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages