A Todo List mobile application built with React Native, TypeScript, and Expo. This app provides an intuitive interface for managing tasks with authentication, customizable themes, and a clean user experience.
- Auth: login, logout, persistent session (SecureStore)
- Onboarding / welcome flow
- Account update (profile fields)
- Theme select (multiple palettes, stored globally)
- OTA updates (EAS Update channels)
- Task Management: Create, edit, mark complete, and delete tasks
- User Authentication: Secure sign-in/sign-up with JWT tokens
- Customizable Themes: Choose from multiple color themes (Dark, Brand, Red, Blue)
- Task Organization: Filter and categorize tasks by projects and dates
- Responsive Design: Optimized for both iOS and Android platforms
- Infinite Scrolling: Efficient pagination for large task lists
- Real-time Updates: React Query for seamless data synchronization
- Offline Support: SecureStorage for local data persistence
- Push Notifications: Stay updated on task deadlines
- Framework: React Native 0.79.5 with Expo SDK 53
- Language: TypeScript 5.8.3
- State Management: Zustand with persistence
- Data Fetching: TanStack React Query
- Navigation: Expo Router v5
- Styling: NativeWind (Tailwind CSS for React Native)
- Authentication: JWT with secure token storage
- Build System: EAS Build for production builds
- Node.js 18+
- npm or yarn
- Expo CLI (
npm install -g @expo/cli) - EAS CLI (
npm install -g eas-cli) - Android Studio (for Android development)
- Xcode (for iOS development, macOS only)
git clone <repo>
cd todoList
npm install
npx expo start
Build (example):
eas build --profile preview --platform android
eas update --channel preview --message "Feat: new filters"
The app includes demo user accounts for testing:
| Username | Password | Role |
|---|---|---|
emilys |
emilyspass |
Admin |
michaelw |
michaelwpass |
Admin |
sophiab |
sophiabpass |
Admin |
eas build --profile development --platform androideas build --profile preview --platform androideas build --profile production --platform androidTo test the actual app on your device:
-
Build the preview version
eas build --profile preview --platform android
-
Download and install
- Wait for the build to complete
- Download the APK file from the EAS build link
- Enable "Install unknown apps" on your Android device
- Install the APK file
Use these credentials to explore the app:
| Username | Password | Role |
|---|---|---|
emilys |
emilyspass |
Admin |
michaelw |
michaelwpass |
Admin |
sophiab |
sophiabpass |
Admin |
Once you have the preview app installed, you can receive updates without reinstalling:
# Push updates to all preview users
eas update --channel preview --message "New features and bug fixes"ect for testing** - Test new changes quickly
Note: OTA updates only work for JavaScript/TypeScript changes. If you add native modules or change permissions, you'll need a new build.
todoList/
├── app/ # Main application screens
│ ├── (auth)/ # Authentication screens
│ ├── (tabs)/ # Main app tabs
│ └── screens/ # Additional screens
├── components/ # Reusable UI components
├── hooks/ # Custom React hooks
├── store/ # Zustand state stores
├── types/ # TypeScript type definitions
├── services/ # API and external services
├── utils/ # Helper functions
└── assets/ # Images, fonts, and static files
Challenge 1: Waiting on Slow Builds Free-tier build queues meant long waits to test updates. I batched changes, skipped unnecessary rebuilds, and used local builds to work faster.
Challenge 2: Making the App Feel the Same Everywhere iOS and Android had quirks. I used Expo, added platform-specific tweaks, and tested until both felt consistent.
Challenge 3: Keeping Data Safe and the App Fast Tasks had to persist and scroll smoothly. I used Zustand/ expo secure storage for storage and persistence and React Query with infinite scrolling to keep performance snappy.
- Launch: App starts with welcome/onboarding screen
- Authentication: User signs in with credentials or creates new account
- Theme Selection: User chooses preferred color theme
- Main Dashboard: Access to home, projects, upcoming tasks, and inbox
- Task Management: Create, edit, complete, and organize tasks
- Navigation: Seamless movement between different app sections
- User views upcoming tasks in the main dashboard
- Selects a task to mark as complete
- Task status updates in real-time
- Completed tasks are filtered or moved to completed section
- Progress is synchronized across all app instances
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support and questions:
- Create an issue in the GitHub repository
- Contact: [Your Contact Information]
Built using React Native and Expo