EASEMYTRIP · B2B CORPORATE TRAVEL · 8-PART CASE STUDY

One console, two very different jobs. Designing the EMTDesk admin and employee dashboards.

EMTDesk is EaseMyTrip's corporate travel platform — the B2B side of the business, where a client company's travel desk manages policy, employees, approvals and spend while its people book their own trips. The dashboard is the first screen both of them land on, and it has to serve a travel manager auditing ₹44.1L of spend and an employee checking whether their Kolkata flight got approved.

PRODUCT
EMTDesk Console
Corporate travel & expense, India
MY ROLE
Product Designer
Research with PM, IA, UI, handoff
ROLES SERVED
Admin · Employee
Travel manager, central booker, traveller
CONFIGURATIONS
With / Without Create Trip
Per-company module switch
EMTDesk dashboard case study cover
Fig. 01 — EMTDesk performance dashboard
01 / Context

What EMTDesk is.

A company signs up from the EMTDesk site, sets up its organisation, invites employees, and from that point everything happens inside the console. The dashboard is the hinge between the two halves of the product: booking on one side, governance on the other.

  1. 01
    Sign up

    A company registers from the EMTDesk site — organisation name, size, GSTINs.

  2. 02
    Configure

    Admin sets attributes, policies, entities and which modules are live.

  3. 03
    Invite

    Employees and guests are added, individually or by bulk upload.

  4. 04
    Operate

    Everyone lands on the dashboard — book, approve, monitor, report.

EMTDesk marketing site
Fig. 02 — Acquisition: one platform for travel managers, central bookers and employees
Employee booking home with performance dashboard
Fig. 03 — Booking home: search first, then milestones, offers and an organisation summary
02 / Problem

One dashboard, every kind of client.

Corporate clients arrive with wildly different setups — some have a dedicated travel desk and strict policy, some let employees book directly, some buy the platform but never switch on trip creation. One rigid dashboard could not cover that spread, and building a separate screen per client was not maintainable.

“How does one dashboard hold both an admin's governance view and an employee's own-travel view, and still adapt to whichever modules a client has actually bought?”
03 / Roles

Admin vs. employee.

Same grid, same widget language, different scope and different navigation. The admin sees the whole organisation and gets the governance items — User/Employee, Company Settings, Travel Policy, Reports. The employee sees only their own travel, and My Approvals carries a live count instead.

Admin dashboard with Create Trip enabled
Fig. 04 — Admin: organisation-wide, 14,000 bookings, ₹44,100 spend, 8,342 trips
Employee dashboard with Create Trip enabled
Fig. 05 — Employee: own travel, 4,000 bookings, 1,342 trips, 3 approvals pending
WHAT CHANGESADMINEMPLOYEE
ScopeWhole organisationOwn travel only
Headline numbers14,000 bookings · ₹44,100 spend · 8,342 trips4,000 bookings · 1,342 trips · 3 approvals pending
NavigationUser/Employee, Company Settings, Travel Policy, ReportsMy Approvals with a live count, My Trips, Visa
Job on the screenGovern, audit and reportBook, track and get approved
04 / Modularity

With / without Create Trip.

Create Trip is a module a company can switch on or off. That single flag changes the top of every dashboard, so I designed the header as two interchangeable strips rather than letting the page reflow: the trip-led entry point, or the direct product bar.

With Create Trip
With Create Trip — Trip-led entry

A full-width banner opens trip creation — the right start when a company books multi-service trips with approvals attached.

Without Create Trip
Without Create Trip — Product-led entry

The banner is replaced by a product bar — Flights, Hotels, Trains, Bus, Cabs — for companies whose people book single services directly.

05 / Grid

Anatomy of the grid.

Everything below the header is one repeating unit — title, delta, chart, export. Fourteen widgets, one contract, so a new report can ship without a new layout. The order runs from money to behaviour to exceptions.

MONEY

Spend and volume first

Three KPIs, then who and where the money went. This is the layer a finance review starts from.

Total Bookings · Total Spend · Total Trips · Top Users · Hotel Spends · Department Wise Spend

BEHAVIOUR

How people actually travel

Sector, airline, class and service mix — the inputs to any negotiation or policy change.

Top Sector · Top Airlines · Airline Class Overview · Service Wise Spend · Sector Wise ATPs · Booking Behaviour

EXCEPTIONS

Where value leaks

Cancellations close the page, because they are the thing an admin can act on this week.

Cancellation Percentage · Top Cancellation Sectors · Cancellation Patterns

