An open API service indexing awesome lists of open source software.

https://github.com/pratik20gb/flowboard

Full stack project management SaaS - Java Spring Boot + React
https://github.com/pratik20gb/flowboard

aws docker flyway github-actions java kafka logback postgresql react redis spring-boot spring-security tailwindcss zustand

Last synced: about 1 month ago
JSON representation

Full stack project management SaaS - Java Spring Boot + React

Awesome Lists containing this project

README

          

# 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

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

### Start infrastructure

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

### Run the application

```bash
./mvnw spring-boot:run
```

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

### Verify it's running

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

Expected response:
```json
{
"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 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](https://github.com/pratik20gb)

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

---

## πŸ“„ License

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