A Spring Boot + Kotlin application that records TeamSpeak activity and presents it on a website. It uses Spring MVC, Spring Security, jOOQ, Flyway, and JTE templates on top of PostgreSQL.
spybot-core: shared query layer, domain models, security principal, Flyway migrations, and jOOQ generation config.spybot-web: MVC app, JTE views, REST endpoints, security config, static assets, and scheduled jobs.spybot-recorder: dedicated recorder process for the TeamSpeak listener.frontend: Rollup bundle (main.js/main.css) packaged intospybot-web.infrastructure: Caddy and Compose configuration for the server.
Build the frontend bundle once (Docker does this for you in its Node stage):
cd frontend && npm ci && npm run packageThen use Gradle for everything else:
./gradlew :spybot-web:test
./gradlew :spybot-web:bootJarOr run the whole stack locally with Docker:
docker compose build
docker compose up -dKotlin is formatted with ktlint through pre-commit; the check runs on every pull request.
To install the hook locally, use pre-commit install.
Every pull request adds one bullet at the top of CHANGELOG.md; see the notes at the top of that file.