Skip to Content
DocsQuick Start

Quick Start

Alpha version — The annotation API and interfaces may change without backward compatibility. Not recommended for production use.

Prerequisites

  • JDK 21+ and Gradle 8+ (or use ./gradlew)
  • Docker and Docker Compose

Install the starter

Clone or download quatrion-starter:

git clone https://github.com/mderkowski82/quatrion-starter.git cd quatrion-starter

Option 1 — Dev mode (hot-reload)

Infrastructure required — before starting the backend or frontend you must first launch Docker Compose, which provides the PostgreSQL database and Keycloak.

The docker-compose.infra.yml file is located in the quatrion-starter directory of the quatrion-starter repository. Make sure you have cloned the repository and are inside that directory, then run:

docker compose -f docker-compose.infra.yml up -d

Make sure Docker Desktop (or Docker Engine) is running on your machine.

Start infrastructure (PostgreSQL + Keycloak)

docker compose -f docker-compose.infra.yml up -d

Start backend with live reload

./gradlew quarkusDev
URLService
http://localhost:8080Backend API
http://localhost:8080/q/swagger-uiSwagger UI
http://localhost:8180Keycloak Admin (admin / admin)

Environment variables

Copy .env.example.env and fill in:

VariableDescription
PORTAL_DB_USER / PORTAL_DB_PASSWORDPostgreSQL credentials
KEYCLOAK_CLIENT_SECRETKeycloak frontend client secret
KEYCLOAK_BACKEND_CLIENT_SECRETKeycloak backend service account secret
AUTH_SECRETAuth.js signing secret (openssl rand -hex 32)
LICENSE_KEYQuatrion Portal license key

Frontend

The frontend must be built manually from the source code available at: https://github.com/mderkowski82/quatrion-frontend 

git clone https://github.com/mderkowski82/quatrion-frontend.git cd quatrion-frontend npm install npm run build npm start

Default Keycloak accounts (dev)

UserPasswordRole
admin@example.comadmin123portal-admin
user@example.comuser123portal-user

Project structure

    • docker-compose.yml
    • docker-compose.infra.yml
    • Dockerfile
    • keycloak/realm-export.json
    • .env.example

Adding your first entity

Step 1 — Create a JPA entity with Quatrion annotations:

// src/main/kotlin/com/example/portal/entity/Customer.kt @Entity @Table(name = "customer") @PortalEntity(label = "Customer", module = "CRM", icon = "users", order = 1) class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long = 0 @Column(length = 100, nullable = false) @PortalField(label = "Name", order = 1, required = true, renderer = RendererType.TEXT, filterType = FilterType.CONTAINS) var name: String = "" @Column(length = 200) @PortalField(label = "Email", order = 2, renderer = RendererType.EMAIL, filterType = FilterType.CONTAINS) var email: String = "" }

Step 2 — Register in AppModuleConfig:

@ApplicationScoped class AppModuleConfig : PortalModuleConfig() { override fun modules() = listOf( ModuleDef( name = "CRM", label = "CRM", icon = "users", order = 1, defaultEntity = Customer::class.java, entities = listOf(EntityRef(entityClass = Customer::class.java, order = 1)) ) ) }

That’s it — the full CRUD UI (table, form, filters, search, export) is generated automatically.

Last updated on