SkillTrack AI is a full-stack AI-powered learning platform for setting goals, tracking learning activity, generating coaching feedback, and taking quizzes. It uses Keycloak for authentication, Spring Boot for the backend, React for the frontend, PostgreSQL for persistence, and Spring AI for AI-powered features.
.
|-- backend/ # Spring Boot API
|-- frontend/ # React UI (Vite)
|-- docker/ # PostgreSQL and Keycloak init scripts
|-- keycloak/ # Custom Keycloak theme
|-- .github/ # GitHub Actions CI
`-- docker-compose.yml
- Java 21
- Spring Boot 3.4
- Spring Security OAuth2 Resource Server
- Spring Data JPA
- Flyway
- PostgreSQL
- H2 for tests
- Spring AI for OpenAI integration
- Maven
- React 18
- Vite
- React Router
- Keycloak.js and
@react-keycloak/web - Shared authenticated fetch hook
- CSS variables for theme support
docker compose up -dSet the required environment variables in .env before starting the app:
POSTGRES_DB=skilltrack
POSTGRES_USER=youruser
POSTGRES_PASSWORD=yourpass
OPENAI_API_KEY=sk-...mvn -f backend/pom.xml spring-boot:runcd frontend
npm install
npm run devThe frontend runs at http://localhost:3000.
- Realm:
skilltrack - Backend client:
skilltrack-client - Frontend client:
skilltrack-frontend - Admin role:
admin - JWT claims used by the app:
preferred_username,email
- Create, edit, and delete learning goals
- View goal detail pages with linked logs, quizzes, and coaching history
- Add, filter, edit, and export learning logs
- View progress insights and activity trends
- Generate AI learning instructions from logs
- Generate AI summaries from learning activity
- Generate AI quizzes for a goal
- Fallback handling for malformed quiz generation responses
- Semantic grading for free-text quiz answers
- Responsive dashboard-style layout
- Light and dark themes
- Shared authenticated API client
- Loading, error, and empty states across major pages
GET /api/goalsGET /api/goals/{id}POST /api/goalsGET /api/logsGET /api/logs/insightsGET /api/logs/exportGET /api/summariesGET /api/quizzesGET /api/quizzes/goal/{goalId}GET /api/quizzes/{quizId}POST /api/instructionsGET /api/instructionsGET /api/admin/...
Backend tests run against H2 with the test profile:
mvn -f backend/pom.xml test -Dspring.profiles.active=testGitHub Actions runs backend tests with Maven and builds the frontend with Vite.
MIT (c) 2025 Soulaimen Choura