Sunday, May 31, 2026

Why Frameworks Like Jmix Dramatically Accelerate Enterprise Application Development and How to Implement an Employee Expense Management Application in just One Hours using Jmix

One of the most important lessons learned from modern AI-assisted software development is that productivity is not determined solely by the capabilities of the AI. The underlying framework and architectural foundation play an equally important role.

When building enterprise applications, developers often spend a significant amount of time implementing infrastructure rather than business functionality. CRUD operations, security, authentication, user management, data binding, transactions, file handling, auditing, navigation, and UI generation are repeated in project after project. Although these tasks are necessary, they rarely provide direct business value.

This is where Jmix offers a significant advantage.

Built entirely on Java and Spring Boot technologies, Jmix provides a complete application development platform that allows developers to focus primarily on business requirements rather than technical plumbing. Data models, database mappings, user interfaces, security, workflows, and administration capabilities can be generated and extended rapidly while remaining fully customizable.

One of the most remarkable aspects of Jmix is the balance it achieves between productivity and flexibility. Unlike many low-code platforms, developers are not locked into proprietary languages or runtime environments. Everything remains standard Java, making the generated applications easy to understand, maintain, debug, and extend by any experienced Java developer.

The productivity gains become even more evident when Jmix is combined with AI-assisted development. AI can generate entities, business rules, views, workflows, and user interfaces, while Jmix provides the framework necessary to integrate these components into a consistent and maintainable enterprise application. This combination significantly reduces development time while also reducing implementation errors and architectural inconsistencies.

Another differentiating factor is the breadth of functionality available within a single platform. Very few Java-based frameworks provide integrated support for features such as:

  • Business Process Management (BPM)
  • Workflow automation
  • Kanban boards
  • Role-based security
  • File storage and document management
  • User and access administration
  • Audit trails
  • Dynamic user interfaces
  • Reporting and dashboards
  • Data management and CRUD generation



Traditionally, implementing these capabilities requires integrating multiple frameworks and libraries, each with its own configuration, lifecycle, dependencies, and learning curve. Jmix consolidates many of these concerns into a unified and coherent development model.

For development teams, this translates into several tangible benefits:

  • Faster application delivery
  • Lower development and maintenance costs
  • Reduced implementation risk
  • Fewer integration problems
  • Consistent architectural patterns
  • Easier onboarding of new developers
  • Higher code quality and maintainability

In a software industry increasingly influenced by AI-generated code, frameworks such as Jmix become powerful multipliers. They provide the structure, conventions, and enterprise capabilities that allow both developers and AI agents to produce high-quality business applications in a fraction of the time traditionally required.

The result is not only faster development, but also more reliable, maintainable, and scalable enterprise software.

One of the most important aspects of Jmix is that it is not a limiting platform. Unlike many low-code environments that lock developers into proprietary technologies and development models, Jmix is built entirely on standard Java and Spring Boot technologies.

This means that developers can fully benefit from the productivity gains provided by Jmix during the initial stages of a project while retaining complete control over the application's future evolution. If additional functionality is required beyond what Jmix provides out of the box, developers can seamlessly implement custom Spring services, integrate external systems, expose REST or GraphQL APIs, incorporate third-party Java libraries, or build highly specialized user interfaces.

In fact, one of the greatest advantages of Jmix is that it accelerates the development of the repetitive and infrastructure-heavy parts of an enterprise application while preserving the full flexibility of the underlying Spring ecosystem. The most time-consuming tasks data management, security, user administration, navigation, CRUD operations, workflows, and application structure are already solved. From that point forward, the development team is free to extend the application as far as business requirements demand.

In other words, adopting Jmix is not a technological compromise. It is a way to complete the hardest and most repetitive parts of enterprise software development faster, while keeping all the power and flexibility of the Java and Spring Boot ecosystem available whenever it is needed.

Creating the Employee Expense Management Application in Just One Hour Using Jmix. Without AI Assistence.

In the previous article, "How to Implement an Employee Expense Management Application in Two Hours with AI Assistance", we designed and implemented a complete expense management solution using a traditional enterprise architecture based on a relational database, Spring Boot, GraphQL, and React.

In this second exercise, the objective was different: to evaluate how much development effort could be reduced by leveraging a framework specifically designed for rapid enterprise application development.

The result was remarkable. Starting from the database schema created in the previous article, a fully functional application was built in approximately one hour using Jmix.

Starting Point: Reusing the Existing Database

Unlike the previous implementation, no database design work was required.

The application was built directly on top of the existing Oracle database schema containing the following tables:

  • EXPENSE_SHEET
  • EXPENSE_LINE

Since the database structure had already been validated, the focus shifted entirely to the application layer.

Step 1: Creating the Entity Model

The first step consisted of creating the JPA entities representing the business model.

Rather than designing a new model from scratch, the existing entity classes from the previous Spring Boot implementation were reused and adapted to Jmix.

Only minor modifications were required:

  • Adding Jmix entity annotations.
  • Adjusting date and time types.
  • Implementing Jmix-compatible enumerations.
  • Defining the master-detail relationship between ExpenseSheet and ExpenseLine.

The resulting model consisted of only two entities:

ExpenseSheet

Represents an employee expense report and contains:

  • Sheet Number
  • Employee Name
  • Sheet Date
  • Currency
  • Status
  • Total Amount
  • Responsible Person
  • Comments

It also owns a collection of ExpenseLine entities through a composition relationship.

ExpenseLine

Represents an individual expense item and contains:

  • Expense Date
  • Expense Type
  • Description
  • VAT Rate
  • Amount
  • Payment Method
  • Receipt File Name

This entity is linked to its parent ExpenseSheet through a standard master-detail relationship.

Step 2: Reusing Existing Enumerations

The enumerations created in the original application were reused with minimal changes.

The following business enumerations were preserved:

  • ExpenseStatus
  • ExpenseType
  • PaymentMethod
  • CurrencyCode

Only the implementation was adapted to conform to the Jmix EnumClass model, allowing automatic integration with:

  • Combo boxes
  • Filters
  • Forms
  • Data grids
  • Validation mechanisms

This avoided the need to recreate business rules already implemented in the original application.

Step 3: Generating the User Interface

One of the most significant productivity gains came from Jmix's ability to generate complete CRUD interfaces directly from the entity model.

Instead of manually developing pages, components, controllers, APIs, GraphQL schemas, DTOs, mappers, and frontend code, the application was generated directly from the entities.

Official Jmix Documentation


The following views were created.

Expense Sheets List View



Features included:

  • Data grid
  • Column sorting
  • Generic filtering
  • Column resizing
  • Column reordering
  • Create, Edit, Delete, and Refresh actions

The view was generated automatically and required only minor cosmetic adjustments.

Expense Sheet Detail View (Form at the top)



This view contains:

  • Expense Sheet header information
  • Employee details
  • Status and currency selectors
  • Total amount calculation
  • Comments section

The detail form serves as the master component of the application.

Expense Lines Embedded Grid (Table at the bottom)



A grid containing all expense lines associated with the selected expense sheet was added directly below the form.

Features include:

  • Create line
  • Edit line
  • Remove line
  • Sorting
  • Immediate visual refresh

The grid is bound directly to the collection of ExpenseLine entities belonging to the selected ExpenseSheet.

Expense Line Detail Dialog

A dedicated popup dialog was generated for editing individual expense lines.

The dialog includes:

  • Expense Date
  • Expense Type
  • Description
  • VAT Rate
  • Amount
  • Payment Method
  • Receipt information

The dialog operates within the same DataContext as the parent ExpenseSheet, enabling all modifications to remain in memory until the user explicitly saves the expense sheet.

Step 4: Implementing Business Logic

Only a very small amount of custom code was required.

