Skip to content

πŸ“² TaskNexus - A simple and intuitive task management app built with React Native and Expo. Stay organized with seamless task tracking, cross-platform support (iOS, Android, Web), and a clean, modern UI.

License

Notifications You must be signed in to change notification settings

hoangsonww/Task-Manager-ReactNative

Repository files navigation

TaskNexus - Task Manager React Native App πŸ“±

Project Version React Native Expo Node.js TypeScript Node Package Manager Yarn Prettier React Native Paper React Native Chart Kit MIT License

TaskNexus Logo

Table of Contents

Overview

TaskNexus - Task Manager React Native App is a modern, cross-platform mobile application built using React Native with Expo and TypeScript.

The app allows users to manage their daily tasks efficiently, with features like task addition, completion, deletion, and drag-and-drop reordering.

The app also includes a dedicated Stats screen with interactive charts (pie, bar, and line) for visualizing task statistics. It also features dark/light theme toggling with smooth transitions and a custom bottom tab bar for a better UI/UX.

TaskNexus Logo

TaskNexus Branding

I chose the name "TaskNexus" for the app to reflect its core purpose - a central hub for managing tasks.

I hope its name and branding convey a sense of connectivity and organization, with the app serving as a nexus for all tasks and to-dos.

iOS

Task Manager App - iOS Task Manager App - iOS Task Manager App - iOS Task Manager App - iOS Task Manager App - iOS

Android

Task Manager App - Android Task Manager App - Android Task Manager App - Android Task Manager App - Android Task Manager App - Android

Modals

Task Manager App - Add Modal Task Manager App - Add Modal Dark Task Manager App - Edit Modal Task Manager App - Edit Modal Dark

Web

Task Manager App - Web

Screen Recordings (GIFs)

Task Manager App - iOS Task Manager App - Android

Features

Task Management

  • Add, Update & Delete Tasks: Easily manage your daily tasks through an interactive interface.
  • Drag-and-Drop Reordering: Rearrange tasks using a smooth, touch-friendly drag-and-drop mechanism.
  • Global State Management: Uses React Context to manage task state across the app for consistent data handling.

Statistics Visualization

  • Pie Chart: Visualizes the ratio of completed vs. incomplete tasks.
  • Bar Chart: Compares overdue and upcoming tasks with wider, closely spaced bars.
  • Line Chart: Plots tasks over time (by month), ensuring continuity even if only a single month is available.
  • Transparent & Themed Charts: All charts feature transparent backgrounds and adjust seamlessly to the current theme.

Theme & UI

  • Dark/Light Mode Toggle: Switch between dark and light themes with a toggle integrated into the custom bottom tab bar.
    • Automatically detects the system theme (light/dark) and adjusts the app theme accordingly on startup.
  • Smooth Transitions: Animated transitions (200ms) for background and UI elements when changing themes.
  • Consistent Material Design: Built with React Native Paper, ensuring a uniform look and feel across all screens.

Navigation & Routing

  • Expo Router: Utilizes Expo Router for clean, declarative navigation between screens.
  • Automatic Root Redirection: Redirects the root route ("/") to the home screen, ensuring a smooth entry.
  • Fallback Screen: Provides a custom +not-found screen for undefined routes.

Flash Screen

  • Splash Screen: Custom splash screen with app name and slogan.
  • Redirection: Automatically redirects to the home screen after the splash screen (3 seconds).

Technical Stack & Libraries

TaskNexus is built using a modern tech stack that includes both core and third-party libraries to enhance functionality and user experience. Here are the key components:

Core Dependencies:

  • React Native: Core framework for building cross-platform mobile applications.
  • TypeScript: Enhances code quality with static type checking.
  • React Context API: Manages global state for tasks and theme overrides.
  • React Navigation / Expo Router: Manages navigation and deep linking.
  • React Native Gesture Handler: Enables smooth gesture handling for drag-and-drop functionality.
  • React Native Reanimated: Powers animations and transitions for a fluid user experience.
  • React Native Safe Area: Ensures proper layout and spacing on devices with notches or rounded corners.

Third-Party Dependencies:

  • Expo: Provides a robust development workflow and build process.
  • Expo Font: Simplifies font loading and management (custom Google fonts included).
  • Expo Status Bar: Customizes the status bar for better aesthetics and user experience.
  • React Native Paper: Offers Material Design components and theming.
  • React Native Vector Icons: Provides customizable icons for a polished UI.
  • React Native Chart Kit: Renders customizable charts (pie, bar, line).
  • React Native Draggable FlatList: Enables drag-and-drop reordering of tasks.
  • React Native DateTime Picker: Provides a user-friendly date and time selection interface.
  • Prettier: Maintains code quality and consistent formatting.

