A feature-rich, responsive todo application built with React, MobX, and modern web technologies. Manage your tasks with advanced filtering, drag-and-drop functionality, and a beautiful dark/light theme system.
- Task Management: Create, edit, delete, and organize todos
- Priority System: Customizable priority levels with color coding
- Status Tracking: Multiple status options (Todo, In Progress, Done, etc.)
- Smart Filtering: Filter by priority, status, completion status, and search
- Advanced Sorting: Sort by priority, date, completion status, and more
- Dark/Light Theme: Automatic theme detection with manual toggle
- Responsive Design: Mobile-first design that works on all devices
- Drag & Drop: Intuitive reordering of todos and priorities
- Swipe Actions: Swipe to delete todos on mobile devices
- Undo Functionality: Recover accidentally deleted todos
- Real-time Updates: Optimistic UI updates with error handling
- User Registration: Secure account creation with password validation
- JWT Authentication: Token-based authentication with automatic refresh
- Protected Routes: Secure access to user-specific data
- Password Requirements: Strong password enforcement
- Server-side Pagination: Efficient handling of large todo lists
- MobX State Management: Reactive state management for smooth UX
- Optimistic Updates: Immediate UI feedback with background sync
- Caching: Intelligent caching for better performance
- Error Handling: Comprehensive error handling and user feedback
- Frontend: React 19.1.1 with React Router DOM 7.8.0
- State Management: MobX 6.13.7 with MobX React Lite
- Styling: CSS3 with CSS Variables for theming
- HTTP Client: Axios with interceptors for authentication
- Icons: React Icons 5.5.0
- Forms: React Hook Form 7.62.0
- Testing: Jest, React Testing Library, Cypress
- Build Tool: Create React App 5.0.1
src/
βββ components/ # Reusable UI components
β βββ ui/ # Base UI components (MenuBar, ThemeToggle, etc.)
βββ features/ # Feature-based modules
β βββ todos/ # Todo management
β βββ priorities/ # Priority management
β βββ statuses/ # Status management
β βββ users/ # User authentication
βββ stores/ # MobX stores
βββ services/ # API services
βββ hooks/ # Custom React hooks
βββ utils/ # Utility functions
βββ constants/ # App constants
βββ config/ # Configuration files
TodoList: Main todo list with filtering, sorting, and paginationTodoItem: Individual todo item with inline editingAddTodo: Form for creating new todosEditTodo: Dedicated edit page for todos
PriorityList: Manage custom priority levelsStatusList: Manage todo status options- Drag-and-drop reordering for priorities
LoginComponent: User login formRegisterComponent: User registration with validationUser: User profile management
- Node.js 16.0 or higher
npmoryarnpackage manager- Backend API server (see backend documentation)
-
Clone the repository
git clone https://github.com/Joossensei/react-todo.git cd react-todo/frontend -
Install dependencies
npm install
-
Environment Setup Create a
.envfile in the root directory:REACT_APP_API_BASE_URL=http://localhost:8000 REACT_APP_ENVIRONMENT=development
-
Start the development server
npm start
The app will open at http://localhost:3000
| Command | Description |
|---|---|
npm start |
Runs the app in development mode |
npm test |
Launches the test runner |
npm run build |
Builds the app for production |
npm run cypress:open |
Opens Cypress test runner |
npm run cypress:run |
Runs Cypress tests in headless mode |
-
Register an Account
- Navigate to
/register - Fill in your details and create a strong password
- You'll be automatically logged in after registration
- Navigate to
-
Add a Todo
- Click the "Add Todo" button on the main page
- Fill in the title and optional description
- Select a priority level (if configured)
- Choose a status
- Click "Add Todo"
-
Manage Your Todos
- Edit: Click the edit icon or double-click the todo
- Complete: Click the checkbox to mark as done
- Delete: Swipe left on mobile or click the trash icon
- Change Priority/Status: Use the dropdown menus on each todo
- Search: Use the search bar to find specific todos
- Filter by Priority: Click the priority filter to show specific priority levels
- Filter by Status: Use the status filter to show todos by status
- Sort: Choose from various sorting options (priority, date, completion)
- Automatic: The app detects your system theme preference
- Manual Toggle: Use the theme toggle in the menu bar
- Persistent: Your theme choice is saved for future visits
- Navigate to
/prioritiesto manage priority levels - Create custom priorities with colors and icons
- Drag to reorder priority levels
- Priorities are used across all todos
- Navigate to
/statusesto manage status options - Create custom statuses for your workflow
- Statuses help track todo progress
The app connects to a backend API. Configure the API endpoints in src/constants/apiEndpoints.js:
export const API_ENDPOINTS = {
TODOS: {
LIST: "/todos",
CREATE: "/todos",
GET: (key) => `/todo/${key}`,
UPDATE: (key) => `/todo/${key}`,
DELETE: (key) => `/todo/${key}`,
},
// ... other endpoints
};Customize themes by modifying CSS variables in src/index.css:
:root {
--primary-bg: #ffffff;
--text-primary: #333333;
--accent-color: #667eea;
/* ... other variables */
}
[data-theme="dark"] {
--primary-bg: #1a1a1a;
--text-primary: #ffffff;
--accent-color: #8b5cf6;
/* ... other variables */
}npm run buildThis creates a build folder with optimized production files.
- Netlify: Drag and drop the
buildfolder - Vercel: Connect your repository for automatic deployments
- AWS S3: Upload the
buildfolder to an S3 bucket - Docker: Use the provided Dockerfile for containerized deployment
REACT_APP_API_BASE_URL=https://your-api-domain.com
REACT_APP_ENVIRONMENT=production- 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
- Follow the existing code style and structure
- Write tests for new features
- Update documentation for API changes
- Use conventional commit messages
This project is licensed under the MIT License - see the LICENSE file for details.
- React Team for the amazing framework
- MobX for reactive state management
- React Icons for the beautiful icon library
- Cursor for AI-powered development assistance
- Issues: Report bugs and request features on GitHub
- Documentation: Check the inline code comments for detailed explanations
- Community: Join our community discussions
Made with β€οΈ by Joost Both & Cursor