A modern, feature-rich React Native notes application built with Expo Router and Firebase integration. Create, edit, search, and manage your notes with a beautiful dark/light theme interface.
- 📝 Create & Edit Notes - Add new notes with title and content
- 🔍 Real-time Search - Search through your notes instantly
- 🌓 Dark/Light Mode - Toggle between themes or use system preference
- 💾 Offline Storage - Works offline with AsyncStorage
- ☁️ Cloud Sync - Automatic Firebase Firestore synchronization
- 🎨 Modern UI - Clean, intuitive interface with smooth animations
- 📱 Cross-platform - Works on iOS, Android, and Web
- 🗑️ Delete Protection - Confirmation dialog before deleting notes
- 🔄 Duplicate Prevention - Prevents creating identical notes
- Framework: React Native with Expo Router
- Database: Firebase Firestore
- Storage: AsyncStorage for offline functionality
- UI Components: Custom components with React Native
- Icons: Expo Vector Icons
- State Management: React Hooks (useState, useContext)
- Navigation: Expo Router
- Styling: StyleSheet API
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI
- Android Studio (for Android development)
- Xcode (for iOS development - macOS only)
git clone https://github.com/YashBhalodiya/notes-app.git
cd notes-appnpm install
# or
yarn install- Create a new Firebase project at Firebase Console
- Enable Firestore Database
- Copy your Firebase config and update
firebase.js:
const firebaseConfig = {
apiKey: "your-api-key",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project-id",
storageBucket: "your-project.appspot.com",
messagingSenderId: "your-sender-id",
appId: "your-app-id"
};# Start development server
npm start
# Run on Android
npm run android
# Run on iOS
npm run ios
# Run on Web
npm run webnotes-app/
├── app/
│ ├── _layout.tsx # Root layout with theme provider
│ └── index.tsx # Main screen entry point
├── src/
│ ├── components/
│ │ └── ui/ # Reusable UI components
│ │ ├── EmptyState.jsx
│ │ ├── FloatingActionButton.jsx
│ │ ├── LoadingSpinner.jsx
│ │ ├── SearchBar.jsx
│ │ └── ThemeToggle.jsx
│ ├── contexts/
│ │ └── ThemeContext.jsx # Theme management context
│ ├── features/
│ │ └── notes/
│ │ ├── components/ # Note-specific components
│ │ ├── hooks/ # Custom hooks
│ │ └── screens/ # Note screens
│ └── assets/
│ └── images/ # App screenshots and assets
├── firebase.js # Firebase configuration
└── package.json
- Light Mode: Clean white interface
- Dark Mode: OLED-friendly dark interface
- System Mode: Automatically follows device theme
- Persistent: Theme preference saved locally
- Dual Storage: AsyncStorage for offline + Firestore for sync
- Resilient: App works even if Firestore is unavailable
- Real-time: Changes sync across devices instantly
- Instant Search: Results appear as you type
- Multi-field: Searches both title and content
- Case Insensitive: Smart search regardless of case
npm start # Start Expo development server
npm run android # Run on Android device/emulator
npm run ios # Run on iOS device/simulator
npm run web # Run in web browser
npm run lint # Run ESLint for code qualityexpo- Expo frameworkexpo-router- File-based routingfirebase- Backend services@react-native-async-storage/async-storage- Local storage@expo/vector-icons- Icon libraryreact-native-safe-area-context- Safe area handling
typescript- Type safetyeslint- Code linting@babel/core- JavaScript compiler
# Build for Android
npx expo build:android
# Build for iOS
npx expo build:ios
# Create development build
npx expo run:android --variant release# Install EAS CLI
npm install -g @expo/eas-cli
# Build and submit to app stores
eas build --auto-submit- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Your Name
- GitHub: @YashBhalodiya
- Thanks to the Expo team for the amazing framework
- Firebase for providing excellent backend services
- React Native community for continuous support
⭐ Star this repository if you found it helpful!



