Business travel system

An internal B2B system for a large corporate group: three dedicated experiences for the employee, manager and accountant, built on a shared design system.

View the prototype ↗
Business travel management system – main view
Title
Business travel management system
Industry
B2B / Technology sector
Role
UX Research, UI Design, collaboration with QA
Tools
Figma, Jira, usability testing with surveys
Date
October 2024 – September 2025
“Waiting for you” panel – manager dashboard

About the project

One app,
three completely different experiences

A year of end-to-end work: from diagnosing the old ERP and research, through designing three dedicated interfaces for each role, to rollout and usability testing with real feedback.

The project had an extra dimension: an AI-generated frontend for the first time in this team. I owned quality at the seam between Figma and code, so that what I designed actually reached users.

Product challenge

The employee, manager and accountant have completely different tasks and success criteria in a business-travel system. One interface for all three roles meant none of them got an experience matched to their needs. The key design decision was about architecture, not looks.

Technical innovation

The project was built with AI-generated code, a first for this team. Code came quickly, but brought discrepancies between the design and the generated interface. A design system with a token layer was the reference point that let us catch and fix those discrepancies before they reached users.

Scalability

The design system created for Koliber was designed from the start as a foundation for the group's entire software ecosystem, based on tokens. Fleet Management already runs on the same components. The HR module is in active development.

Outcome

Post-launch usability testing confirmed the key flow works. The results of the settlement scenario pointed to specific things to fix and set the roadmap for the next sprints.

Problem

The old system

Old system – view 1
Old system – view 2

The old system looked like an internal IT product from the 2000s. Tables with 10–14 columns required horizontal scrolling to see all the data. The travel request form had dozens of fields on a single screen, with no order logic, each section built differently. Above the table, 4–5 action buttons at once with no visual hierarchy showing which mattered more. The blue and green colors served no semantic function.

Employee

Calculated allowances in Excel and emailed confirmations. Every trip required filling in the form from scratch, even for the same route every week.

Manager

Didn't know how many documents awaited his decision without clicking into the list of all 450 records. The default view showed every document in the system with no highlight on the ones needing his decision.

Accountant

Checked the same manual-calculation errors over and over. Amounts had no breakdown by category, so to understand where a sum came from he had to call the employee.

The biggest problem wasn't in the visual layer but in the system's architecture: the same app served three groups of users with completely different tasks, priorities and definitions of success, treating them identically.

Research methodology and data synthesis

01

Heuristic evaluation

I went through all the key flows of the old system through the eyes of each role. Before I asked users “how much” something hurts, I knew “what and why” was broken. I mapped design-principle violations in each flow.

“4–5 action buttons at once, none more important than the others. The user has to decide what to click before they even know what they want to do.”

02

Stakeholder interviews

Project managers, product owners, business analysts. Two discoveries that changed the product architecture: employees often repeat the same routes, which can be used in the interface. Managers need an inbox with counters, not a rebuilt document list.

“We don't need to see all the trips. We need to see only the ones that require our decision.”

03

Post-launch usability testing

Three scenarios matching the key tasks of each role, with surveys, completion time and an intuitiveness rating. The data doesn't just confirm what works. It sets the roadmap for fixing what doesn't.

“The system reads the amount from the attached receipts itself.”

04

Jira Lifecycle Management

A continuous channel after launch: users reported problems, I discovered, documented and prioritized them in epics. Daily meetings with backend and frontend developers so every report reached the right sprint. Tests give a snapshot. Jira gives evolution.

Personas

Three roles, three definitions of success

Employee / Traveler

Employee / Traveler

“Do I have to calculate this in Excel again?”

Submits a request between meetings, often without a desk or full focus. Wants to choose tickets, hotel and car in one place, not jump between three modules. Wants the allowance calculated by the system, with no manual math. Definition of success: request submitted, trip approved, topic closed.

Manager / Approver

Manager / Approver

“I don't know how much I have to approve, I have to click to check.”

Approves requests between other tasks. The travel system is one of many tools in his workday. He needs a single glance: how many documents are waiting, of what type, what needs action. Definition of success: knowing what's waiting without searching lists.

Accountant

Accountant

