A responsive, full-stack task management application for organizing work across Todo, Active, and Completed stages. Tasks are persisted in PostgreSQL and can be moved between working stages with accessible drag-and-drop interactions.
- Create tasks with a title, description, and due date
- Edit or delete existing tasks
- Move tasks between Todo List and Active Todo using drag and drop
- Drag using a mouse, touch input, or keyboard
- Mark tasks as completed and reopen them when needed
- Keep task stages synchronized with the database
- Highlight overdue incomplete tasks
- Expand task cards to view descriptions and due dates
- Clear all completed tasks with a single action
- Switch between light and dark themes
- View responsive layouts across desktop and mobile devices
- Receive loading, validation, and API error feedback
- A newly created task is added to the Todo List.
- Drag the task into Active Todo when work begins.
- Mark it complete when the work is finished.
- Drag an active task back to the Todo List if it is no longer in progress.
- Reopening a completed task returns it to the Todo List.
Task stages are stored in PostgreSQL, so their positions are retained after a refresh.
- React 19
- Vite 8
- Tailwind CSS 4
- Axios
- dnd-kit
- ESLint
- Java 17
- Spring Boot 4
- Spring Web MVC
- Spring Data JPA
- Hibernate
- Lombok
- Maven
- PostgreSQL
- Neon Database
- Netlify
- Render
- Docker
The project uses a decoupled client-server architecture:
React components
|
Custom useTodos hook
|
Axios API client
|
Spring REST controller
|
Service layer
|
JPA repository
|
PostgreSQL
The frontend handles presentation and client-side state. The backend owns the REST API and persistence logic, while PostgreSQL stores task data and workflow state.
To-Do-Project/
|-- to-do/ # React frontend
| |-- public/
| |-- src/
| | |-- components/
| | | |-- TodoForm.jsx
| | | `-- TodoItem.jsx
| | |-- App.jsx
| | |-- http.js
| | `-- todos.js
| |-- package.json
## Local Development
### Prerequisites
- Node.js and npm
- Java 17 or newer
- PostgreSQL
### 1. Clone the repository
```bash
git clone https://github.com/DhanunjayJ/To-Do-Project.git
cd To-Do-Project
Set the following environment variables:
DB_URL=jdbc:postgresql://localhost:5432/todo_db
DB_USERNAME=postgres
DB_PASSWORD=your_password
PORT=8080
PORT is optional and defaults to 8080.
Start the API:
cd todo-backend
./mvnw spring-boot:runOn Windows:
cd todo-backend
.\mvnw.cmd spring-boot:runThe API will be available at http://localhost:8080/api.
Create to-do/.env:
VITE_API_URL=http://localhost:8080/api
Install dependencies and start Vite:
cd to-do
npm install
npm run devThe frontend will be available at http://localhost:5173.
The backend CORS configuration currently permits the production Netlify URL. Add the local Vite origin while developing locally.
Frontend:
cd to-do
npm run lint
npm run buildBackend:
cd todo-backend
./mvnw clean packageBackend integration tests require valid database environment variables.
- The React frontend is designed for deployment on Netlify.
- The Spring Boot service can be deployed on Render using the included multi-stage Dockerfile.
- Production database credentials should be configured as environment variables.
- Deploy backend changes before frontend changes when the API data model changes.
- Authentication and user-specific task lists
- Task priorities, categories, and tags
- Search and filtering
- Custom ordering within workflow columns
- Pagination for larger task collections
- Toast notifications
- Expanded automated test coverage
Contributions and suggestions are welcome:
- Fork the repository.
- Create a feature branch.
- Make and validate your changes.
- Open a pull request with a clear description.
Developed by Dhanunjay J.