Other:

  • JSDoc & TypeScript Definitions: Documented code for better understanding and type safety.
  • Google Fonts: Includes custom Google fonts (Roboto) and images for branding.
  • Shell Scripts: Simplify common tasks with custom shell scripts.

Installation & Setup

Prerequisites

  • Node.js: Version 14 or above.
  • Yarn or npm: For package management.
  • Expo CLI: Install globally (if not already present)
    npm install -g expo-cli
  • Android/iOS Emulator or Physical Device: For testing on mobile platforms.
    • This is required for testing the app on Android/iOS devices. Alternatively, you can use the web version for a quick preview.

Clone the Repository

git clone https://github.com/hoangsonww/Task-Manager-ReactNative.git
cd Task-Manager-ReactNative

Install Dependencies

Using npm:

npm install

Using Yarn:

yarn install

Running the App

Start the Expo development server:

npm start
# or
yarn start

Alternatively, you can use the Expo CLI directly:

npx expo start

Note: You can also use the -c flag to clear the cache and start fresh if needed: npx expo start -c.

Then:

  • Open the app on your device using the Expo Go app, or
  • Use an Android/iOS simulator (remember to press a or i in the terminal to open the app on Android/iOS, respectively, with the simulator/emulator running), or
  • Open the project in a web browser for a quick preview (remember to press w in the terminal, it will then open a new tab in your default browser).

    Note: The web version may not display correctly on larger screens. Also, some functionalities, like drag-and-drop, date picker, time picker, etc. may not work as expected on the web since they are designed for mobile devices.

  • Enjoy managing your tasks with TaskNexus! πŸš€

Usage Instructions

Home Screen

  • Add Tasks: Tap the "Add Task" button to open a modal where you can enter new tasks.
  • Reorder Tasks: Drag and drop tasks to adjust their order.
  • Toggle Completion: Tap the checkbox on a task to mark it as complete or incomplete.
  • Delete Tasks: Remove tasks with the delete action.

Stats Screen

  • View Charts:
    • Pie Chart: Displays the proportion of completed vs. incomplete tasks.
    • Bar Chart: Compares overdue vs. upcoming tasks with wide, closely spaced bars.
    • Line Chart: Plots tasks over time by month, ensuring continuity even if only one month is present.
  • Theme Adaptation:
    Charts are fully transparent and adapt to the current dark/light theme.

Theme Toggle

  • Switch Themes: Use the toggle in the custom bottom tab bar to switch between dark and light modes. The transition is animated over 200ms for a smooth experience.

