TaskMaster + Redux is a feature-rich task management application built with React, powered by Redux Toolkit for state management and Supabase for backend storage. The app is designed to demonstrate advanced front-end engineering practices using reusable components, custom hooks, and full CI/CD deployment pipelines.
Whether you're managing personal tasks, collaborating on projects, or just exploring how to integrate modern front-end tools and DevOps practices, this app provides a clean, performant, and scalable starting point.
TaskMaster is a feature-rich React + Redux app built with Supabase and a strong focus on mastering modern frontend development practices.
This app is for educational purposes β to explore and master advanced React, Redux, and full development workflows.
useEffect
, useState
)π View the App
This project uses a CI/CD pipeline via GitHub Actions consisting of two stages:
Build and Deploy Stage:
On every push to the main
branch, the app is built and deployed to GitHub Pages using peaceiris/actions-gh-pages
.
Automated Testing Stage:
End-to-end tests are run using Robot Framework with SeleniumLibrary across Chrome, Firefox, and Edge browsers, ensuring high compatibility.
π CI/CD Pipeline Run
E2E tests are written using Robot Framework and SeleniumLibrary, and are executed after every deployment.
taskmaster-redux/
βββ .github/
β βββ workflows/
β βββ deploy.yml
βββ public/
β βββ vite.svg
βββ src/
β βββ App.jsx
β βββ index.css
β βββ main.jsx
β βββ components/
β β βββ Classification.jsx
β β βββ Filter.jsx
β β βββ Search.jsx
β β βββ SelectNumber.jsx
β β βββ SelectPriority.jsx
β β βββ TaskForm.jsx
β β βββ TaskItem.jsx
β β βββ TaskList.jsx
β β βββ indexedDBtasks/
β β βββ SyncOfflineTasks.jsx
β βββ db/
β β βββ indexedDB.js
β βββ hooks/
β β βββ useInitDarkMode.js
β β βββ useValidation.js
β βββ layout/
β β βββ AppLayout.jsx
β βββ pages/
β β βββ Home.jsx
β β βββ TaskDetails.jsx
β βββ redux/
β β βββ store.jsx
β β βββ tasksSlice.jsx
β βββ services/
β β βββ apiTasks.js
β β βββ supabase.js
β β βββ syncOfflineTasks.js
β β βββ taskUtils.js
β β βββ userId.js
β βββ ui/
β βββ Button.jsx
β βββ DarkModeToggle.jsx
β βββ Footer.jsx
β βββ Header.jsx
βββ tests/
β βββ production.robot
βββ README.md
A screenshot showing the app in light mode before any tasks are added.
The app supports dark mode, which can be toggled using a draggable button on the interface.
A screenshot demonstrating the addition of two tasks, each with dummy text for illustrative purposes. It also shows the statistics at the footer, displaying the total number of tasks in the list.
Clicking the "Read More" button will hide the button and reveal the full task details. Clicking the text again will toggle it back. Additionally, when you click on an image, it will enlarge, and clicking it again will return it to its normal size.
This screenshot shows a task being added while the app is offline. A toast notification confirms that the task is saved locally and will be synced once the internet connection is restored. When the connection is back, the offline task is automatically synced with Supabase, and a confirmation toast appears.
When clicking the "Add" button without filling in all required fields, the app displays validation messages indicating the missing fields. Each missing field will be highlighted with a red error message below it.
A screenshot showing the task editing page. After clicking on a task name, a new page opens where you can modify the task and all its details.
This project uses Supabase to persist task data per user. To connect this app to your own Supabase instance:
.env
file in the root directory of your project with the following:VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_KEY=your_supabase_anon_key
npm install
npm run dev
Make sure to never expose your keys publicly, and use GitHub secrets when deploying the app.
A screenshot of the storage interface inside Supabase, showing how images are stored under the user's name.
After deploying the application to GitHub Pages, you might encounter a 404 error when refreshing or directly navigating to a subpath (e.g., /userId
). This is a known limitation of GitHub Pages because it treats all paths as file locations, so /userId
is seen as a missing file. However, the application uses React Router, which should handle these routes on the client side.
404.html
fallback is already in place and GitHub Pages is configured to use it.404.html
(not recommended for this simple use case).