Skip to content

rigole/taskboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Task Management Board - Full Stack Project

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.

πŸ“‹ Table of Contents


🎯 Project Overview

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)


✨ Features

Core Features

  • βœ… 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

Advanced Features

  • βœ… 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)

Polish Features

  • βœ… Responsive design (mobile-friendly)
  • βœ… Dark mode support
  • βœ… Activity history/timeline
  • βœ… User avatars and profiles
  • βœ… Email notifications (optional)
  • βœ… Performance optimization
  • βœ… Comprehensive testing

πŸ› οΈ Tech Stack

Frontend

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

Backend

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+

Development Tools

Tool Purpose
Git Version control
Docker Containerization (optional)
Postman/Insomnia API testing
VS Code Code editor
IntelliJ IDEA Java IDE (optional)

πŸ“ Project Structure

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

βœ… Prerequisites

Before you begin, ensure you have the following installed:

Required

  • 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

Optional but Recommended

  • Docker (for containerized development)
  • Postman/Insomnia (for API testing)
  • VS Code or IntelliJ IDEA (code editors)

πŸš€ Quick Start

πŸ”§ Backend Setup

Detailed Backend Instructions

Step 1: Generate Project (using Spring Initializr)

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.

Step 2: Configure Database

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: validate

Step 3: Add JWT Secret

In application.yml, add:

jwt:
  secret: your-super-secret-key-at-least-32-characters-long
  expiration: 900000        
  refresh-expiration: 604800000  

Step 4: Build & Run

mvn clean install
mvn spring-boot:run

Step 5: Verify

curl http://localhost:8080/api/auth
# Should return 401 Unauthorized

Backend API Endpoints

Base URL: http://localhost:8080/api

Authentication:

  • POST /auth/signup - Register new user
  • POST /auth/login - Login user
  • POST /auth/refresh - Refresh token
  • POST /auth/logout - Logout user

Boards:

  • GET /boards - Get all user's boards
  • GET /boards/{id} - Get board details
  • POST /boards - Create board
  • PUT /boards/{id} - Update board
  • DELETE /boards/{id} - Delete board

Columns:

  • GET /boards/{boardId}/columns - Get columns
  • POST /boards/{boardId}/columns - Create column
  • PUT /columns/{id} - Update column
  • DELETE /columns/{id} - Delete column

Tasks:

  • GET /columns/{columnId}/tasks - Get tasks
  • POST /columns/{columnId}/tasks - Create task
  • PUT /tasks/{id} - Update task
  • DELETE /tasks/{id} - Delete task
  • PATCH /tasks/{id}/move - Move task between columns
  • GET /tasks?search=...&priority=... - Search tasks

Comments:

  • GET /tasks/{taskId}/comments - Get comments
  • POST /tasks/{taskId}/comments - Add comment
  • PUT /comments/{id} - Update comment
  • DELETE /comments/{id} - Delete comment

🎨 Frontend Setup

Detailed Frontend Instructions

Step 1: Create React Project with Vite

npm create vite@latest taskboard-frontend -- --template react
cd taskboard-frontend
npm install

Step 2: Install Dependencies

npm 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/react

Step 3: Project Structure

Create 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

Step 4: Set API Base URL

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';

Step 5: Run Development Server

npm run dev

Open http://localhost:5173


πŸ“Š Database Schema

Tables Overview

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.


πŸ” Authentication

How It Works

  1. 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
  2. User Logs In

    • Sends email, password to /auth/login
    • Backend verifies credentials
    • Returns JWT tokens
  3. API Requests

    • Frontend sends JWT in Authorization header: Bearer {token}
    • Backend validates JWT
    • Allows/denies request
  4. Token Refresh

    • Access token expires after 15 minutes
    • Use refresh token to get new access token
    • No need to login again

JWT Claims

{
  "sub": "user-uuid",
  "email": "user@example.com",
  "username": "user-name",
  "iat": 1234567890,
  "exp": 1234568790
}

πŸ’» Development

Running in Development Mode

Terminal 1 - Backend:

cd backend
mvn spring-boot:run

Terminal 2 - Frontend:

cd frontend
npm run dev

Terminal 3 - Database (optional):

psql -U taskboard_user -d taskboard_db

Testing API Endpoints

Using Postman or Insomnia:

  1. Sign Up

    POST http://localhost:8080/api/auth/signup
    Content-Type: application/json
    
    {
      "name": "John Doe",
      "email": "john@example.com",
      "password": "password123"
    }
    
  2. Login

    POST http://localhost:8080/api/auth/login
    Content-Type: application/json
    
    {
      "email": "john@example.com",
      "password": "password123"
    }
    
  3. 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"
    }
    

Code Formatting

Backend:

mvn spotless:apply  

Frontend:

npm run format 

πŸ§ͺ Testing

Backend Tests

cd backend


mvn test

mvn test -Dtest=AuthControllerTest

mvn test jacoco:report

Frontend Tests

cd frontend


npm run test

e
npm run test:coverage

npm run cypress:open

🚒 Deployment

Backend Deployment

Docker Deployment

  1. Create Dockerfile:

    FROM openjdk:17-jdk-slim
    COPY target/taskboard-api-1.0.0.jar app.jar
    ENTRYPOINT ["java", "-jar", "/app.jar"]
  2. Build & Run:

    mvn clean package -DskipTests
    docker build -t taskboard-api .
    docker run -p 8080:8080 taskboard-api

Cloud Deployment

  • Heroku: Push to Heroku with Procfile
  • AWS: Deploy to Elastic Beanstalk
  • DigitalOcean: Use App Platform or Droplet
  • Railway: Simple git push deployment

Frontend Deployment

Netlify/Vercel

  1. Build the project:

    npm run build
  2. Deploy:

    • Connect GitHub repository
    • Set build command: npm run build
    • Set publish directory: dist

AWS S3 + CloudFront

npm run build
aws s3 sync dist/ s3://your-bucket-name

Environment Variables

Backend (.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

πŸ“– Additional Documentation

  • API Documentation: See docs/API.md
  • Database Schema: See docs/DATABASE.md
  • Architecture: See docs/ARCHITECTURE.md
  • Setup Guide: See docs/SETUP.md

🀝 Contributing

We welcome contributions! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit changes (git commit -m 'Add AmazingFeature')
  4. Push to branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Coding Standards

  • Follow REST API conventions
  • Use meaningful commit messages
  • Write unit tests for new features
  • Update documentation

πŸ“‹ Checklist for Portfolio

  • 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

πŸ“Έ Screenshots

(Add screenshots of your application here)


πŸŽ“ Learning Outcomes

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

πŸ“ž Support

For questions or issues:

  1. Check existing documentation
  2. Search GitHub issues
  3. Create a new issue with details
  4. Contact project maintainer

πŸ“„ License

This project is licensed under the MIT License - see LICENSE file for details.


πŸ™ Acknowledgments

  • Spring Boot documentation
  • React official guides
  • PostgreSQL documentation
  • JWT best practices
  • Icons from Heroicons

🎯 Project Status

Current Phase: Boilerplate Complete

  • Backend structure
  • Database schema
  • Security setup
  • API endpoints (create controllers & services)
  • Frontend components
  • Integration
  • Testing
  • Deployment

πŸ‘¨β€πŸ’» Author

Placide FOLEU


πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


Built with passion using Spring Boot Β· Angular Β· PostgreSQL

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages