A fully offline React Native app for managing personal call logs with Material Design 3 UI, built with Expo and TypeScript.
- ๐ Call Log Management: Add, edit, delete, and search call log entries
- ๐จ Material Design 3: Modern UI with dynamic theming (light/dark mode)
- ๐ Internationalization: Support for English and Marathi languages
- ๐พ Offline Storage: All data stored locally using AsyncStorage
- ๐ Search Functionality: Quick search through call logs
- ๐ฑ Cross-Platform: Runs on Android (iOS support available)
- โก Performance: Optimized with React Native best practices
- Node.js (v16 or higher)
- npm or yarn
- Android Studio (for Android development)
- Expo CLI
- EAS CLI (for building APK)
-
Clone the repository
git clone <repository-url> cd Personal_call_log_saver
-
Install dependencies
npm install
-
Start the development server
npm start # or npx expo start
- Install Expo Go on your Android device/emulator
- Scan the QR code or enter the URL manually:
exp://192.168.1.3:8081
npm run android
# or
npx expo run:androidnpm run build:android:local
# or
eas build --local --platform androidPersonal_call_log_saver/
โโโ src/
โ โโโ components/ # Reusable UI components
โ โ โโโ CallItem.tsx # Individual call log item
โ โ โโโ CallModal.tsx # Add/Edit call modal
โ โโโ context/ # React Context providers
โ โ โโโ ThemeContext.tsx # Theme management
โ โ โโโ I18nContext.tsx # Internationalization
โ โโโ i18n/ # Internationalization setup
โ โ โโโ index.ts # i18next configuration
โ โโโ locales/ # Translation files
โ โ โโโ en.json # English translations
โ โ โโโ mr.json # Marathi translations
โ โโโ navigation/ # Navigation setup
โ โ โโโ BottomTabNavigator.tsx
โ โโโ screens/ # App screens
โ โ โโโ CallLogsScreen.tsx
โ โ โโโ SettingsScreen.tsx
โ โโโ storage/ # Data persistence
โ โ โโโ callLog.ts # AsyncStorage service
โ โโโ types/ # TypeScript type definitions
โ โโโ index.ts
โโโ assets/ # App assets (icons, splash)
โโโ android/ # Android native code
โโโ App.tsx # Main app component
โโโ index.js # App entry point
โโโ app.json # Expo configuration
โโโ eas.json # EAS Build configuration
โโโ package.json # Dependencies and scripts
โโโ README.md # This file
- React Native 0.73.6: Cross-platform mobile framework
- Expo SDK 50: Development platform and tools
- TypeScript: Type-safe JavaScript
- React Navigation 6: Navigation library
- React Native Paper: Material Design components
- AsyncStorage: Local data persistence
- i18next: Internationalization framework
- React Native Reanimated: Advanced animations
- React Native Gesture Handler: Touch gestures
- React Native Vector Icons: Icon library
- Material Design 3: Modern, accessible design system
- Dynamic Theming: Automatic light/dark mode support
- Responsive Layout: Optimized for different screen sizes
- Intuitive Navigation: Bottom tab navigation with clear labels
- Accessible: Screen reader support and proper contrast ratios
The app supports multiple languages:
- English (default)
- Marathi (เคฎเคฐเคพเค เฅ)
- Create a new translation file in
src/locales/ - Add translations for all keys used in the app
- Update the language picker in
SettingsScreen.tsx - Update the i18n configuration in
src/i18n/index.ts
- View all saved call logs
- Search functionality
- Add new call log entries
- Edit existing entries
- Delete entries with confirmation
- Language selection (English/Marathi)
- Theme toggle (Light/Dark/System)
- App information
# Development
npm start # Start Expo development server
npm run android # Run on Android emulator/device
npm run ios # Run on iOS simulator/device
npm run web # Run on web browser
# Building
npm run build:android # Build APK with EAS (cloud)
npm run build:android:local # Build APK locally with EAS
# Code Quality
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues automatically
npm run type-check # Run TypeScript type checking-
Android Development
- Install Android Studio
- Set up Android SDK and emulator
- Configure environment variables (ANDROID_HOME)
-
iOS Development (macOS only)
- Install Xcode
- Set up iOS simulator
eas build --local --platform androideas build --platform androidThe built APK will be available in the project root directory.
react-native: Cross-platform frameworkexpo: Development platformreact-navigation: Navigationreact-native-paper: UI components@react-native-async-storage/async-storage: Data storagei18next&react-i18next: Internationalization
typescript: Type checking@types/*: Type definitionseslint: Code lintingprettier: Code formatting
- Build the APK using EAS Build
- Test on physical devices
- Distribute via Google Play Store or direct APK sharing
For OTA updates, configure Expo Updates in app.json and use:
eas update --branch production-
Metro bundler cache issues
npx expo start --clear
-
Android build issues
cd android && ./gradlew clean && cd .. npx expo run:android
-
Dependency conflicts
rm -rf node_modules package-lock.json npm install
-
Storage permission issues
- Ensure proper permissions are set in
android/app/src/main/AndroidManifest.xml
- Ensure proper permissions are set in
This project is licensed under the MIT License - see the LICENSE file for details.
Created with โค๏ธ by [Your Name]
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Initial release
- Call log management functionality
- Material Design 3 UI
- English and Marathi localization
- Dark/Light theme support
- AsyncStorage integration
- Expo EAS Build support
- Export call logs to CSV/JSON
- Call statistics and analytics
- Contact integration
- Voice memo attachments
- Cloud backup and sync
- Widget support
- iOS version
- Additional language support
If you encounter any issues or have questions:
- Check the Troubleshooting section
- Search existing Issues
- Create a new issue with detailed information
Made with React Native & Expo ๐
- โ Easy Copy: One-tap copy phone numbers to clipboard
- โ Bottom Tab Navigation: Intuitive navigation between Call Logs and Settings
- โ Search & Filter: Real-time search by name or phone number
- โ Data Persistence: All data stored locally on device
Screenshots would go here
- React Native 0.72.6 - Cross-platform mobile development
- React Navigation 6 - Navigation with bottom tabs
- React Native Paper 5 - Material Design 3 components
- AsyncStorage - Local data persistence
- i18next - Internationalization (English & Marathi)
- React Native Vector Icons - Material Design icons
- TypeScript - Type safety and better development experience
- Node.js 16 or higher
- React Native CLI
- Android Studio (for Android development)
- Java 11 or higher
-
Clone and Install Dependencies
cd /Users/tanmay/Documents/Personal_call_log_saver npm install -
Install iOS Dependencies (if building for iOS)
cd ios && pod install && cd ..
-
Start Metro Bundler
npm start
-
Run on Android
npm run android
-
Run on iOS (if needed)
npm run ios
After installation, link vector icons:
npx react-native-vector-icons linkFor Android, you may need to manually add vector icons to your build configuration.
src/
โโโ components/ # Reusable UI components
โ โโโ CallItem.tsx # Individual call log item
โ โโโ CallModal.tsx # Add/edit call modal
โโโ context/ # React context providers
โ โโโ I18nContext.tsx # Internationalization context
โ โโโ ThemeContext.tsx # Theme management context
โโโ i18n/ # Internationalization setup
โ โโโ index.ts # i18n configuration
โโโ locales/ # Translation files
โ โโโ en.json # English translations
โ โโโ mr.json # Marathi translations
โโโ navigation/ # App navigation
โ โโโ BottomTabNavigator.tsx
โโโ screens/ # App screens
โ โโโ CallLogsScreen.tsx
โ โโโ SettingsScreen.tsx
โโโ storage/ # Data persistence layer
โ โโโ callLog.ts # AsyncStorage operations
โโโ types/ # TypeScript type definitions
โโโ index.ts
- Tap the + (FAB) button on the Call Logs screen
- Enter name (optional) and phone number (required)
- Tap Save
- Tap on any call log entry
- Modify the details in the modal
- Tap Save
- Long press on any call log entry
- Confirm deletion in the alert dialog
- Tap the copy icon next to any phone number
- Number is copied to clipboard with confirmation
- Use the search bar at the top of Call Logs screen
- Search by name or phone number
- Results filter in real-time
- Go to Settings screen
- Select desired language (English/Marathi)
- App immediately updates to selected language
All data is stored locally using @react-native-async-storage/async-storage:
- Call Logs: Stored in
call_logskey - Language Preference: Stored in
app_languagekey
Data persists across app sessions and device restarts.
- Create new translation file in
src/locales/ - Add language to
src/i18n/index.ts - Update language picker in Settings screen
- Themes are defined in
src/context/ThemeContext.tsx - Material Design 3 colors used throughout
- Automatic dark/light theme detection
- New screens can be added to
src/screens/ - Additional storage methods in
src/storage/ - New components in
src/components/
cd android
./gradlew assembleReleasecd android
./gradlew bundleRelease- Follow the existing code structure
- Use TypeScript for type safety
- Follow Material Design 3 guidelines
- Add translations for new text content
- Test on both light and dark themes
This project is open source and available under the MIT License.
For issues or questions, please create an issue in the project repository.