The primary customization consisted of implementing automatic recalculation of the Expense Sheet total amount whenever an expense line was created, modified, or removed.

The process is entirely client-side:

  1. User edits an expense line.
  2. The line dialog closes.
  3. The total amount is recalculated in memory.
  4. The form is refreshed immediately.
  5. No database update occurs yet.
  6. Changes are persisted only when the user saves the Expense Sheet.

This approach eliminates inconsistent states and closely matches the behavior expected by business users.

Conclusion

Starting from the database schema created in the previous article, the entire application was built using:

  • Two entities
  • Four business enumerations
  • Four generated views
  • A small amount of custom business logic

No DTOs, GraphQL schemas, REST controllers, repositories, service layers, React components, frontend state management, or API integrations were required.

The result demonstrates how a framework such as Jmix can dramatically reduce development effort while still producing a fully functional enterprise application built entirely on standard Java and Spring Boot technologies.

For applications centered around data management, workflows, administration, and business processes, this approach can significantly reduce development time, implementation complexity, and maintenance costs while preserving full extensibility for future enhancements.

Wednesday, May 27, 2026

 How to Build an Employee Expense Management Application in Two Hours with Zero Coding and AI Assistance

Modern AI capabilities, combined with software architects who are able to precisely define and structure both business and technical requirements, are radically transforming the way enterprise applications are developed.

What previously required weeks of analysis, design, backend implementation, frontend development, integration, and testing can now be prototyped in just a few hours through an iterative collaboration between humans and AI-assisted development tools.

The key is not only the power of AI itself, but also the quality of the architectural guidance, domain modeling, transactional design, and requirement definition provided by experienced engineers. When both elements work together effectively, ultra-fast full-stack application development becomes a realistic and highly productive approach.

 1. Choosing the Right Technology Stack

One of the key reasons why it is now possible to build a functional enterprise application in just a few hours with the help of AI is the maturity and compatibility of modern development frameworks and architectures.

For this project, the selected stack was:

Layer

Technology Stack

Database

Oracle Database

Backend API

Spring Boot + GraphQL

Frontend

React + Material UI

This combination is particularly well suited for rapidly developing enterprise business applications such as employee expense management systems, approval workflows, master/detail transactional forms, dashboards, and administrative portals.

Database Layer

Although this implementation used Oracle as the relational database engine, the reality is that for an application of this size and complexity, almost any modern relational database would work perfectly well.

Why Spring Boot + GraphQL?

For the backend, the combination of Spring Boot and GraphQL is especially productive for AI-assisted development.

Traditional REST APIs often generate excessive boilerplate:

Many endpoints
Many DTOs
Many payload variations
Over-fetching
Under-fetching

GraphQL simplifies this considerably.

Instead of creating dozens of rigid endpoints, the frontend can request exactly the data it needs.

Advantages of Spring Boot + GraphQL

  • Rapid API generation
  • Strong typing
  • Clean schema-driven design
  • Excellent integration with JPA/Hibernate
  • Easy DTO mapping
  • Reduced frontend/backend coupling
  • Flexible queries
  • Simplified master/detail retrieval
  • Better frontend efficiency
  • Easier AI-assisted code generation

Spring Boot also provides:

  • Dependency injection
  • Transaction management
  • Security integration
  • Repository abstraction
  • Validation
  • Exception handling
  • Production-ready infrastructure

with very little manual configuration.

Why React for the Frontend?

React is particularly effective for applications with:

  • Dynamic forms
  • Popups/dialogs
  • Editable grids
  • Master/detail screens
  • Stateful workflows
  • Reactive updates

An expense management system contains exactly these kinds of interfaces.

Advantages of React + Material UI

  • Fast UI prototyping
  • Component reusability
  • Excellent state management patterns
  • Strong ecosystem
  • Clean separation of concerns
  • Responsive layouts
  • Rich enterprise UI components
  • DataGrid support
  • Dialog and form infrastructure
  • Easy integration with GraphQL/Apollo

 