“I check the same errors over and over, because employees calculate by hand.”

Verifies settlements, allocates costs to cost centers and projects. Every data error means a call, an email, a correction, a delay. Needs amounts broken down by category and confidence the numbers add up, without digging into the full trip context. Definition of success: verification finished with no questions to the employee.

Jobs To Be Done

What users want to achieve

Task

Submit a travel request in a few minutes

Before

Separate forms for tickets, hotel, car; context switching and repeated logins

After

Trip basket: one request, all components together

Task

Know what's waiting for my action

Before

No dedicated view; the manager searches a list of 450 documents

After

“Waiting for you”: an inbox with counters per type

Task

Settle a trip without Excel

Before

Allowances, per-diems and mileage calculated by hand, errors enter the system

After

Automatic calculations built into the form

Task

Attach a receipt from the phone on the spot

Before

Upload only from a computer; a restaurant receipt needs a file transfer

After

5 paths: computer / QR + AI / no attachment / mileage / per-diem

Task

Understand document status at a glance

Before

Tables with no visual status, the process stage hidden in a text column

After

Status as a chip + the process timeline visible on the right

Task

Verify a settlement efficiently

Before

Totals with no breakdown by category; where an amount came from has to be checked by hand

After

Allowances and per-diems / Employee expenses / Booking Center / Mileage

Architectural decision

One app, three products

The old system had one interface for three completely different users. The employee wanted to submit a request and close the topic. The manager wanted to know what awaited his decision. The accountant wanted to verify amounts without calling anyone. None of these tasks resembled the others.

Stakeholder workshops and an analysis of the old system showed the problem was architectural. The project took a direction: three dedicated experiences in one system, each designed for a single definition of success.

01

Employee / Traveler

  • A travel request isn't a task the employee devotes an hour to at a desk. He does it between meetings, often in a hurry, often from his phone. There's one goal: submit the request in a few minutes and forget about it.
  • The old system required switching between three separate modules: tickets, hotel, car. Each with its own form and its own approval path. Allowances and per-diems calculated outside the system, in Excel. Every trip was a project in itself.
  • After the change, the employee submits one form containing all the components of the trip, and the allowance and per-diem calculations are built directly into the system.
koliber.app
View for the role: Employee / Traveler
02

Manager / Approver

  • The manager handles several employees at once and juggles dozens of other tasks. The travel system is one of many tools in his day, not the center of his work. He needs to review requests and decide efficiently, not manage a document list.
  • The old view was a table with every trip in the system. To find what needed his decision, you had to filter, click and count. To know how much he had to do, you had to go in and check.
  • The new landing view is a dedicated “Waiting for you” panel with counters showing how many trips and how many company-car bookings await a decision, visible right after logging in.
koliber.app
View for the role: Manager / Approver
03

Accountant

  • The accountant needs support in settling trips not because he doesn't know the rules, but because the data he gets is inaccurate. Employees' manual calculations entered the system with errors. Every error is a call, an email, a correction, a delay. The same loop over and over.
  • The new view has a breakdown into four categories: Allowances and per-diems / Employee expenses / Booking Center / Mileage. Every amount has a source visible without asking the employee. The class of errors the accountant checked routinely disappears, because the system calculates instead of the employee.
  • Three dedicated views mean greater complexity on the development and maintenance side. That was a deliberate decision: a specialized interface for each role mattered more than simplifying the architecture.
koliber.app
View for the role: Accountant

Key design decisions

What I changed and why

Trip basket: a trip is one request, not three separate ones

Problem

The old system saw a trip as separate modules: train tickets, flight tickets, hotel, car rental. Each with its own form, its own approval path, its own context. An employee planning a week-long trip had to submit three requests that were connected nowhere.

Solution

One request form covers all the components of the trip: train tickets, flight tickets, hotel, car rental, in a single approval path. Allowance and per-diem calculations built directly into the form: the system calculates instead of the employee. The employee submits one request and closes the topic.

koliber.app
Trip basket: a trip is one request, not three separate ones

“Waiting for you”: an inbox instead of a list of 450 documents

Problem

The manager entered the system and saw a table with all trips: his own, approved and pending, plus trips of other managers within his permissions. All together, no division. To find requests awaiting his decision, he had to filter. To know anything was waiting at all, he had to remember to check.

Solution

A dedicated landing view built around one question: what awaits my decision now? Counters per module: how many trips, how many absences, how many HR requests, visible right after logging in. Approval can be done straight from the request card. Plus an in-app and work-email notification system. Clicking a request opens the full task view with a financial settlement broken down by category, comments and attachments, and a Camunda panel with the current process state and an action button.

koliber.app
“Waiting for you”: an inbox instead of a list of 450 documents

Automatic calculations and a personalized data view

Problem

Allowances, per-diems and mileage were calculated outside the system, in spreadsheets. Results pasted into the form, often with an error. The accountant caught those errors during verification and had to go back to the employee with a question, the employee corrected it, the cycle started over. The same error, the same loop, over and over. A separate problem: one default table layout for all roles meant everyone saw columns that didn't concern them.

Solution

Calculations built directly into the form. The system calculates allowances, per-diems and mileage in real time from the data entered in the request. The employee sees the amount, the accountant sees where each amount comes from, with no question to the employee. Plus a table with advanced filtering and the option to configure your own view: the user picks the columns they need, saves them as a named view and returns to them whenever they want.

koliber.app
Automatic calculations and a personalized data view

Design system and AI

Problem

Koliber was to be the first app in this team whose frontend was built with AI. Code came quickly, but didn't always look like the design. Without a shared reference point it was hard to say where something diverged and why.

Solution

A new design system was built for Koliber: a component library with a token layer defining colors, typography and spacing as named values. Tokens turned out to be the answer to the AI-generated-code challenge: the discrepancy between the design and the generated code became visible as a concrete, measurable difference. Prototypes in Figma Make began to appear for validating new solutions. The design system went beyond one project. Fleet was built on the same components and tokens, and the HR module is under construction.

koliber.app
Design system and AI

Interactive prototype

Try the system

Click around the interface, below is a working prototype built in Figma Make.

Measuring success

Post-launch usability testing

After launch I ran usability testing with surveys: three scenarios matching the key tasks of each role.

Travel request

The key flow held up in testing. Most participants got through the scenario without major trouble. But there were observations for further work: an unclear button on the request details view and a problem booking a flight ticket, which didn't behave as expected. Participants also raised a suggestion that came up in several responses: the option to enter the departure time directly in the request.

Survey results: Travel request

Vehicle booking

The shortest scenario, the cleanest result. Most participants finished it with no trouble: the simplified, separate flow worked. One point needing attention: the vehicle handover stage after booking was unclear. Participants knew the booking was submitted, but didn't know what should happen next or what to expect.

Survey results: Vehicle booking

Trip settlement

The hardest scenario. None of the participants finished it without trouble: some were blocked by a technical error on a specific test trip, some struggled with tooltips on settlement items that didn't expand on hover. On the plus side: participants noticed and openly appreciated the automatic reading of amounts from receipts.

Survey results: Trip settlement

The settlement results directly set the roadmap for the next sprint: fixing the technical error blocking the flow, improving tooltip behavior with item descriptions, clarifying the next steps after a vehicle booking. In parallel, users report issues and bugs through Jira, which I prioritize in epics and route to the next sprints.

Takeaways

What this project taught me

The heuristic evaluation and stakeholder workshops gave the answer before I designed anything new: the interface didn't need a refresh, it needed redesigning from the foundations. Three roles with three completely different definitions of success couldn't share one view and each get a good experience. That diagnosis set the direction for the whole project and preceded every design decision.

Post-launch usability testing brought two pieces of information. The key travel-request flow worked as it should. The settlement scenario revealed specific things to improve: a technical error blocking the flow, unclear tooltips with item descriptions, an imprecise message after a vehicle booking. Each of these points went into the next sprint's roadmap.

The design system created for Koliber proved itself in several contexts at once. As a component library it sped up work on subsequent screens and ensured visual consistency. With AI-generated code, tokens became a reference point that made the discrepancy between the design and the generated code visible as a concrete difference to catch before it reached users. Fleet already runs on the same components and tokens, and the HR module is under construction.