KPI row
Fig. 06 — KPI row: value, sparkline, delta. The period filter governs every widget.
Right rail
Fig. 07 — Right rail: greeting, travel calendar, setup nudges, platform benefits
06 / SME

SME & EMTDesk Plus.

Enterprise clients arrive with volume; SMEs arrive with five people and no travel desk. For them the dashboard's problem is inverted — on day one there is nothing to report. So the same grid doubles as an activation surface: a milestone strip earns EmtCash, and completing it unlocks EMTDesk Plus — ₹449 worth of subscription benefits, free for 90 days.

SERVICE FEE

Flat 50% off — ₹100 down to ₹50 per booking.

FLIGHT CASHBACK

Flat ₹50 back on every flight booking.

HOTEL CASHBACK

Flat ₹100 back on every hotel booking.

BOOK HOTEL WITH ₹0

Zero-amount booking, cancel free up to 24 hours.

Day 1 · Locked
Day 1 · Locked — 0 / 5 milestones

Two stacked strips carry the whole activation story: five pending milestones with their EmtCash value, then the ₹449 benefit set sitting behind a Locked button. Below them every widget shows a skeleton with “No data available” instead of collapsing.

Unlocked
Unlocked — 5 / 5 · ₹850 EmtCash

Same two components, flipped in place: PENDING becomes COMPLETED, Locked becomes Unlocked, and ₹449+taxes is struck through beside ₹0 FREE. Nothing moves position, so the change reads as progress rather than a new screen.

Plus member
Plus member — Strips retire

Once membership is live both promotional strips disappear and the only trace is the PLUS lockup on the logo. Paid state is quieter than free state — the reward for converting is a cleaner screen.

Expiring
Expiring — 10 days left · ₹449

Renewal is argued, not asserted: Standard vs Plus in rupees, row by row, with price and CTA last. The countdown chip creates urgency inside the modal so the dashboard itself stays clean.

07 / Savings

Corporate savings.

Spend reporting tells a travel desk what left the company. Savings is the harder half — it has to prove what EMTDesk kept in. It sits at the foot of the admin dashboard as a four-tab block, with Corporate Savings first, and it is the one module whose contents depend on how the client has set the platform up.

Corporate SavingsSpend AnalysisTravel BehaviourCancellations
CLIENT SETUPLEVERS LIVESECOND PANEL SHOWSQUESTION IT ANSWERS
With travel policyPolicy + SmartFarePolicy Highlights — Budget 89%, Advance 82%, Cabin 91%Is our policy actually being followed?
Without travel policySmartFare onlySavings Breakdown — Flights ₹3.5L, Hotels ₹1.1L, Cabs ₹30kWhere is the platform saving us money on its own?
Hybrid modelBoth, reported separatelySavings Source — Policy ₹4.8L vs Smart Fare ₹3LWhich lever is doing the work?
With policy
With policy — ₹6,40,000 saved

Compliance is the proof. Three policy types are reported as percentages, so a travel desk can see which rule is weak — advance purchase at 82% here — rather than only the total.

Without policy
Without policy — ₹6,40,000 saved

With no rules to measure against, the panel switches to where the fare engine earned it — flights, hotels, cabs in rupees. It also becomes the argument for setting a policy up.

Hybrid
Hybrid — ₹7,80,000 saved

Both levers reported side by side — ₹4.8L from policy, ₹3L from SmartFare. Two numbers that add to the headline, which is what makes the total defensible in a finance review.

PLACEMENT

Savings closes the dashboard rather than opening it. Spend answers “what happened”; savings is the conclusion you reach after reading it.

CONSTANT FRAME

Savings Generated tile, donut and category table never move — only the second panel changes, so the module stays recognisable across setups.

TWO UNITS, ONE STORY

The donut carries the ₹6.4L total; the table repeats it as amount and percentage per category, for people who read tables and people who read shapes.

CATEGORY COLOUR

Flights, hotels, cabs and bus keep the same four hues everywhere in the module so the donut and the table can be read together.

EXPORT

Export as Excel stays on the module, because travel desks forward savings to finance rather than screenshot it.

HONEST CLAIMS

A setup with no policy never shows a compliance number. The module only reports levers the client has actually switched on.

08 / Create Trip

One form, three booking types.

Create Trip is where governance actually begins. Instead of booking a flight and attaching approval to it afterwards, the user opens a trip first: purpose, dates, billing entity, travellers. Everything booked later — flights, hotels, cabs, visa — hangs off that trip, which is what makes approvals, cost allocation and missed-savings reporting possible downstream.

BUSINESS

An employee travelling on company work, billed to a business entity and run through policy and approvals.

GUEST

A candidate, client or contractor the company is flying in — not an employee, but company-paid.

PERSONAL

An employee using the corporate platform for their own travel, so they get the rates without charging the company.

Trip Details

Booking type, trip name, dates, purpose of travel and description, business entity, billing entity. Which fields appear and which are mandatory comes from Create Trip Configuration, so each client's own purpose list and cross-billing rules drive the form.

Traveller Details

Adult / child / infant counts, then one card per traveller with title, name, date of birth, phone and email. Counts drive cards, so a four-person trip is built by stepping a number rather than by repeating a form.

BUSINESS · Employee, company-paid

The baseline form. Purpose of travel and purpose description carry the justification an approver reads; business and billing entity decide which books the cost.

Traveller card has no Type of Travel — everyone on a business trip is an employee.

Business trip details
Business — trip details
Business traveller details
Business — traveller details
GUEST · Non-employee, company-paid

Trip Details gains a mandatory Requested By, because a guest cannot be their own accountable owner — an employee has to stand behind the spend.

Adds Requested By* · Type of Travel locked to Guest.

Guest trip details
Guest — trip details
Guest traveller details
Guest — traveller details
PERSONAL · Employee, self-paid

Structurally identical to business so employees do not learn a second form, with Type of Travel shown as Employee to make the distinction explicit on the record.

Same fields as Business · Type of Travel = Employee.

Personal trip details
Personal — trip details
Personal traveller details
Personal — traveller details
BOOKING TYPEEXTRA FIELDTRAVELLER CARDWHY
BusinessTitle, name, DOB, phone, emailPolicy and approval apply; traveller identity is already known to the org
GuestRequested By (mandatory)Adds Type of Travel = GuestSpend needs an internal owner even though the traveller is external
PersonalAdds Type of Travel = EmployeeKeeps personal bookings separable from company spend in every report

After submit — pending for approval

The trip is created and every service on it goes into one confirmation view: status first, then flight, hotel, traveller list, fare breakup and documents. Ticket and PNR columns stay blank until approval clears — the screen never implies a booking that has not happened.

Status first
Status first

One amber banner states “Booking Request is Submitted & Pending For Approval” above everything else, so nobody has to guess whether they are booked.

Service tabs
Service tabs

Flight and Hotel are tabs on one trip rather than separate confirmations — the same shape the trip was created in.

Empty by design
Empty by design

Ticket No and PNR hold “---” until approval clears. No placeholder that could be mistaken for a ticket.

Next step offered
Next step offered

Fare breakup, Add Service and Go To Trip sit in the rail, so the trip keeps growing without returning to Create Trip.

09 / Operations

Approvals & trip operations.

Once a trip is created it enters a queue. The approver has to clear it, the traveller has to watch it, and the travel desk has to own it. Rather than design three screens, I designed one row — trip ID, traveller, product icons, requested-on, travel date, status — and changed only the columns and the action each role needs.

SCREENWHOSE VIEWCOLUMNS IT ADDSDECISION IT ENABLES
My ApprovalsApprover — manager or financeApproval Status, travel-date and status filters, bulk downloadClear or reject requests without opening each trip
My TripsTraveller — their own recordBusiness / Guest / Personal tabs, product and booking-date filters, StatusKnow where my own trip stands
Trip CentreTravel desk — everything in flightAssignee, Assign To, Priority, ActionOwn the queue: who is handling what, and first
My Approvals
My Approvals — The approver’s queue

Filters come first — travel date, approval status, and a search that accepts request ID, trip name or booking ID, because approvers are usually chasing one specific request someone pinged them about.

Product icons instead of text: a row shows flight + bus + hotel at a glance.

My Trips
My Trips — The traveller’s own list

Booking type becomes tabs here rather than a filter, because Business, Guest and Personal are how a traveller thinks about their own history. Everything else matches the approvals table.

Status runs Draft → Open → Closed — trip lifecycle, not approval state.

Trip Centre
Trip Centre — The travel desk

The operational view: the same rows plus ownership and urgency. Priority is the only place in the module where colour is used for ranking — High red, Medium amber, Low blue — and an Assign button ends each row.

Draft rows carry no assignee or action: nothing to work until submitted.

Assign action
Assign action — Two fields, nothing more

Assigning a request is the most repeated action on Trip Centre, so it is a modal with exactly two required fields — who owns it, how urgent it is — and one Save. No navigation away from the queue, no partial states to clean up.

ONE ROW MODEL

Trip ID, traveller, products, requested-on, travel date. Learn it once on approvals and Trip Centre reads instantly.

MULTI-TRAVELLER COMPRESSED

