SchemaLab is a web-based learning platform for schema matching and schema versioning challenges (DAT355 semester project at HVL). In short, it lets learners practice transforming and aligning data schemas through interactive coding challenges with automated feedback.
Users can browse and solve challenges, while authenticated users can submit solutions and create/edit challenges.
- Frontend: React + Vite + Nginx
- Backend: Spring Boot 4 (Java 25), Spring Security, Spring Data JPA
- Database: PostgreSQL 17
- Code runner: Python (Flask service)
- Orchestration: Docker Compose
- Docker with Compose plugin
docker compose up --buildOpen: http://localhost
docker compose downfrontend(Nginx):http://localhost(port80)backend(Spring Boot):http://localhost:8080postgres: port5432runner(Flask): internal service used via/runner/through frontend proxy
- API auth uses HTTP Basic Auth
- Register:
POST /api/auth/register - Login check:
POST /api/auth/login - A development admin user is seeded on startup:
- username:
dev - password:
dev
- username:
GET /api/challenges(public)GET /api/challenges/{id}(public)POST /api/challenges(authenticated)PUT /api/challenges/{id}(owner/admin)DELETE /api/challenges/{id}(owner/admin)
POST /api/submissions(authenticated)GET /api/submissions/me(authenticated)GET /api/submissions/me/passed(authenticated)
./gradlew bootRunBackend expects PostgreSQL using values from src/main/resources/application.properties:
- DB:
schemalab - User:
schemalab - Password:
schemalab - URL default:
jdbc:postgresql://localhost:5432/schemalab
cd frontend
npm ci
npm run dev./gradlew build --no-daemoncd frontend
npm ci
npm run lint
npm run buildsrc/main/java/no/hvl/schemalab– backend code (controllers, config, models, repositories, seeding)src/main/resources– backend configurationfrontend/– React app and frontend container configrunner/– Python execution service for challenge codedocker-compose.yml– full local stack
- Runar S. Røssevold
- Fredrik Moen