Team Tone Tuner is a web application that helps teachers to create balanced teams for group projects, based on the students' personalities.
This is a proof-of-concept implementation of the framework described in my thesis Incorporating Psychological Factors into Software Engineering Team Formation
.
Go isn't needed, as it is bundled in the Docker image (including air
hot reload development server).
Configure .config.toml
in /env
folder. It follows this structure:
title = "Development enviroment"
environment = "dev"
[server]
port = 4040
[database]
connectionUrl = "host=ttt-db port=5432 user=dev dbname=dev password=12345678 sslmode=disable"
[github]
clientId = "<your github client id>"
clientSecret = "<your github client secret>"
redirectUrl = "http://localhost:8080/api/login/github/callback"
make yarn
docker-compose up
# in another terminal
make migrations
make seed
You can now visit http://localhost:5173
and login with any GitHub account, to finish the student questioner.
Quick overview of the project structure for both the backend and frontend.
/api
- API controllers with swagger documentation. Also includes business logic/config
- Configuration loader usingviper
/docs
- Auto-generated Swagger documentation/dto
- Data transfer objects used for API requests and responses/env
- Environment files/model
- Database entities and operations generated usingent
/resources
- External resources/migrations
- Database migrations generated usingatlas
/seed
- Files needed for seeding the database (e. g. questions)
/router
- API router and associated middleware like authentication/schema
- Database schema used byent
to generate database entities/scripts
- Scripts used for the development and seeding the database/service
- Separated business logic/store
- Database access layer/teamform
- The main Simulated Annealing TF algorithm implementation
/src
- Source/api
- API client generated usingorval
/assets
- Static assets e.g. images/components
- Separated React components/hooks
- Extracted logic into React hooks/modals
- Mantine context modals/pages
- Subpages e.g. login, report, questioner,.../router
- Definitions for routes and linking them to pages/store
- Zustand store for persisting global state