“Rahul Puri +1” with a hover naming the second traveller — the row stays scannable without hiding who is flying.

BULK FROM THE LIST

Bulk download sits on every table, because travel desks reconcile in spreadsheets, not row by row.

FILTERS OVER TABS

Approvals filters by status; My Trips tabs by booking type. Tabs are for identity, filters are for state.

PRIORITY IS A DECISION

Colour appears only on Priority. Status stays neutral so urgency is the thing that catches the eye.

EVIDENCE ON THE TRIP

Out-of-policy flags, missed savings and approver history live on the trip detail, so this queue can stay a list.

10 / Configuration

Company attributes & configuration.

A conglomerate is not one company: a parent sits above several subsidiaries, each with its own departments, cost centres and rules. Company Attributes defines the data model per entity; Configuration switches modules on per entity. Every toggle changes a field somewhere a traveller will see.

Attribute, on
Attribute, on — Department expanded

A switched-on attribute reveals three things in order: display name, the add form, and the existing listing. Configuration Type, Show On and Applicable For sit on one line because they are the three questions that decide whether a traveller ever sees this field.

Model
Model — Six attributes, all collapsed

Collapsed rows show the whole data model on one screen — Designation, Grade, Cost Centre, Project Code, Base Location — so an admin decides what to use before filling anything in.

Custom
Custom — Add Custom Attribute

Custom attributes get everything the built-ins have plus two of their own: which products they apply to, as removable chips, and whether they render as a text box or a dropdown.

Guardrails
Guardrails — Low fare search & whitelisted domains

Two policies that are not attributes but belong to the entity: whether low-fare search is enforced, and which email domains may log in at all. Both are single decisions, so both are single rows.

Hierarchy
Hierarchy — Entity tree

Child entities are collapsed rows connected by a spine, each carrying its own full attribute set. Configuration is per entity, not per account — which is what makes cross-billing meaningful later.

Modules
Modules — Configuration switchboard

Seven module cards per entity, each a doorway rather than a setting: email configuration, offline forms for hotel and train, Create Trip, handbook, and missed savings for flight and hotel.

Drill-in
Drill-in — Create Trip Configuration

Behind one of those cards: the purpose-of-travel list a client maintains itself, with applicability per booking type and mandatory / optional per field.

Rules
Rules — Purpose description & cross-billing

Two remaining toggles decide whether justification text is compulsory, and whether one entity may bill another — the switch that makes Billing Entity a dropdown instead of a fixed value.

Set here → changes there

SET HERECHANGES THERE
Purpose of Travel listThe Purpose Of Travel dropdown in Create Trip — client-owned vocabulary, not ours.
Configuration Type: mandatoryThe red asterisk and the validation on that field for the booking types it applies to.
Applicable For: Business / Personal / GuestWhether the field appears at all on each of the three Create Trip forms.
Show On: employee profile / pax pageWhether the attribute shows on the traveller record and on the passenger page at booking.
Enable Cross Billing EntityBilling Entity becomes selectable, so one entity can carry another entity’s cost.
Whitelisted email domainsWho can sign in at all — the first gate before any of the above matters.
11 / People

People & profile.

Adding an employee means answering four separate questions, only one of which is “who are they”. The other three — which policy binds them, who approves their trips, and who may act on their behalf — are what turn an account into a governed traveller. The profile is the other half: the record the traveller maintains so a ticket can be issued without a phone call.

TABQUESTION IT ANSWERSWHAT BREAKS WITHOUT IT
Employee DetailsWho is this person, and how are they tagged?Bookings cannot be allocated to a department, cost centre or entity.
PolicyWhat are they allowed to book?Every fare is in-policy by definition, so there is nothing to flag or save against.
ApprovalsWho signs off, in what order, by when?Requests reach the Trip Centre with no owner and no deadline.
Corporate SecretaryWho can act for them?Executive assistants book from personal accounts and the trip leaves the system.
Where it starts
Where it starts — User / Employees list

The same grammar as every other table in the product — entity filter, one search field, bulk upload and bulk download — plus a Status pill that is the only column an admin regularly changes.

Employee details
Employee details — Four columns, sixteen fields

Only five asterisks. The rest — Cost Centre, Grade, Project, Base Location — are the configured attributes, appearing here as dropdowns rather than free text so the data stays reportable.

Policy
Policy — Two dropdowns and nothing else

Travel Policy and Expense Policy are both optional, because a company can run EMTDesk with no policy at all and still get approvals.

Approvals
Approvals — Up to three managers in sequence

Each with a Priority and a Max Time in Minutes. Time is per approver, not per request, which is what lets a stalled trip escalate instead of sitting silent.

