A task management application built with React, TypeScript, and Vite, using the Context API for global state and Auth0 for authentication. Users can create, view, edit, and delete tasks through a protected dashboard.
- Task Dashboard — view all tasks at a glance, with status and priority badges
- Task Details — dedicated view for a single task's full information
- Create / Edit Tasks — forms with inline validation (required title, valid due date)
- Delete Tasks — remove tasks directly from the dashboard or the details page
- Authentication — Auth0-powered login/logout via Universal Login, with routes protected from unauthenticated access
- Fully typed — task shapes, form inputs/errors, reducer actions, and the mapped Auth0 user are all defined as TypeScript types/interfaces
- React 19 + Vite
- TypeScript
- React Router DOM for routing
- React Bootstrap + Bootstrap 5 for UI
- Auth0 React SDK for authentication
- Axios (installed, available for future API integration)
task.ts—Task,TaskStatus,TaskPriority,TaskFormInput,TaskUpdateInput, andTaskFormErrorsuser.ts—AppUser, a normalized shape for the authenticated user
TaskReducer.ts— ataskReducerhandlingSET_TASKS,ADD_TASK,UPDATE_TASK,DELETE_TASK,SET_LOADING, andSET_ERRORTaskActions.ts— a discriminated union of all reducer actions for exhaustive type checkingTaskContext.tsx— wraps the reducer in aTaskProviderand exposesaddTask,updateTask, anddeleteTaskthrough auseTasks()hook
Task state currently lives in memory (via useReducer) and is not yet persisted to a backend or local storage.
main.tsxwraps the app inAuth0Provider, configured withVITE_AUTH0_DOMAINandVITE_AUTH0_CLIENT_IDenvironment variablesMapAuthUser.tsmaps the raw Auth0Userobject into the app's typedAppUserUseAppUser.ts— a custom hook combininguseAuth0()withmapAuthUserAuthButton.tsx— shows a login button when signed out, or the user's name and a logout button when signed inProtectedRoute.tsx— redirects unauthenticated users to Auth0's login flow before rendering protected content
Dashboard.tsx— lists all tasks with links to view, edit, or deleteTaskCreate.tsx— creates a new task tied to the authenticated user's IDTaskDetails.tsx— shows a single task's full details with edit/delete actionsTaskEdit.tsx— pre-fills the task form for updating an existing task
All task routes are wrapped in ProtectedRoute:
| Path | Page |
|---|---|
/ |
Dashboard |
/tasks/new |
Create Task |
/tasks/:id |
Task Details |
/tasks/:id/edit |
Edit Task |
- Node.js and npm
- An Auth0 account with an application configured for this project
git clone https://github.com/coding-cryptid/task-management-app.git
cd task-management-app
npm installCreate a .env file in the project root with your Auth0 application credentials:
VITE_AUTH0_DOMAIN=your-auth0-domain
VITE_AUTH0_CLIENT_ID=your-auth0-client-id
In your Auth0 application settings, add your local dev URL (e.g. http://localhost:5173) to Allowed Callback URLs, Allowed Logout URLs, and Allowed Web Origins.
npm run devnpm run build # type-check and build for production
npm run lint # run ESLint
npm run preview # preview the production build locally- Tasks are stored only in memory for the current session and are lost on page refresh; there is no backend or persistence layer yet.
- Dedicated
LoginandRegisterpage components exist insrc/pagesbut are not currently wired into the app's routes — authentication is handled entirely through Auth0's Universal Login (loginWithRedirect).