Why This Architecture Works So Well with AI

This architecture is especially AI-friendly because it is:

Structured
Layered
Predictable
Strongly typed
Component-oriented

Project Logbook:  Building an Employee Expense Management Application with AI in Two Hours

Start Time

Main Step

00:00

1. Create the application mockups

00:20

2. Generate the database DDL from the mockups

00:32

3. Generate test data

00:42

4. Create the backend project in IntelliJ

01:25

5. Create the frontend application

02:00

Target completion

00:00  Create the Application Mockups

The first task is to ask the AI to generate the initial application mockups. The objective is to define the user experience before writing backend or frontend code.

The application should include three main user interfaces:

Mockup

Purpose

Expense Sheets Dashboard

Main table showing all employee expense sheets

Expense Sheet Edit Popup

Form for creating, viewing, and editing one expense sheet and its expense lines

Mobile Expense Sheet View

Simplified mobile interface for editing expenses from a mobile device

 Requirements to provide to the AI

Area

Requirement

Application domain

Employee expense management and control

Main entity

Expense Sheet

Detail entity

Expense Line

Main screen

Table with all expense sheets

Main table columns

Expense sheet number, employee name, sheet date, total amount, status, responsible name

Status values

Submitted, Approved, In Process of Pay, Paid, Rejected

Table behavior

Column filters, sorting icons, row actions

Row actions

View, Edit, Delete

Detail popup

Opens over the main table

Expense sheet form fields

Sheet number, employee name, sheet date, total amount, currency, status, responsible, comments

Expense lines table fields

Expense date, expense type, description, VAT, amount, payment method, receipt

Expense line actions

Add, View, Edit, Delete

Buttons

Save, Cancel/Close, Submit

Mobile interface

Simpler layout, fewer fields, optimized for small screens

UX requirement

Master/detail relationship: Expense Sheet contains multiple Expense Lines

Visual style

Enterprise-style, clean, aligned tables, clear buttons, icons for actions

Output format

Draw.io / diagrams.net XML

 

The AI agent returns:

 

  00:20  Generate the Database DDL from the Mockups

The second task is to ask the AI to generate the relational database model based on the mockups.

The application is simple enough to work with any modern relational database. Oracle Database was used in this implementation, but PostgreSQL or MySQL would also be suitable.

Requirement

Description

Database model

Relational

Main table

EXPENSE_SHEET

Detail table

EXPENSE_LINE

Relationship

One expense sheet has many expense lines

Integrity

Foreign key from EXPENSE_LINE to EXPENSE_SHEET

Total amount

Stored in EXPENSE_SHEET and recalculated from EXPENSE_LINE

Enums

Stored as codes in VARCHAR columns

Timestamps

created_at, updated_at

Constraints

Primary keys, foreign keys, not null constraints, unique sheet number

 00:32 — Generate Test Data

The third task is to ask the AI to generate test inserts.

Requirement

Description

Number of sheets

10 expense sheets

Average lines per sheet

Around 5 expense lines

Data realism

Different employees, dates, amounts, statuses, payment methods

Status coverage

Submitted, Approved, In Process of Pay, Paid, Rejected

Expense type coverage

Travel, Hotel, Meals, Transport, Other

Payment methods

Company Card, Personal Card, Cash, Bank Transfer

Total amount

Should match the sum of the lines

 

After executing DDL Script we have the test data


 

00:42 — Create the Backend Project in IntelliJ

The backend is created as a Spring Boot project in IntelliJ.

Backend technology requirements

Layer

Technology Requiirement

Language

Java 17

Framework

Spring Boot

API style

GraphQL

Persistence

Spring Data JPA / Hibernate

Database

Oracle Database

Mapping

MapStruct

Boilerplate reduction

Lombok

Build tool

Maven

IDE

IntelliJ IDEA

Testing endpoint

GraphiQL

 