Corporate secretary
Corporate secretary — Delegation as two toggles

May this person book for the employee, and may they approve on their behalf. Assigning a secretary is mandatory here — the permissions are not.

Personal information
Personal information — The traveller’s read-only half

Sixteen fields in the same four-column rhythm as the admin form, but muted and read-only — the traveller can see how they are classified without reclassifying themselves.

Preference & documents
Preference & documents — Expiry over upload

Seat and meal sit above documents deliberately: the light, frequently-changed choice first, then passport, visa, frequent flyer and vaccination — each with its own expiry date.

12 / System

System & handoff.

Two brand colours, one typeface, one radius, one border. EMTDesk spans a marketing site, an SME activation flow, a booking engine, an approvals desk and a configuration console — the only way that stayed coherent was to make the system small enough that nobody needs to consult it.

#14C595
Primary

CTAs, active states, key interactive elements

#DCAA3B
Primary — earned

EmtCash, Plus, savings and rewards

#EFFFFB
Surface

Page backgrounds behind every card

#111419
On-surface

Primary text and dark fills

#7C8183
On-surface muted

Labels, placeholders, disabled state

#FF0000
Error

Validation errors and destructive actions

Three marks, one typeface
Foundations — Three marks, one typeface

EMTDesk, EMTDesk Plus in green and EMTDesk Plus in amber — the same wordmark carrying the tier. Poppins at three sizes only: 20 bold, 18 semibold, 16 regular.

Poppins type scale
Type — Poppins type scale

Three steps only. A dense console does not need a display size, and capping it stopped hierarchy inflation.

Rounded 7px, primary is brand green
Buttons — Rounded 7px, primary is brand green

One radius across the whole product. Filled green for the single action, outlined for the alternative, amber only where the action concerns money.

7px border, subtle surface-variant background
Inputs — 7px border, subtle surface-variant background

Text, dropdown, search, calendar, disabled, password and multi-select all share one frame — a single input spec removed most of the visual decisions downstream.

Filled, underlined and pill
Tabs — Filled, underlined and pill

Three tab treatments with fixed jobs: filled pills switch modes inside a modal, underlined tabs switch content on a page, plain pills filter a list.

Badge, tooltip, alert, selection
Feedback — Badge, tooltip, alert, selection

Status is always a pill, never coloured text — which lets Draft, Open, Closed, Active, Inactive and Pending read the same way in six different tables.

One outline set, one filled set
Icons — One outline set, one filled set

Sidebar, action and product icons at a single stroke weight, plus the airline and payment marks that have to be recognisable rather than consistent.

Composed blocks, not just atoms
Library — Composed blocks, not just atoms

Calendar, savings tiles, password strength, entity tree, toggle rows, promo cards — a new screen is arranged from known parts instead of rebuilt from buttons and inputs.

One table, many jobs
Tables — One table, many jobs

Filter bar, header row, status pill, kebab action, plus invoice and fare-breakup blocks. My Approvals, My Trips, Trip Centre and User/Employees are the same table with different columns.

The dashboard widget kit
Graphs — The dashboard widget kit

Metric tiles, bar, line, donut and progress rings — number formatting and currency treatment fixed in the component rather than decided per chart.

RULEVALUEWHY IT HOLDS
Radius7px everywhereButtons, inputs, cards and pills share it, so nothing looks borrowed from another product.
Type scale20 / 18 / 16 pxThree steps only. A dense console does not need a display size.
TypefacePoppins, 3 weightsBold, semibold, regular. Weight carries hierarchy so size does not have to.
Green#14C595Actions and confirmations only — never decoration, never a background wash.
Amber#DCAA3BMoney the user earns: EmtCash, Plus, savings.
StatusPill, not textConsistent target size and consistent reading across every table.
Currency₹ + Indian grouping₹4,80,000 not ₹480,000. The audience is Indian finance teams.
ONE SHEET

The full system on a single artboard — logo through graphs — so an engineer scrolls rather than searches.

STATES INCLUDED

Disabled, focus, error and empty are drawn, not described.

COMPOSED BLOCKS

Assembled patterns beside atoms, so the handoff answers “what does a filter bar look like”.

WIDGET CONTRACT

Every dashboard tile has a fixed anatomy — label, value, delta, icon — so new metrics need no new design.

CONFIG-AWARE

Forms were specced as field lists driven by configuration, so engineering built one Create Trip, not three.

REAL CONTENT

Every mock carries plausible Indian names, fares and PNRs — no lorem — so density problems surfaced in design.

Thanks for reading.

← back to all work