A modern, production-ready task management application built with React 18 (frontend) and Spring Boot 3 (backend). Perfect for showcasing full-stack development skills to potential employers.
- Project Overview
- Features
- Tech Stack
- Project Structure
- Prerequisites
- Quick Start
- Backend Setup
- Frontend Setup
- API Documentation
- Database Schema
- Development
- Testing
- Deployment
- Contributing
- License
This is an Advanced Task Management Board - similar to Asana, Trello, or Monday.com but built from scratch. It's designed as a portfolio project to demonstrate:
β¨ Modern React patterns (hooks, state management, components) β¨ Solid backend architecture (Spring Security, JPA, REST APIs) β¨ Full-stack development (database design, API design, UI/UX) β¨ Production-ready code (error handling, validation, testing)
- β User authentication (signup/login with JWT)
- β Create and manage boards
- β Kanban-style columns (To Do, In Progress, Done)
- β Drag-and-drop tasks between columns
- β Create/edit/delete tasks
- β Task details modal
- β Task assignment to users
- β Task priority levels (Low, Medium, High)
- β Due dates for tasks
- β Comments on tasks
- β Real-time search and filtering
- β Task statistics dashboard
- β Role-based access control (Admin, User)
- β Responsive design (mobile-friendly)
- β Dark mode support
- β Activity history/timeline
- β User avatars and profiles
- β Email notifications (optional)
- β Performance optimization
- β Comprehensive testing
| Technology | Purpose | Version |
|---|---|---|
| React | UI framework | 18.x |
| Redux/Zustand | State management | Latest |
| Axios | HTTP client | Latest |
| React Beautiful DnD | Drag-and-drop | Latest |
| React Router | Client-side routing | 6.x |
| Tailwind CSS | Styling | 3.x |
| Vite | Build tool | Latest |
| Technology | Purpose | Version |
|---|---|---|
| Spring Boot | Web framework | 3.2.0 |
| Spring Security | Authentication | Latest |
| Spring Data JPA | ORM | Latest |
| PostgreSQL | Database | 12+ |
| JWT (JJWT) | Token authentication | 0.12.3 |
| Flyway | Database migrations | Latest |
| Maven | Build tool | 3.8+ |
| Tool | Purpose |
|---|---|
| Git | Version control |
| Docker | Containerization (optional) |
| Postman/Insomnia | API testing |
| VS Code | Code editor |
| IntelliJ IDEA | Java IDE (optional) |
task-management-board/
β
βββ backend/ # Spring Boot backend
β βββ pom.xml # Maven dependencies
β βββ src/
β β βββ main/java/com/taskboard/
β β β βββ TaskboardApplication.java
β β β βββ config/ # Configuration classes
β β β βββ entity/ # JPA entities
β β β βββ repository/ # Data access layer
β β β βββ service/ # Business logic
β β β βββ controller/ # REST endpoints
β β β βββ security/ # JWT & Security
β β β βββ dto/ # Data transfer objects
β β β βββ exception/ # Error handling
β β βββ resources/
β β β βββ application.yml # Configuration
β β β βββ db/migration/ # Flyway migrations
β β βββ test/
β βββ README.md
β
βββ frontend/ # React frontend
β βββ package.json # Node dependencies
β βββ vite.config.js # Vite configuration
β βββ src/
β β βββ App.jsx # Main app component
β β βββ main.jsx # Entry point
β β βββ pages/ # Page components
β β βββ components/ # Reusable components
β β βββ store/ # State management (Redux/Zustand)
β β βββ services/ # API services
β β βββ hooks/ # Custom React hooks
β β βββ utils/ # Utility functions
β β βββ styles/ # Global styles
β β βββ index.css
β βββ public/ # Static assets
β βββ README.md
β
βββ docs/ # Documentation
β βββ API.md # API documentation
β βββ DATABASE.md # Database schema
β βββ ARCHITECTURE.md # Architecture overview
β βββ SETUP.md # Setup guide
β
βββ .gitignore
βββ README.md # This file
βββ LICENSE
Before you begin, ensure you have the following installed:
-
Java 17+
java -version
-
Maven 3.8+
mvn -version
-
Node.js 16+ (with npm or yarn)
node --version npm --version
-
PostgreSQL 12+
psql --version
-
Git
git --version
- Docker (for containerized development)
- Postman/Insomnia (for API testing)
- VS Code or IntelliJ IDEA (code editors)
Visit https://start.spring.io/ and configure:
- Project: Maven
- Language: Java
- Spring Boot: 3.2.0+
- Java: 17+
- Group: com.taskboard
- Artifact: taskboard-api
Dependencies to add:
- Spring Web
- Spring Security
- Spring Data JPA
- PostgreSQL Driver
- Lombok
- Spring Boot DevTools
- Validation
- Flyway Migration
- Spring Security Test
Click Generate and extract the ZIP file.
Edit src/main/resources/application.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/taskboard_db
username: taskboard_user
password: taskboard_pass
jpa:
hibernate:
ddl-auto: validateIn application.yml, add:
jwt:
secret: your-super-secret-key-at-least-32-characters-long
expiration: 900000
refresh-expiration: 604800000 mvn clean install
mvn spring-boot:runcurl http://localhost:8080/api/auth
# Should return 401 UnauthorizedBase URL: http://localhost:8080/api
Authentication:
POST /auth/signup- Register new userPOST /auth/login- Login userPOST /auth/refresh- Refresh tokenPOST /auth/logout- Logout user
Boards:
GET /boards- Get all user's boardsGET /boards/{id}- Get board detailsPOST /boards- Create boardPUT /boards/{id}- Update boardDELETE /boards/{id}- Delete board
Columns:
GET /boards/{boardId}/columns- Get columnsPOST /boards/{boardId}/columns- Create columnPUT /columns/{id}- Update columnDELETE /columns/{id}- Delete column
Tasks:
GET /columns/{columnId}/tasks- Get tasksPOST /columns/{columnId}/tasks- Create taskPUT /tasks/{id}- Update taskDELETE /tasks/{id}- Delete taskPATCH /tasks/{id}/move- Move task between columnsGET /tasks?search=...&priority=...- Search tasks
Comments:
GET /tasks/{taskId}/comments- Get commentsPOST /tasks/{taskId}/comments- Add commentPUT /comments/{id}- Update commentDELETE /comments/{id}- Delete comment
npm create vite@latest taskboard-frontend -- --template react
cd taskboard-frontend
npm installnpm install axios
npm install react-router-dom
npm install react-beautiful-dnd
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
npm install @headlessui/react @heroicons/reactCreate the following structure in src/:
src/
βββ components/
β βββ Auth/
β β βββ LoginForm.jsx
β β βββ SignupForm.jsx
β βββ Board/
β β βββ KanbanBoard.jsx
β β βββ Column.jsx
β β βββ TaskCard.jsx
β βββ Task/
β β βββ TaskModal.jsx
β β βββ CommentSection.jsx
β β βββ TaskForm.jsx
β βββ Common/
β βββ Header.jsx
β βββ Sidebar.jsx
β βββ Loader.jsx
βββ pages/
β βββ HomePage.jsx
β βββ BoardPage.jsx
β βββ LoginPage.jsx
βββ store/
β βββ authStore.js
β βββ boardStore.js
β βββ taskStore.js
βββ services/
β βββ api.js
β βββ authService.js
β βββ boardService.js
β βββ taskService.js
βββ hooks/
β βββ useAuth.js
β βββ useFetchBoard.js
βββ utils/
β βββ constants.js
β βββ helpers.js
βββ App.jsx
βββ main.jsx
βββ index.css
Create src/utils/constants.js:
export const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8080/api';
export const ACCESS_TOKEN_KEY = 'access_token';
export const REFRESH_TOKEN_KEY = 'refresh_token';npm run devOpen http://localhost:5173
users
- Stores user accounts
- Fields: id, email, password, name, role, created_at, updated_at
boards
- Stores task boards owned by users
- Fields: id, name, description, owner_id, created_at, updated_at
board_columns
- Stores columns within boards (To Do, In Progress, Done)
- Fields: id, board_id, name, position, created_at, updated_at
tasks
- Stores tasks within columns
- Fields: id, column_id, title, description, assignee_id, priority, due_date, position, created_by, created_at, updated_at
comments
- Stores comments on tasks
- Fields: id, task_id, author_id, content, created_at, updated_at
See docs/DATABASE.md for detailed schema.
-
User Signs Up
- Sends email, password, name to
/auth/signup - Backend hashes password with BCrypt
- Creates user in database
- Returns JWT access token + refresh token
- Sends email, password, name to
-
User Logs In
- Sends email, password to
/auth/login - Backend verifies credentials
- Returns JWT tokens
- Sends email, password to
-
API Requests
- Frontend sends JWT in Authorization header:
Bearer {token} - Backend validates JWT
- Allows/denies request
- Frontend sends JWT in Authorization header:
-
Token Refresh
- Access token expires after 15 minutes
- Use refresh token to get new access token
- No need to login again
{
"sub": "user-uuid",
"email": "user@example.com",
"username": "user-name",
"iat": 1234567890,
"exp": 1234568790
}Terminal 1 - Backend:
cd backend
mvn spring-boot:runTerminal 2 - Frontend:
cd frontend
npm run devTerminal 3 - Database (optional):
psql -U taskboard_user -d taskboard_dbUsing Postman or Insomnia:
-
Sign Up
POST http://localhost:8080/api/auth/signup Content-Type: application/json { "name": "John Doe", "email": "john@example.com", "password": "password123" } -
Login
POST http://localhost:8080/api/auth/login Content-Type: application/json { "email": "john@example.com", "password": "password123" } -
Create Board (requires Authorization header)
POST http://localhost:8080/api/boards Authorization: Bearer {access_token} Content-Type: application/json { "name": "My Project", "description": "Project description" }
Backend:
mvn spotless:apply Frontend:
npm run format cd backend
mvn test
mvn test -Dtest=AuthControllerTest
mvn test jacoco:reportcd frontend
npm run test
e
npm run test:coverage
npm run cypress:open-
Create Dockerfile:
FROM openjdk:17-jdk-slim COPY target/taskboard-api-1.0.0.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
-
Build & Run:
mvn clean package -DskipTests docker build -t taskboard-api . docker run -p 8080:8080 taskboard-api
- Heroku: Push to Heroku with Procfile
- AWS: Deploy to Elastic Beanstalk
- DigitalOcean: Use App Platform or Droplet
- Railway: Simple git push deployment
-
Build the project:
npm run build
-
Deploy:
- Connect GitHub repository
- Set build command:
npm run build - Set publish directory:
dist
npm run build
aws s3 sync dist/ s3://your-bucket-nameBackend (.env or application-prod.yml):
DATABASE_URL=jdbc:postgresql://prod-db:5432/taskboard
JWT_SECRET=production-secret-key
SPRING_PROFILE=production
Frontend (.env.production):
VITE_API_URL=https://api.yourdomain.com
- API Documentation: See
docs/API.md - Database Schema: See
docs/DATABASE.md - Architecture: See
docs/ARCHITECTURE.md - Setup Guide: See
docs/SETUP.md
We welcome contributions! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow REST API conventions
- Use meaningful commit messages
- Write unit tests for new features
- Update documentation
- Clean code without hardcoded values
- Comprehensive error handling
- Input validation on frontend & backend
- JWT authentication working
- Database migrations in place
- All CRUD operations implemented
- Drag-and-drop functionality
- Search/filter features
- Responsive design
- API documentation
- README with setup instructions
- Tests (at least 50% coverage)
- Git history with meaningful commits
- Deployed version accessible
- Live demo video
(Add screenshots of your application here)
By completing this project, you'll have learned:
Frontend:
- React hooks and state management
- Component composition
- API integration with Axios
- Routing and navigation
- Drag-and-drop implementation
- Responsive design with Tailwind CSS
- Form validation
Backend:
- Spring Boot REST APIs
- Spring Security with JWT
- Database design and JPA
- Service-oriented architecture
- Exception handling
- Input validation
- Database migrations
Full-Stack:
- Authentication flow
- Request/response handling
- CORS configuration
- Error handling across layers
- Testing strategies
- Deployment processes
For questions or issues:
- Check existing documentation
- Search GitHub issues
- Create a new issue with details
- Contact project maintainer
This project is licensed under the MIT License - see LICENSE file for details.
- Spring Boot documentation
- React official guides
- PostgreSQL documentation
- JWT best practices
- Icons from Heroicons
Current Phase: Boilerplate Complete
- Backend structure
- Database schema
- Security setup
- API endpoints (create controllers & services)
- Frontend components
- Integration
- Testing
- Deployment
Placide FOLEU
- LinkedIn: linkedin.com/in/placide-rigole-foleu
- GitHub: @rigole
- Email: foplacide@gmail.com
This project is licensed under the MIT License β see the LICENSE file for details.
Built with passion using Spring Boot Β· Angular Β· PostgreSQL