OSS-QMET is a full-stack demo application for defining and evaluating open-source software quality models. The current implementation supports:
- user registration and login
- visual custom model creation
- DSL parse and preview
- persistence of custom quality models in PostgreSQL
- My Models and model detail retrieval
- model update and delete flows
- Backend: Spring Boot, Spring Data JPA, Flyway, PostgreSQL
- Frontend: React, Vite, Vitest, Playwright
- Local infrastructure: Docker Compose
- Docker Desktop with
docker compose - Java 17 or newer
- Node.js 20 or newer
- npm
The backend defaults are already set for local development:
- backend:
http://localhost:8081 - frontend:
http://127.0.0.1:3000 - postgres:
localhost:5432
Recommended local env files:
- Root env for backend and Docker:
cp .env.example .env- Frontend env:
printf 'VITE_API_BASE_URL=http://localhost:8081/api\n' > ossFrontend/.envDo not commit .env files.
From the repository root:
docker compose up -d postgresTo start both database and backend container together:
docker compose up -dCheck container status:
docker compose psPostgreSQL data is stored in the named Docker volume oss-postgres-data.
Run the backend locally:
cd ossBackend
./mvnw spring-boot:runBackend base URL:
http://localhost:8081/api
Backend configuration is environment-driven through:
SPRING_DATASOURCE_URLSPRING_DATASOURCE_USERNAMESPRING_DATASOURCE_PASSWORDFRONTEND_ORIGINSERVER_PORT
Default values are defined in application.properties.
cd ossFrontend
npm install
npm run dev -- --host 127.0.0.1Frontend URL:
http://127.0.0.1:3000
The frontend reads VITE_API_BASE_URL from ossFrontend/.env.
Flyway runs automatically on backend startup.
Migration files live in:
/Users/huseyintenlik/AKY/open-source-software/ossBackend/src/main/resources/db/migration
Current baseline migration:
V1__init.sql
Rules for schema changes:
- Do not manually alter local tables.
- Add a new versioned Flyway migration.
- Commit the migration with the related code change.
This is the shortest reliable local startup sequence:
- Start Postgres:
cd /Users/huseyintenlik/AKY/open-source-software
docker compose up -d postgres- Start backend:
cd /Users/huseyintenlik/AKY/open-source-software/ossBackend
./mvnw spring-boot:run- Start frontend:
cd /Users/huseyintenlik/AKY/open-source-software/ossFrontend
npm run dev -- --host 127.0.0.1- Open:
http://127.0.0.1:3000
- Register a user, then verify this path:
- log in
- create a custom visual model
- save it
- open My Models
- reload and confirm the model still exists
- view details
- edit and save
- delete the model
cd ossBackend
./mvnw testBackend tests use an isolated H2 configuration from ossBackend/src/test/resources/application.properties, so they do not depend on the local PostgreSQL instance.
cd ossFrontend
npm run testcd ossFrontend
npm run buildStart the backend first, then run:
cd ossFrontend
npm run e2ePlaywright uses playwright.config.ts and starts its own frontend dev server on 127.0.0.1:3000.
No global seeded demo accounts are committed.
For demos, create an account through the registration screen. Passwords are stored with BCrypt hashing in the backend.
- Make sure Docker Desktop is running.
- Retry:
docker info
docker compose ps- Check that the database container is healthy:
docker compose ps- Confirm
.envvalues match docker-compose.yml.
Set FRONTEND_ORIGIN to the exact frontend origin, for example:
FRONTEND_ORIGIN=http://127.0.0.1:3000
Stop the conflicting process or override SERVER_PORT, then update the frontend VITE_API_BASE_URL to match.
cd ossFrontend
npx playwright install chromiumWhat is solid now:
- Dockerized local PostgreSQL
- Flyway-driven schema setup
- environment-based backend config
- custom model persistence with nested structure
- model retrieval, update, and delete
- backend unit tests
- frontend unit tests
- Playwright smoke coverage for auth and model persistence
What still remains a simplification:
- evaluation logic is still lighter than the target OSS-QMET vision
- DSL support is practical and usable, but not yet a full formal language implementation
- some advanced domain concepts are preserved through DTO snapshot state rather than a fully normalized schema