Skip to content

pratik20gb/flowboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FlowBoard πŸ—‚οΈ

A full-stack project management SaaS application built with Java Spring Boot and React. Inspired by Jira β€” built from scratch to learn industry-grade Java development end to end.

πŸš€ Tech Stack

Backend

  • Java 21 β€” LTS version used in production by most companies
  • Spring Boot 3 β€” Industry standard Java framework
  • Spring Security + JWT β€” Stateless authentication with access + refresh tokens
  • Spring Data JPA + Hibernate β€” ORM for database operations
  • PostgreSQL β€” Primary relational database
  • Flyway β€” Database schema versioning and migrations
  • Redis β€” Caching layer for performance
  • Apache Kafka β€” Async event-driven notifications
  • AWS S3 β€” File and attachment storage

Frontend

  • React 18 + TypeScript β€” Type-safe component-based UI
  • React Query (TanStack) β€” Server state management and caching
  • Axios β€” HTTP client
  • Tailwind CSS β€” Utility-first styling
  • Zustand β€” Client-side state management
  • React Router β€” Client-side routing

DevOps & Observability

  • Docker + Docker Compose β€” Containerized local development
  • GitHub Actions β€” CI/CD pipeline
  • Prometheus + Grafana β€” Metrics and monitoring dashboards
  • Logback β€” Structured logging

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              React 18 + TypeScript                   β”‚
β”‚         React Query Β· Zustand Β· Tailwind             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚ REST / JSON
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                Spring Boot 3                         β”‚
β”‚                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   Auth      β”‚ β”‚   Project    β”‚ β”‚ Notification β”‚  β”‚
β”‚  β”‚  Service    β”‚ β”‚   Service    β”‚ β”‚   Service    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                      β”‚
β”‚  Spring MVC Β· Spring Data JPA Β· Spring Security      β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚              β”‚          β”‚            β”‚
β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”
β”‚PostgreSQLβ”‚  β”‚  Redis   β”‚ β”‚  Kafka  β”‚ β”‚  AWS S3 β”‚
β”‚ Flyway   β”‚  β”‚  Cache   β”‚ β”‚ Events  β”‚ β”‚  Files  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Project Structure

src/main/java/com/flowboard/
β”œβ”€β”€ config/          # Spring configuration (Security, Redis, S3)
β”œβ”€β”€ controller/      # REST controllers β€” HTTP layer
β”œβ”€β”€ service/         # Business logic layer
β”œβ”€β”€ repository/      # Database access layer
β”œβ”€β”€ domain/
β”‚   β”œβ”€β”€ entity/      # JPA entities (User, Workspace, Board, Task)
β”‚   └── enums/       # TaskStatus, Priority, Role
β”œβ”€β”€ dto/
β”‚   β”œβ”€β”€ request/     # Incoming request bodies
β”‚   └── response/    # Outgoing response bodies
β”œβ”€β”€ exception/       # Custom exceptions + global error handler
β”œβ”€β”€ security/        # JWT filter + UserDetails implementation
└── util/            # Helper classes

src/main/resources/
β”œβ”€β”€ db/migration/    # Flyway SQL migrations (V1__, V2__, ...)
└── application.yml  # Application configuration

πŸ› οΈ Getting Started

Prerequisites

  • Java 21
  • Docker Desktop
  • Maven (included via ./mvnw wrapper)
  • Git

Clone the repository

git clone https://github.com/pratik20gb/flowboard.git
cd flowboard

Start infrastructure

# Starts PostgreSQL and Redis in Docker
docker compose up -d

Run the application

./mvnw spring-boot:run

The API will be available at http://localhost:8080

Verify it's running

curl http://localhost:8080/api/v1/health

Expected response:

{
  "status": "UP",
  "service": "FlowBoard API",
  "version": "1.0.0",
  "timestamp": "2026-06-02T..."
}

πŸ”Œ API Endpoints

### Authentication
POST   /api/v1/auth/register     # Create a new account
POST   /api/v1/auth/login        # Login and get JWT tokens
POST   /api/v1/auth/refresh      # Refresh expired access token
### Workspaces
GET    /api/v1/workspaces        # List all workspaces
POST   /api/v1/workspaces        # Create a workspace
GET    /api/v1/workspaces/{id}   # Get workspace by ID
PUT    /api/v1/workspaces/{id}   # Update workspace
DELETE /api/v1/workspaces/{id}   # Delete workspace
### Boards
GET    /api/v1/workspaces/{id}/boards    # List boards in workspace
POST   /api/v1/workspaces/{id}/boards   # Create a board
GET    /api/v1/boards/{id}              # Get board by ID
DELETE /api/v1/boards/{id}              # Delete board
### Tasks
GET    /api/v1/boards/{id}/tasks        # List tasks on a board
POST   /api/v1/boards/{id}/tasks        # Create a task
GET    /api/v1/tasks/{id}               # Get task by ID
PUT    /api/v1/tasks/{id}               # Update task
PATCH  /api/v1/tasks/{id}/status        # Update task status only
DELETE /api/v1/tasks/{id}               # Delete task
### Health & Monitoring
GET    /api/v1/health            # Application health check
GET    /actuator/health          # Spring Actuator health
GET    /actuator/metrics         # Application metrics
---

πŸ“Š Project Status

Phase Description Status
Phase 1 Project setup, Docker, Flyway, Health endpoint βœ… Complete
Phase 2 JWT Authentication β€” register, login, refresh πŸ”„ In Progress
Phase 3 Core domain β€” workspaces, boards, tasks ⏳ Pending
Phase 4 Redis caching + AWS S3 file uploads ⏳ Pending
Phase 5 Kafka events + email notifications ⏳ Pending
Phase 6 Testing β€” JUnit, Mockito, Testcontainers ⏳ Pending
Phase 7 React frontend + CI/CD + Grafana ⏳ Pending

## πŸ” Authentication Flow
POST /auth/register
β†’ Password hashed with BCrypt
β†’ User saved to PostgreSQL
β†’ Access token (15 min) + Refresh token (7 days) returned
POST /auth/login
β†’ Email + password verified
β†’ New access + refresh tokens returned
Every protected request
β†’ Authorization: Bearer <access_token> header required
β†’ JWT filter validates signature and expiry
β†’ 401 Unauthorized if missing or invalid

🐳 Docker Services

Service Image Port
PostgreSQL postgres:16-alpine 5432
Redis redis:7-alpine 6379

πŸ“ Database Migrations

Managed by Flyway. Migration files live in src/main/resources/db/migration/.

Version Description
V1 Create users table

New migrations are added as V2__description.sql, V3__description.sql etc. Never edit an existing migration file.


πŸ§ͺ Testing Strategy

  • Unit tests β€” JUnit 5 + Mockito for service layer
  • Integration tests β€” Testcontainers (real PostgreSQL in Docker)
  • API tests β€” MockMvc for controller layer
  • Coverage target β€” 80%+

πŸ“ˆ Monitoring

Once Phase 7 is complete:

  • Prometheus scrapes metrics from /actuator/prometheus
  • Grafana dashboard visualizes request rates, response times, error rates
  • Structured logs via Logback with timestamp, thread, level, and class

🀝 Contributing

This is a personal learning project. Feel free to fork it and build your own version.


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

Pratik β€” @pratik20gb

Built as a complete full-stack Java learning project β€” from zero to production-grade.


πŸ“„ License

MIT License β€” free to use and learn from.

Releases

No releases published

Packages

 
 
 

Contributors

Languages