

<a href="https://github.com/BioHazard786/Alternate/issues">Report Bug</a>
·
<a href="https://github.com/BioHazard786/Alternate/issues">Request Feature</a>
Alternate - Local Caller ID Detector
A privacy-focused React Native app that helps you identify unknown callers without cluttering your device's main contact list. Perfect for temporary number storage when you need to know who's calling but don't want the number to appear in WhatsApp, Telegram, or other messaging apps.
Features
- Local Caller ID Detection: Identify incoming calls using your private database
- Temporary Number Storage: Save numbers locally without affecting your main contacts
- Privacy Protection: Numbers won't appear in WhatsApp, Telegram, or other messaging apps
- Phone Number Validation: Smart phone number input with country selection
- Custom Native Module: Built-in caller ID functionality using Android's native capabilities
- Country Selector: Beautiful bottom sheet country picker with search
- Material Design: Modern UI following Material Design 3 principles
- Offline Storage: All data stored locally using Android's native SQLite database
Use Case
When you receive calls from unknown numbers but don't want to save them to your main contact list:
- Delivery drivers - Know who's calling without adding to contacts
- Service providers - Temporary contractors, repair services, etc.
- Business contacts - People you interact with briefly
- Privacy protection - Keep your main contact list clean while still identifying callers
Tech Stack
- React Native with Expo
- TypeScript for type safety
- React Native Paper for Material Design components
- Room for local data storage
Screenshots


Installation
Prerequisites
- Node.js (v18 or later)
- npm or yarn
- Expo CLI
- Android Studio (for Android development)
- Xcode (for iOS development, macOS only)
Setup
- Clone the repository:
git clone https://github.com/BioHazard786/Alternate.git
cd Alternate
- Install dependencies:
npm install
- Start the development server:
npx expo start
Building APK
Development Build
To build a development APK:
npx expo run:android
Production Build with EAS
- Install EAS CLI:
npm install -g eas-cli
- Configure EAS:
npx eas build:configure
- Build for Android:
npx eas build --platform android
Local Production Build
To build a production APK locally without EAS:
Method 1: Quick Build (Debug-Signed)
For development and testing purposes:
- Install dependencies:
npm ci
- Build for Android:
cd android
./gradlew assembleRelease
Note: This creates a release APK but signed with debug keystore. The APK will be generated at android/app/build/outputs/apk/release/
Method 2: Properly Signed APK (Recommended for Distribution)
For production distribution, use Android Studio to create a properly signed APK:
-
Open the project in Android Studio:
-
Open Android Studio
- Select "Open an existing Android Studio project"
- Navigate to the
android folder in your project
-
Click "OK"
-
Generate Signed APK:
-
Go to Build → Generate Signed Bundle / APK
- Select "APK" and click "Next"
- Choose "Create new..." to generate a new keystore or "Choose existing..." if you have one
- Fill in the keystore details (store this information securely!)
- Click "Next"
- Select "release" build variant
-
Click "Create"
-
Locate the signed APK:
- The signed APK will be generated in
android/app/release/
- This APK is properly signed and ready for distribution
Important Notes:
- Debug-signed APKs (from
./gradlew assembleRelease) are fine for development and testing
- For Play Store or distribution to users, always use properly signed APKs from Android Studio
- APKs signed with different keystores cannot update each other on Android devices
Project Structure
├── app/ # Main app screens
├── components/ # Reusable components
├── constants/ # App constants
├── hooks/ # Custom hooks
├── lib/ # Utility functions and types
├── modules/ # Custom native modules
│ └── caller-id/ # Caller ID native module with SQLite integration
├── store/ # State management
└── assets/ # Images and other assets
How It Works
- Add Numbers Locally: Save phone numbers with names in your private database
- Caller ID Detection: When calls come in, the app checks against your local database
- Privacy Maintained: Numbers remain completely separate from your device's contact list
- No Sync Issues: Won't interfere with messaging apps or cloud contact syncing
Benefits
- Clean Contact List: Keep your main contacts organized
- Privacy Control: Numbers stay private to this app only
- No Messaging App Clutter: Saved numbers won't appear in WhatsApp, Telegram, etc.
- Temporary Storage: Perfect for short-term contact needs
- Offline Functionality: Works completely offline with local SQLite storage
Contributing
Please see the CONTRIBUTING.md file for detailed guidelines on how to contribute to this project.
Star History

License
This project is licensed under the MIT License - see the LICENSE file for details.
Contact
Mohd Zaid - Telegram - bzatch70@gmail.com
Project Link: https://github.com/BioHazard786/Alternate
Acknowledgments
- Thanks To dmkvsk for native module inspiration Repo
- Thanks To SimpleNexus for call directory implementation Repo
Keep your contact list clean while never missing an important call again!