Routing

  • Automatic Redirection: The root route ("/") automatically redirects to the home screen.
  • Fallback: Invalid routes are handled by the +not-found screen (though no such routes are present in the app - it's technically impossible to get lost!).

File Structure

Task-Manager-ReactNative
β”œβ”€β”€ app.json                       # Expo configuration file
β”œβ”€β”€ package.json                   # Project dependencies and scripts
β”œβ”€β”€ tsconfig.json                  # TypeScript configuration file
β”œβ”€β”€ .gitignore                     # Git ignore file
β”œβ”€β”€ Dockerfile                     # Dockerfile for containerization
β”œβ”€β”€ docker-compose.yml             # Docker Compose file for containerization
β”œβ”€β”€ app
β”‚   β”œβ”€β”€ _layout.tsx                # Main layout with theme, navigation, and context providers
β”‚   β”œβ”€β”€ index.tsx                  # Flash screen and redirection to home screen
β”‚   β”œβ”€β”€ +not-found.tsx             # Custom Not Found screen for undefined routes
β”‚   └── (tabs)
β”‚       β”œβ”€β”€ _layout.tsx            # Layout for tabbed screens
β”‚       β”œβ”€β”€ home.tsx               # Home screen for task management
β”‚       └── stats.tsx              # Stats screen for displaying charts and statistics
β”œβ”€β”€ components
β”‚   β”œβ”€β”€ Chart.tsx                  # Reusable chart component for pie, bar, and line charts
β”‚   β”œβ”€β”€ CustomTabBar.tsx           # Custom bottom tab bar component (with theme toggle)
β”‚   β”œβ”€β”€ TaskAddModal.tsx           # Modal component for adding new tasks
β”‚   └── TaskItem.tsx               # Component for displaying individual tasks
β”œβ”€β”€ constants
β”‚   └── Colors.ts                  # Color definitions for light and dark themes
β”œβ”€β”€ contexts
β”‚   β”œβ”€β”€ ThemeOverrideContext.tsx   # React Context for theme override management (dark/light mode)
β”‚   └── TaskContext.tsx            # React Context for global task state management
β”œβ”€β”€ hooks
β”‚   └── usePrevious.ts             # Custom hook to capture previous state values
β”œβ”€β”€ scripts
β”‚   └── reset-project.js           # Script to reset project state (if needed)
β”œβ”€β”€ styles
β”‚   β”œβ”€β”€ HomeScreenStyles.ts        # Custom styles for the Home screen
β”‚   β”œβ”€β”€ StatsScreenStyles.ts       # Custom styles for the Stats screen
β”‚   β”œβ”€β”€ IndexStyles.ts             # Custom styles for the Flash screen and redirection
β”‚   β”œβ”€β”€ LayoutStyles.ts            # Custom styles for the main layout
β”‚   β”œβ”€β”€ TaskModalStyles.ts      # Custom styles for the task add modal
β”‚   β”œβ”€β”€ TaskItemStyles.ts          # Custom styles for individual task items
β”‚   β”œβ”€β”€ NotFoundStyles.ts          # Custom styles for the Not Found screen
β”‚   └── CustomTabStyles.ts         # Custom styles for the tab bar and related UI components
β”œβ”€β”€ types
β”‚   └── types.ts                   # TypeScript type definitions for the project
β”œβ”€β”€ assets
β”‚   β”œβ”€β”€ fonts                      # Custom fonts for the app (Roboto)
β”‚   └── images                     # Images used in the app
β”œβ”€β”€ img                            # Screenshots and GIFs for the README
└── shell                          # Shell scripts for common tasks
    β”œβ”€β”€ run-platform.sh            # Script to run the app on a specific platform
    β”œβ”€β”€ format.sh                  # Script to format the project code
    β”œβ”€β”€ start.sh                   # Script to start the app
    β”œβ”€β”€ reset.sh                   # Script to reset the project state
    └── update.sh                  # Script to update project dependencies

Scripts & Tools

  • reset-project.js: Located in the scripts folder, this script resets the project state as needed.
  • Prettier: Integrated to maintain code quality and consistent formatting.
    • Use by simply running npm run format or yarn format to format the entire project. It formats most (if not all) files in the project according to the Prettier configuration.
  • Documented Code: Includes JSDoc comments for functions and TypeScript type definitions for better code understanding.
  • Shell Scripts: Several shell scripts are included to simplify common tasks, such as starting the app, resetting the project, and updating dependencies. Feel free to use them for easier project management!
    • Use the script by first running chmod +x <script-name>.sh to make it executable, then run ./<script-name>.sh to execute it.
  • Dockerfile (Optional): A Dockerfile is provided to containerize the app if needed. However, since mobile testing requires physical devices or emulators, the Dockerfile is designed only for the web version of the app.
    • Use the Docker Compose file (docker-compose.yml) to build and run the Docker container, by running docker-compose up --build. Ensure that Docker is installed and running on your system.

Known Issue

  • The React Native Draggable FlatList library has a known issue dragging and dropping an item causes it to quickly flash back to its original position before settling in the new position. This is a minor visual glitch and does not affect functionality.
    • This issue is widely reported in both StackOverflow and GitHub discussions, and it seems to be a limitation of the library itself. I have tried several workarounds, but none have resolved the issue completely.
    • If given more time, I would explore alternative libraries or custom implementations to achieve a smoother drag-and-drop experience.
    • For now, the app remains fully functional, and users can still drag and drop tasks without any issues.
    • The app is designed to be user-friendly, and this minor visual glitch does not hinder the overall experience.

Future Enhancements

Currently, the app provides essential task management features with a focus on simplicity and usability. In the near future, if I have more time, I would love to implement the following features that I have in mind:

  • User Authentication: Implement user authentication for personalized task management.
    • This would enable cloud storage/synchronization for tasks and user-specific settings. It would also allow multiple users to use the app on the same device.
  • Task Categories: Add categories for tasks to organize them better.
  • Task Reminders: Include reminders for tasks with notifications.
  • Task Sharing: Enable task sharing with other users.
  • Task Search & Filtering: Implement search and filter options for tasks.
  • Task Priority: Add priority levels for tasks.
  • Enhanced Branding: Improve the app's branding with a custom logo, color scheme, and typography, in line with the TaskNexus theme.

These features would make TaskNexus similar to another app of mine - CollabNote, which is a full-stack web application for collaborative note-taking with user authentication, real-time updates, and more - but in a mobile app format.

License

This project is licensed under the MIT License. See the LICENSE file for more details.

Contact

For any questions, feedback, or suggestions, please contact:


Thank you for checking out TaskNexus - Task Manager React Native App! πŸš€πŸ“²

πŸ” Back to top

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy