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
- Host: GitHub
- URL: https://github.com/pratik20gb/flowboard
- Owner: pratik20gb
- Created: 2026-06-02T05:50:53.000Z (about 1 month ago)
- Default Branch: main
- Last Pushed: 2026-06-02T06:15:02.000Z (about 1 month ago)
- Last Synced: 2026-06-02T07:25:30.690Z (about 1 month ago)
- Topics: aws, docker, flyway, github-actions, java, kafka, logback, postgresql, react, redis, spring-boot, spring-security, tailwindcss, zustand
- Language: Java
- Homepage:
- Size: 14.6 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.