Team Allocation Decision Support System - An intelligent decision-support tool for software engineering team allocation in multi-project courses, as used in the iPraktikum at TUM.
π Full Documentation
TEASE helps educators efficiently allocate students to project teams while considering multiple constraints such as skills, preferences, team diversity, and project requirements. The system uses constraint-based optimization to ensure fair and balanced team compositions.
- π Constraint-Based Allocation: Define constraints for team size, skills, diversity (gender, nationality, language)
- π― Preference Matching: Automatically assign students to their preferred projects while meeting all constraints
- π Real-time Collaboration: Multiple users can work simultaneously with live synchronization
- π Data Integration: Import/export student data via CSV or direct integration with PROMPT
- π Lock Mechanism: Manually lock specific student allocations that should not change
- πΈ Visual Export: Export team compositions as images or CSV files
- π Analytics Dashboard: View allocation statistics and constraint satisfaction metrics
TEASE follows a modern microservices architecture with separate client and server components:
Client
- Framework: Angular 19.1.1
- UI Library: Bootstrap 5.3.8 + ng-bootstrap 18.0.0
- State Management: RxJS 7.8.2
- Real-time Communication: STOMP over WebSocket
- Charts: Chart.js 4.5.1 + ng2-charts
- Build: Angular CLI with esbuild
Server
- Framework: Spring Boot 3.5.9
- Runtime: Java 21 (LTS)
- WebSocket: STOMP protocol for real-time communication
- Build: Maven 3.9
- Docker & Docker Compose (recommended)
- OR Node.js 18+ and Java 21+ (for local development)
-
Using pre-built images from GitHub Container Registry:
docker compose up
-
Building from source:
docker compose up --build
-
Access the application:
- Client: http://localhost/tease
- Server: http://localhost:8081
cd client
npm install
npm startThe client will be available at http://localhost:80/
cd server
mvn clean install
mvn spring-boot:runThe server will be available at http://localhost:8081/
TEASE uses a comprehensive GitHub Actions-based CI/CD pipeline for automated building, testing, and deployment.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GitHub Repository β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β PR Opened β β Push to Main β β Release β β
β ββββββββ¬ββββββββ ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
βββββββββββΌβββββββββββββββββββΌβββββββββββββββββββΌβββββββββββββββββ
β β β
v v v
βββββββββββ ββββββββββββ ββββββββββββ
β Assign β βBuild/Pushβ βBuild/Pushβ
β Author β β to Dev β β to Prod β
βββββββββββ ββββββ¬ββββββ ββββββ¬ββββββ
β β
βββββββββ΄βββββββββ ββββββββ΄βββββββββ
β β β β
v v v v
ββββββββββββββββββ βββββββββββββββ βββββββββββββββ
βBuild & Push β β Deploy β β Deploy β
βDocker Images β β to Dev β β to Prod β
β β β β β β
β β’ Client Image β β VM: Dev β β VM: Prod β
β β’ Server Image β β Environment β β Environment β
ββββββββββββββββββ βββββββββββββββ βββββββββββββββ
β β β
v v v
ββββββββββββββββββ βββββββββββββββ βββββββββββββββ
βGitHub Containerβ βDocker β βDocker β
βRegistry (GHCR) β βCompose Up β βCompose Up β
ββββββββββββββββββ βββββββββββββββ βββββββββββββββ
1. PR Opened (.github/workflows/pr-opened.yml)
- Trigger: When a pull request is opened
- Actions: Automatically assigns the PR to its author
- Permissions:
pull-requests: write
2. Build and Deploy to Dev (.github/workflows/deploy-dev.yml)
- Trigger: Push to
mainbranch or PR tomain - Actions:
- Builds Docker images for client and server
- Pushes images to GitHub Container Registry with
latesttag - Deploys to development environment via SSH
- Permissions:
contents: read,packages: write
3. Build and Deploy to Prod (.github/workflows/deploy-prod.yml)
- Trigger: Release published
- Actions:
- Builds Docker images with release version tag
- Pushes to GitHub Container Registry
- Deploys to production environment
- Permissions:
contents: read,packages: write
4. Build and Push (.github/workflows/build-and-push.yml)
- Type: Reusable workflow called by other workflows
- Actions:
- Uses multi-stage Docker builds
- Builds both client (Angular) and server (Spring Boot) images
- Pushes to
ghcr.io/ls1intum/teaseandghcr.io/ls1intum/tease-server
- Permissions:
contents: read,packages: write
5. Deploy Docker (.github/workflows/deploy-docker.yml)
- Type: Reusable workflow for deployment
- Actions:
- SSH to target VM via deployment gateway (jump host)
- Stop existing containers
- Copy updated docker-compose file
- Start new containers with
docker compose up
- Permissions:
contents: read
- URL:
https://prompt.ase.cit.tum.de/tease - Trigger: Automatic on push to
main - Purpose: Testing and validation before production release
- URL:
https://prompt.ase.cit.tum.de/tease(production path) - Trigger: Manual release creation
- Purpose: Stable version for end users
- Code Push/PR Merge β GitHub Actions triggered
- Multi-stage Docker Build:
- Client: Node.js build β Nginx static serving
- Server: Maven build β Java runtime
- Image Push β GitHub Container Registry
- SSH Deployment:
- Connect via deployment gateway (jump host)
- Pull latest images from GHCR
- Update docker-compose configuration
- Restart services with zero-downtime strategy
- Health Check β Verify deployment success
- β Least Privilege Permissions: Each workflow has minimal required permissions
- β Secret Management: Sensitive data stored in GitHub Secrets
- β Jump Host: Deployment via secure gateway server
- β Image Scanning: Automated security scanning (planned)
- β Signed Commits: Recommended for production releases
- CSV Import: Upload a CSV file with student information (name, email, skills, preferences)
- PROMPT Integration: Directly import from PROMPT if logged in as project management team member
Define allocation rules based on:
- Team Size: Min/max students per team
- Skills: Required technical competencies
- Diversity: Gender, nationality, language distribution
- Device Ownership: Equipment requirements
- Project Preferences: Student ranking of projects
- Click "Run Allocation" to execute the constraint solver
- System automatically assigns students optimizing for:
- Highest preference satisfaction
- All constraint fulfillment
- Balanced team compositions
- Review results in the dashboard with visual feedback
- CSV Export: Download allocation as spreadsheet
- PROMPT Export: Push results directly to PROMPT system
- Team Cards: Generate visual team composition images
TEASE is designed to work seamlessly with PROMPT (Project Management and Organization Tool):
- Single Sign-On: Shared authentication via Keycloak
- Data Synchronization: Real-time updates between systems
- Workflow Continuity: Import student data from PROMPT, export allocations back
- Shared Deployment: Both applications run on the same infrastructure
The diagram shows the complete architecture including:
- Load balancer (Traefik)
- Frontend (Angular) and Backend (Spring Boot) services
- Database connections
- Integration points with PROMPT
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by the AET Team at Technical University of Munich
