BioHazard786/Alternate
๐ Privacy-focused caller ID React Native app. Identify unknown callers locally without cluttering your main contacts. Built with Expo, Material Design 3, and custom native modules.
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 startBuilding APK
Development Build
To build a development APK:
npx expo run:androidProduction Build with EAS
- Install EAS CLI:
npm install -g eas-cli- Configure EAS:
npx eas build:configure- Build for Android:
npx eas build --platform androidLocal 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 assembleReleaseNote: 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
androidfolder 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"
- Go to
-
Locate the signed APK:
- The signed APK will be generated in
android/app/release/ - This APK is properly signed and ready for distribution
- The signed APK will be generated in
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!