Backend functional requirements

Area

Requirement

Entities

ExpenseSheet, ExpenseLine

DTOs

Output DTOs, input DTOs, filter DTOs

Enums

ExpenseStatus, CurrencyCode, ExpenseType, PaymentMethod

Enum display

Each enum should have code and label

Repositories

JpaRepository + JpaSpecificationExecutor

Filters

Accumulative filters using Specifications

Pagination

Page-based pagination

Sorting

Backend sorting by selected column

Services

Business logic layer

GraphQL schema

Queries and mutations

Controllers

GraphQL controllers

Security

Allow GraphiQL and frontend access during development

CORS

Allow React frontend from localhost:5173

Scalars

BigDecimal and Date scalars

Transactions

Use @Transactional for write operations

 

Backend implementation steps

After passing the requirements to the AI agent, we execute the next steps and requesting for the different artifacts: 

Step

Description

Author

1

Create Spring Boot project in IntelliJ

Developer

2

Configure Maven dependencies

Developer

3

Configure Oracle datasource in application.yaml

IA

4

Create JPA entities from database

IA

5

Replace String fields with enums and converters

IA

6

Create DTOs

IA

7

Create MapStruct mappers

IA

8

Create Specifications for filters

IA

9

Create repositories

IA

10

Create services and service implementations

IA

11

Create GraphQL schema

IA

12

Create GraphQL controllers

IA

13

Register custom GraphQL scalars

IA

14

Configure CORS and temporary development security

IA

15

Test queries and mutations in GraphiQL

Developer

 

Then we would have a full functional backend with no errors:



01:25  Create the Frontend Application

The frontend is created as a React application using Vite.

Layer

Technology Requirements

Framework

React

Language

TypeScript

Build tool

Vite

UI library

Material UI

Grid component

MUI DataGrid

API client

Apollo Client

API protocol

GraphQL

Development server

Vite dev server

Backend endpoint

http://localhost:8080/graphql

 

Frontend requirements to pass to the AI agent

Area

Requirement

Main page

Expense Sheets dashboard

Main grid

Shows all expense sheets

Main grid actions

View, Edit, Delete

Sorting

Column sorting connected to backend

Filtering

Column or toolbar filters

Popup 1

Expense Sheet form dialog

Popup 1 content

Header fields and expense lines grid

Popup 2

Expense Line dialog

Popup 2 content

Expense date, type, description, VAT, amount, payment method, receipt

Master/detail

Expense Sheet owns Expense Lines

State model

Working copy in memory

Save behavior

Save Sheet commits header and lines together

Cancel behavior

Cancel discards local changes

Total amount

Updated provisionally in frontend

Backend total

Recalculated definitively on save

UI style

Enterprise, clean, responsive

Mobile support

Simplified mobile version

 

Frontend implementation steps

Then we continue executing step by step and reviewing the results returned by the AI, frontend is no so complex as the backend.

Step

Description

Author

1

Create Vite React TypeScript project

Developer

2

Install Apollo Client, GraphQL, MUI, MUI DataGrid

Developer

3

Configure Apollo Client

Developer

4

Create shared TypeScript types

IA

5

Create GraphQL queries and mutations

IA

6

Build ExpenseSheetsPage

IA

7

Add main dashboard grid

IA

8

Add View/Edit/Delete action buttons

IA

9

Create ExpenseSheetFormDialog

IA

10

Add controlled form state for sheet header

IA

11

Create ExpenseLinesGrid inside sheet popup

IA

12

Create ExpenseLineDialog

IA

13

Implement working copy of lines in memory

IA

14

Implement Add/Edit/Delete line operations in local state

IA

15

Recalculate provisional total in frontend

IA

16

Implement Save Sheet as one GraphQL mutation

IA

17

Implement Cancel Sheet as discard local state

IA

18

Refresh dashboard after successful save

IA

 

At the end we have a full functional application:



 02:00  Target Completion