A comprehensive task management and collaboration platform built with Spring Boot backend and Next.js frontend.
- Project Overview
- Technology Stack
- Prerequisites
- Quick Start
- Running the Application
- Testing
- CI/CD Pipeline
- Project Structure
- Documentation
- Contributors
- Quick Start Guide - Get running in 10 minutes
- Testing Summary - Comprehensive testing documentation
- API Documentation - Interactive API docs (when backend is running)
- E2E Testing Guide - Playwright E2E testing
SyncUp is an enterprise task management system that provides:
- Real-time task tracking and notifications
- Department-based project management
- Role-based access control (HR, Manager, Staff)
- Comprehensive reporting and analytics
- WebSocket-based real-time updates
- Comment threading and collaboration features
- Framework: Spring Boot 3.5.5
- Language: Java 21
- Database: PostgreSQL 16.2
- Message Queue: RabbitMQ 3.13
- Authentication: AWS Cognito (OAuth2/JWT)
- Database Migration: Flyway 11.3.4
- API Documentation: SpringDoc OpenAPI (Swagger)
- Build Tool: Maven
- Framework: Next.js 15.5.3 (React 19)
- Language: TypeScript 5
- Styling: Tailwind CSS 4
- State Management: TanStack Query (React Query)
- UI Components: Radix UI
- Real-time: WebSocket (STOMP/SockJS)
- Testing: Jest + Playwright
- Build Tool: npm
- Containerization: Docker & Docker Compose
- CI/CD: GitHub Actions
- Cloud: AWS (Cognito, RDS, EC2)
Before running the application, ensure you have the following installed:
- Node.js: 22.x or higher
- Java: JDK 21
- Docker Desktop: Latest version
- Git: Latest version
- Maven: 3.9+ (or use included
mvnw) - PostgreSQL Client: For database inspection
- Bruno/Postman: For API testing
Create the following environment files:
# Copy from .env.example and fill in values
cp frontend/.env.example frontend/.env.localRequired variables:
NEXT_PUBLIC_API_BASE_URL: Backend API URL (e.g.,http://localhost:8080)NEXT_PUBLIC_WS_BASE_URL: WebSocket URL (e.g.,http://localhost:8080)- AWS Cognito credentials
Located at backend/spmorangle/src/main/resources/application-local.yml
New to the project? Start here: QUICK_START.md
For experienced developers, here's the minimal setup:
git clone <repository-url>
cd spmOranglecd backend
docker compose up -dThis will start:
- PostgreSQL database (port 5432)
- RabbitMQ message broker (port 5672, management UI at 15672)
- Flyway migrations (automatic database setup)
Verify services are running:
docker compose pscd ../frontend
npm installThis will automatically install Playwright browsers via the postinstall script.
cd ../backend/spmorangle
./mvnw clean install -DskipTestscd backend/spmorangle
./mvnw spring-boot:run -Dspring-boot.run.profiles=localBackend will be available at: http://localhost:8080
- API Documentation:
http://localhost:8080/swagger-ui.html - Health Check:
http://localhost:8080/actuator/health
cd frontend
npm run devFrontend will be available at: http://localhost:3000
cd backend/spmorangle
./mvnw clean package
java -jar target/backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prodcd frontend
npm run build
npm startcd backend
docker compose downcd backend
docker compose down -vdocker compose logs -f postgres
docker compose logs -f rabbitmqOpen http://localhost:15672
- Username:
admin - Password:
admin
The backend has 68 test files covering unit and integration tests.
backend/spmorangle/src/test/java/com/spmorangle/
├── common/ # Common utility tests
├── config/ # Configuration tests
├── crm/ # CRM module tests
│ ├── task/ # Task management tests
│ ├── project/ # Project management tests
│ ├── notification/# Notification tests
│ └── report/ # Reporting tests
└── BackendApplicationTests.java
cd backend/spmorangle
./mvnw test./mvnw test -Dtest=SecurityContextUtilTest./mvnw test jacoco:reportCoverage report will be at: target/site/jacoco/index.html
- Tests use H2 in-memory database
- Profile:
test(configured inapplication-test.yml) - Mocked AWS Cognito and external services
The frontend has 63 unit/integration test files and 12 E2E test files.
Location:
frontend/__tests__/
├── app/ # Page component tests
├── components/ # UI component tests
├── contexts/ # Context provider tests
├── hooks/ # Custom hooks tests
├── lib/ # Utility function tests
├── services/ # API service tests
├── types/ # Type definition tests
└── utils/ # Helper function tests
Run Tests:
cd frontend
npm test # Run all tests
npm test -- --watch # Watch mode
npm test -- --coverage # With coverageCoverage report: frontend/coverage/lcov-report/index.html
Location:
frontend/e2e/
├── tests/ # 12 E2E test specs
├── fixtures/ # Test fixtures and helpers
├── setup/ # Global setup/teardown
├── config/ # Test configuration
└── utils/ # Test utilities
Documentation:
frontend/e2e/DOCUMENTATION_INDEX.md- Complete E2E documentationfrontend/e2e/PLAYWRIGHT_E2E_GUIDE.md- Playwright guide
Run E2E Tests:
cd frontend
# Run all E2E tests
npm run test:e2e
# Run with UI mode (recommended for development)
npm run test:e2e:ui
# Run in headed mode (see browser)
npm run test:e2e:headed
# Debug tests
npm run test:e2e:debug
# View test report
npm run test:e2e:reportPrerequisites for E2E Tests:
- Backend and database must be running
- Frontend must be running at
http://localhost:3000 - Valid AWS Cognito test users configured
GitHub Actions workflows are located in .github/workflows/
Trigger: Push to backend/** or PRs to main
Steps:
- ☕ Setup Java 21
- 🗄️ Start PostgreSQL test database
- 🔨 Compile application
- 🧪 Run tests with coverage
- 📊 Generate JaCoCo coverage report
- 💬 Post coverage comment on PR
- 📦 Package JAR file
Coverage Requirements:
- Overall: 40% minimum
- Changed files: 60% minimum
Trigger: Push to frontend/** or PRs to main
Steps:
- 📦 Setup Node.js 22.x
- 📥 Install dependencies
- 🔍 Run TypeScript type checking
- 🧪 Run Jest tests with coverage
- 📊 Generate coverage report
- 🏗️ Build production bundle
Coverage Reporting:
- Uses Vitest coverage report action
- Posts detailed coverage to PR comments
Trigger: Manual or automated deployment
Steps:
- Run Flyway migrations against production database
- Validate migration success
Trigger: Scheduled or on-demand
Steps:
- Scan dependencies for vulnerabilities
- Report security issues
spmOrangle/
├── .github/
│ └── workflows/ # CI/CD pipeline definitions
├── backend/
│ ├── database/
│ │ └── migrations/ # Flyway SQL migration scripts (45+ files)
│ ├── docs/ # Bruno API collection
│ ├── rabbitmq/ # RabbitMQ Dockerfile
│ ├── spmorangle/ # Spring Boot application
│ │ ├── src/
│ │ │ ├── main/java/com/spmorangle/
│ │ │ │ ├── common/ # Shared utilities
│ │ │ │ ├── config/ # Configuration classes
│ │ │ │ └── crm/ # Business modules
│ │ │ │ ├── task/
│ │ │ │ ├── project/
│ │ │ │ ├── notification/
│ │ │ │ └── report/
│ │ │ └── test/ # 68 test files
│ │ └── pom.xml
│ ├── docker-compose.yml # Local infrastructure
│ └── README.md
├── frontend/
│ ├── app/ # Next.js pages (App Router)
│ ├── components/ # React components (50+ components)
│ ├── contexts/ # React contexts
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility libraries
│ ├── services/ # API services
│ ├── types/ # TypeScript types
│ ├── __tests__/ # 63 Jest test files
│ ├── e2e/ # 12 Playwright E2E tests
│ ├── public/ # Static assets
│ ├── package.json
│ ├── playwright.config.ts
│ ├── jest.config.ts
│ └── README.md
├── bruno/ # API testing collection
├── c4-diagrams/ # Architecture diagrams
├── terraform/ # Infrastructure as Code
├── package.json # Root package.json (Husky)
└── README.md # This file
- Quick Start Guide - Get running in 10 minutes ⚡
- Documentation Index - Complete guide to all documentation 📚
- Testing Summary - Comprehensive testing guide 🧪
- Swagger UI:
http://localhost:8080/swagger-ui.html(when backend is running) - Bruno Collection:
bruno/andbackend/docs/directories - Notification API:
NOTIFICATION_API.md
- C4 Diagrams:
c4-diagrams/directory- System Context (C1)
- Container Diagram (C2)
- Component Diagrams (C3)
- Code Diagrams (C4)
- Migrations:
backend/database/migrations/ - Migration Guide:
backend/database/README.md - Revert Scripts: Available for critical migrations
- Testing Overview:
TESTING_SUMMARY.md- 68 backend + 75 frontend tests - E2E Guide:
frontend/e2e/PLAYWRIGHT_E2E_GUIDE.md - E2E Index:
frontend/e2e/DOCUMENTATION_INDEX.md - Backend Tests:
backend/spmorangle/src/test/- JUnit 5, Spring Boot Test, JaCoCo coverage - Frontend Unit Tests:
frontend/__tests__/- Jest, React Testing Library - Frontend E2E Tests:
frontend/e2e/tests/- Playwright
- Terraform:
terraform/README.md - Docker:
backend/docker-compose.ymlwith service definitions
Database Connection Failed:
# Check if PostgreSQL is running
docker compose ps
# Restart services
docker compose down && docker compose up -dPort Already in Use (8080):
# Find process using port
lsof -i :8080
# Kill the process or change port in application-local.ymlNode Modules Issues:
rm -rf node_modules package-lock.json
npm installPlaywright Browsers Missing:
npx playwright install --with-deps chromiumVolume Permissions:
docker compose down -v
docker volume prune
docker compose up -d- Create feature branch from
main - Make changes and commit
- Push and create Pull Request
- CI/CD checks run automatically
- Review and merge
- Linting (ESLint)
- Type checking (TypeScript)
- Code formatting (Prettier)
- Backend: JaCoCo coverage + SonarQube
- Frontend: Jest coverage + ESLint
- Security: Snyk scanning
Located in application-local.yml and application-prod.yml
# API Configuration
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
# AWS Cognito
NEXT_PUBLIC_AWS_COGNITO_PUBLIC_USER_POOL_ID=
NEXT_PUBLIC_AWS_COGNITO_APP_CLIENT_ID=
# Test User Credentials
TEST_HR_EMAIL=qyprojects@gmail.com
TEST_HR_PASSWORD=Orangle255!
TEST_MANAGER_EMAIL=contactus@seniorsync.sg
TEST_MANAGER_PASSWORD=Orangle255!
TEST_STAFF_EMAIL=orangletester1@gmail.com
TEST_STAFF_PASSWORD=Orangle255!
# Base URLs
PLAYWRIGHT_BASE_URL=http://localhost:3000
PLAYWRIGHT_API_URL=http://localhost:8080Team Orangle - SMU Software Project Management 2025
This project is part of SMU Software Project Management course.
Last Updated: November 2025
For detailed setup instructions for specific components, see:
- Backend:
backend/README.md - Frontend:
frontend/README.md - Database:
backend/database/README.md - E2E Testing:
frontend/e2e/PLAYWRIGHT_E2E_GUIDE.md