Skip to Content
Quatrion Portal — Auto-generated Admin UI from JPA Annotations

✦ Quatrion Portal

⚠️ ALPHA VERSION — Under active development. APIs may change without backward compatibility.

An automatic, metadata-driven admin UI generated from annotated JPA entities. Zero frontend code. Zero per-entity React components.

@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 = "" } // ↑ That's it. Table, form, filters, search — all generated automatically.

How it works

Annotate your JPA entity

Add @PortalEntity, @PortalField and other annotations to your Kotlin/JPA class.

Register in AppModuleConfig

ModuleDef(name = "CRM", label = "CRM", icon = "users", order = 1, defaultEntity = Customer::class.java, entities = listOf(EntityRef(entityClass = Customer::class.java, order = 1)) )

Start the application

The backend exposes /api/portal/metadata, the frontend generates a full CRUD UI.

Key features

FeatureStatus
Auto-generated CRUD tables✅ Available
Auto-generated forms with validation✅ Available
Column filters & global search✅ Available
Module / sidebar navigation✅ Available
Keycloak OIDC authentication✅ Available
Role-based field/action security (@PortalSecurity)✅ Available
Custom action buttons (@PortalAction)✅ Available
Relation lookups (@PortalRelation, @PortalLookup)✅ Available
Conditional field rules (@PortalDependency)✅ Available
Soft delete & audit log✅ Available
CSV / Excel export🔄 In progress
Multi-tenant support🔄 Planned

Tech stack

LayerTechnology
BackendQuarkus 3.23 + Kotlin 2.2 + Hibernate Reactive
FrontendNext.js 16 + React 19 + TanStack Table/Query + Shadcn/UI
AuthKeycloak 25 (OIDC / JWT)
DatabasePostgreSQL 16
DeliveryDocker / Docker Compose

Quick start

The frontend is delivered as a pre-built Docker image: ghcr.io/mderkowski82/quatrion-portal-frontend:latest You don’t write a single line of React — just annotate your backend entities.

Last updated on