A production-ready task management app built with React Native, featuring offline-first architecture, Firebase sync, and push notifications.
π± 130 Project-Specific Interview Questions - Complete technical interview prep covering architecture, state management, offline-first design, Firebase integration, performance optimization, and more. Each question includes detailed answers, real code examples, and explanations.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Sign Up & Login using Firebase Authentication with email/password credentials.
- β Email/password authentication
- β Persistent user sessions across app restarts
- β Secure authentication state management with Redux
- β Automatic session restoration on app launch
Complete CRUD operations for tasks with real-time updates.
Features:
- β Add tasks with title, description, and reminder time
- β Edit tasks with validation for past/future dates
- β Delete tasks with soft-delete mechanism
- β Mark tasks as complete/incomplete with visual feedback
- β Filter tasks by status (All, Active, Completed)
- β Local storage with Realm database
- β Cloud sync to Firestore when online
Offline-first architecture using Realm database with automatic cloud synchronization.
Key Features:
- β Local database using Realm for offline storage
- β Automatic sync when connectivity is restored
- β Conflict resolution with timestamp-based merging
- β Sync status indicators (idle, syncing, succeeded, failed)
- β Unsynced changes tracking for reliable data integrity
- β Background sync with real-time listeners
Sync Flow:
- Changes made offline are stored locally in Realm
- Network connectivity is monitored continuously
- When online, unsynced tasks are pushed to Firestore
- Remote changes are pulled and merged with local data
- Visual sync status displayed in the UI
Local and remote push notifications using Notifee and Firebase Cloud Messaging.
Features:
- β Local push notifications for task reminders
- β Firebase Cloud Messaging integration for remote notifications
- β Scheduled notifications with exact timing
- β Notification channels for Android with custom importance levels
- β Permission management for iOS and Android
- β FCM token management for targeted messaging
- β Background & foreground notification handling
Support for development, staging, and production environments.
Environment Files:
.env.development- Development configuration.env.staging- Staging configuration.env.production- Production configuration
Run Commands:
- Development:
npm run android:dev/npm run ios:dev - Staging:
npm run android:staging/npm run ios:staging - Production:
npm run android:prod/npm run ios:prod
Each environment can have separate Firebase projects, API endpoints, and feature flags.
Dynamic light/dark mode with comprehensive theme system.
Features:
- β Light & dark mode with smooth transitions
- β Theme toggle with floating action button
- β Persistent theme preference across sessions
- β Gradient backgrounds adapting to theme
- β Comprehensive design tokens (colors, spacing, typography, shadows)
- β Animated theme transitions for enhanced UX
Redux Toolkit for centralized, predictable state management.
Redux Slices:
authSlice- User authentication statetaskSlice- Task data and operationssyncSlice- Synchronization statusthemeSlice- Theme preferences
Benefits:
- β Type-safe state management with TypeScript
- β Immutable state updates
- β DevTools integration for debugging
- β Middleware support for async operations
React Navigation 7.x with proper stack structure.
Navigation Stacks:
- Auth Stack - Login, Sign Up screens
- App Stack - Main application screens
- Tab Navigator - Tasks, Settings, Notifications tabs
Features:
- β Conditional navigation based on auth state
- β Type-safe navigation with TypeScript
- β Deep linking support
- β Lazy loading of screens for performance
- β Smooth transitions and animations
Production-ready optimizations for smooth user experience.
- β Virtualization with optimized rendering
- β Item layout calculation for smooth scrolling
- β Batch rendering for better performance
- β Clipped subviews removal to reduce memory usage
- β Memoized components using React.memo
- β Lazy loading of screens and components
- β Debounced search and filtering
- β Optimized re-renders with useCallback and useMemo
- β Image optimization and caching
- β Bundle size optimization with code splitting
- π Network Status Indicator - Real-time connectivity monitoring
- π― Pull-to-refresh - Manual sync trigger
- π Task filtering - By completion status
- π± Responsive UI - Adapts to different screen sizes
- π Animated interactions - Smooth micro-animations
- π‘οΈ Error handling - Comprehensive error boundaries
- π TypeScript - Full type safety across the codebase
- Framework: React Native 0.82.1
- Language: TypeScript
- State Management: Redux Toolkit
- Navigation: React Navigation 7.x
- Local Database: Realm
- Backend: Firebase (Auth, Firestore, Messaging)
- Notifications: Notifee + Firebase Cloud Messaging
- UI Components: Custom themed components with Linear Gradient support
- Node.js (v14 or higher)
- npm or yarn
- React Native CLI
- Xcode (for iOS development)
- Android Studio (for Android development)
- CocoaPods (for iOS)
- Clone the repository:
git clone <repository-url>
cd todo- Install dependencies:
npm install- Install iOS pods:
cd ios
pod install
cd ..-
Android Configuration:
Configure Android SDK Path:
The
android/local.propertiesfile contains the path to your Android SDK. You have two options:-
Option 1 (Recommended): If you have Android SDK configured globally, delete the
local.propertiesfile:rm android/local.properties
-
Option 2: Update the SDK path in
android/local.propertiesto match your local setup:sdk.dir=/Users/YOUR_USERNAME/Library/Android/sdk
Install NDK (Side by Side):
React Native requires NDK for native code compilation. Install it via Android Studio:
- Open Android Studio
- Go to Settings/Preferences β Appearance & Behavior β System Settings β Android SDK
- Click on the SDK Tools tab
- Check NDK (Side by side)
- Click Apply to install
Recommended Android Build Versions:
This project uses the following Android SDK versions (configured in
android/build.gradle):buildToolsVersion = "36.0.0" minSdkVersion = 24 compileSdkVersion = 36 targetSdkVersion = 36 ndkVersion = "27.1.12297006"
-
-
Set up environment files: Create the following files in the root directory:
.env.development.env.staging.env.production
Android:
npm run android:deviOS:
npm run ios:devAndroid:
npm run android:stagingiOS:
npm run ios:stagingAndroid:
npm run android:prodiOS:
npm run ios:prodStart the Metro bundler separately:
npm start
# or for specific environment
npm run start:dev
npm run start:staging
npm run start:prodTo build a release APK for Android:
cd android
./gradlew assembleRelease
cd ..The generated APK will be available at:
android/app/build/outputs/apk/release/app-release.apk
You can install it directly on your Android device or distribute it for testing.
src/
βββ components/ # Reusable UI components
β βββ atoms/ # Basic building blocks
β βββ molecules/ # Composite components
β βββ organisms/ # Complex components
βββ features/ # Feature-based modules
β βββ auth/ # Authentication
β βββ notifications/ # Push notifications
β βββ settings/ # App settings
β βββ tasks/ # Task management
βββ hooks/ # Custom React hooks
βββ navigation/ # Navigation configuration
βββ services/ # External services
β βββ database/ # Realm database
β βββ firebase/ # Firebase integration
β βββ notifications/ # Notification handling
β βββ sync/ # Sync logic
βββ store/ # Redux store
β βββ slices/ # Redux slices
βββ theme/ # Theme configuration
βββ types/ # TypeScript types
βββ utils/ # Utility functions
- Create a Firebase project at Firebase Console
- Add iOS and Android apps to your Firebase project
- Download configuration files:
google-services.jsonfor Android β Place inandroid/app/GoogleService-Info.plistfor iOS β Place inios/todo/
- Enable Authentication and Firestore in Firebase Console
- Set up Firebase Cloud Messaging for push notifications
Configure the following variables in your .env files:
# Add your environment-specific variables here
FIREBASE_API_KEY=
FIREBASE_AUTH_DOMAIN=
FIREBASE_PROJECT_ID=
# ... other Firebase config
- Fork the repository
- Create your 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
There are some bugs to be fixed in future releases:
- Notification Persistence After Logout - Scheduled notifications continue to trigger even after user logout
- UI Sync Delay - Task list page requires manual pull-to-refresh to update UI even when all tasks are synced
- Offline Button States - Some buttons remain enabled while offline and should be disabled
- Fixed Font & Styles - Font sizes and styles are not responsive to different screen sizes
- Minor Bugs - Various other minor bugs and edge cases to be addressed
This project follows an offline-first architecture with the following design decisions:
- Local-first approach: Realm database as the primary data source
- Feature-based folder structure: Organized by features (auth, tasks, settings, notifications)
- Atomic design pattern: Components organized as atoms, molecules, and organisms
- Separation of concerns: Clear separation between UI, business logic, and data layers
- Service layer pattern: Dedicated services for Firebase, database, sync, and notifications
See the Project Structure section for detailed folder organization.
Core Technologies:
- React Native 0.82.1
- TypeScript
- Redux Toolkit (State Management)
- React Navigation 7.x (Navigation)
Database & Backend:
- Realm (Local Database)
- Firebase Authentication
- Firebase Firestore
- Firebase Cloud Messaging
UI & Styling:
- React Native Linear Gradient
- Custom theme system with light/dark mode
Notifications:
- Notifee (Local notifications)
- @react-native-firebase/messaging (Remote notifications)
Utilities:
- @react-native-community/netinfo (Network monitoring)
- react-native-config (Environment configuration)
See the Tech Stack section for complete details.
Development Environment:
npm run android:dev # Android
npm run ios:dev # iOSStaging Environment:
npm run android:staging # Android
npm run ios:staging # iOSProduction Environment:
npm run android:prod # Android
npm run ios:prod # iOSEach environment uses its corresponding .env file (.env.development, .env.staging, .env.production).
See the Running the App section for detailed setup instructions.
This project is private and not licensed for public use.
For issues and questions, please create an issue in the repository.








