Home/Projects/iTravelle

B2B SaaSTravel tech Design systemEnterprise UX2026

iTravellé — the operating system for luxury travel businesses.

Independent travel advisors run an entire agency from one place: inventory, AI proposals, bookings, finance, partner operations. I led product design end to end — strategy, research, architecture, design system, every core screen, developer handoff and the brand film.

Brand film — 43 secondsWritten & directed by me
Role
Product Design Lead
Timeline
Jan – Aug 2026
Team
4 designers I led
Surfaces
4 products, 16 modules
Client
iTravellé, Dubai
Live
itravelle.com ↗
iTravelle partner dashboard shown on a laptop — leads, revenue and pending commission at a glance
Partner Dashboard — the screen an agency opens every morning.

The problem

Operators live in this product all day, and it overloaded them: one dense table doing every job, long pages that had to be scrolled end to end, journeys that broke between steps, and no sense of where you were in any multi-step process.

What I did

Ran real tasks through the live product and logged every point of friction, then fixed them: four views over the same data, an interactive map into Lexis, in-page tabs, browser-style lead tabs, progress on every flow, and guided booking and finance journeys.

The outcome

Nine headline UX optimisations across four surfaces, plus a shipped public platform and a fully specified partner ecosystem: 42 artboards, 16 modules, a WCAG 2.1 AA design system, and every screen state defined before build.

4Product surfaces designed as one system
16Modules across 4 internal departments
9User roles with different permissions
3,000+Hotel partnerships surfaced in inventory

Four surfaces, one product

An advisor selling a two-week itinerary was pricing across three currencies by hand, chasing suppliers by email, building proposals in a document and reconciling commission weeks later. iTravellé collapses that into one workflow — and its own claim is blunt: reduce more than 90% of travel management effort.

  • Public site & KYC — acquisition and qualified intake
  • Partner Portal — leads, trips, proposals, inventory, finance
  • Operator & Finance — pricing, suppliers, invoicing
  • Lexis — the MICE master database everything else depends on
System map: Public Site and KYC, Partner Portal, Operator and Finance, and the MICE database around one connected core

Nine problems I solved

Travel operators live in this product all day. Almost every problem worth solving came down to the same thing: too much information, too little orientation, and journeys that broke halfway through. These are the nine that moved the needle most — there were many more.

Group 01 Seeing the data without drowning in it — cognitive load
Leads List with List, Kanban and Trip view options and several leads open as tabs
01

Four views over the same data

Problem. One dense table was being asked to do every job at once — scanning status, tracking a single trip, comparing records side by side. Everything looked equally important, so nothing did.

What I did. Table, Kanban, Trip and List views over the same records. Table to compare, Kanban to see status move, Trip view to follow one journey end to end, List to scan quickly. The user picks the shape that fits the task instead of reading around the three that don't.

Lexis interactive map — a continent selected, with countries, cities, hotels, suppliers and restaurants listed beneath
02

An interactive map instead of an endless list

Problem. In Lexis, the MICE master database, finding a hotel, restaurant, attraction or airport in a particular place meant scrolling thousands of rows and filtering blind. The question was spatial; the interface was a list.

What I did. Made the map the entry point. Click a location and get exactly what's there, filtered by category. A spatial question now gets a spatial answer — no scrolling through bulk lists to reach one city.

Group 02 Getting around without endless scrolling — orientation
A record page sectioned behind horizontal tabs
03

Horizontal tabs inside the page

Problem. Record and detail pages ran long. Users scrolled continuously, lost their place, and had no way of knowing how much was still below them.

What I did. Sectioned every long page behind horizontal tabs. Nothing sits below a scroll, everything is one click away, and the tab row itself tells you what the page contains before you open anything. The page you're reading uses the same pattern.

Several leads open at once as browser-style tabs
04

Leads as browser-style tabs

Problem. Partner ops work several leads at once, but the portal made you navigate away and back for every switch — losing your place, and sometimes your work, each time.

What I did. Open leads sit in a Chrome-style tab strip across the top. Several stay live at once and switching costs one click instead of a round trip through the list. It borrows a pattern every user already knows, so it needed no explaining.

Back control and breadcrumb navigation on a deep record screen
05

Back and smart navigation everywhere it's needed

Problem. Dead ends. Users reached deep screens with no way back except the browser button, which frequently threw away what they'd entered.

What I did. Explicit back controls and contextual navigation on every screen that needs one — each returning to the exact place, and the exact state, the user left. Breadcrumbs on deep records, previous/next between sibling records, and a persistent way out of every flow.

A multi-step flow showing which step the user is on and how many remain
06

Progress indicators on every multi-step flow

Problem. Multi-step processes gave no sense of position. Not knowing how many steps were left is one of the most reliable causes of abandonment there is.

What I did. A progress indicator on every multi-step flow, naming the current step and how many remain. Knowing you're on step three of five turns an open-ended task into a countable one — and people finish countable tasks.

Group 03 Getting to a confirmed booking — transactional flows
Hotel detail with a running Your Stay summary carried alongside the booking step
07

Hotel and restaurant booking, guided end to end

Problem. The booking journey broke between steps. Users lost the thread and had to reconstruct where they were and what they'd already chosen before they could continue.

What I did. A guided flow that carries context forward. Every step shows what's been selected so far, what this step needs, and what comes next — right through to confirmation. The journey is never dropped between screens.

Flight booking review screen before confirmation
08

Flight booking with a real review step

Problem. Flight selection is the highest-stakes and least reversible action in the product, and it was possible to confirm without a clear final check of what you'd chosen.

What I did. An explicitly guided sequence that names the next step at every point, ending in a full review-before-confirm screen with every selection editable in place. Mistakes get caught while they're still cheap.

Finance dashboard — receivables, payables, cash position and recent ledger movement
09

Quotations and invoices that can actually be amended

Problem. Price changes are constant in travel. Amending a quotation meant rebuilding it, and margin, markup and commission were being worked out in spreadsheets outside the system.

What I did. Editable quotations and invoices with saved drafts, plus profit, margin, markup and commission calculated in-product and recalculated on every amendment. A client asking for a change became an edit, not a rebuild.

And the ones not shown here

These nine are the headline optimisations. Alongside them: consistent loading, empty and error states across every module; structured field types replacing free-text entry; commercial data gated by role; inline entry flows that return you where you were; and a single navigation and badge system applied across all sixteen modules. Those sit under Approach and The work.

How I found them

Not from a brief. I worked through the live product as the operators do — logging in, running real tasks end to end, and writing down every point where I lost my place, lost my work, or couldn't tell what to do next.

That produced a defect log with evidence attached rather than a list of opinions, which is what made the fixes easy to argue for and easy to prioritise.

The underlying data defects — what was breaking beneath the interface

Several of the interface problems above had a cause one layer down. The audit turned up six structural defects in the data layer, all traceable to one thing: storage, access and presentation had collapsed into a single layer, so the raw table was the interface for every user.

Raw storage IDs shown to usersA supplier record displayed recRNIqEFMGg3m9jK instead of a country name.a Destination Reference type that always resolves
8–10 seconds of “Loading… 0”The Countries view fired 10 sequential API calls before rendering anything.progressive skeletons and a visible count
Concatenated dataCurrency stored as one string: ALL | Albanian Lek | L.a structured Currency type — code, name, symbol
Multi-value overflowSupplier rows truncated to “+5 more”, breaking row rhythm.a fixed-height chip component with inline expand
Noisy empty statesA full filter toolbar rendered above “0 records”.single-line empty states
Entry flows broke context“Add Supplier” opened outside the list the user was in.inline drawer flows that return you where you were

What I kept, deliberately: the grouped record-detail pattern that already worked in one module, the field-level revision history already logging who changed what with before/after values, and the domain-relevant filters the team had got right. Naming what to protect is as much of the job as naming what to fix.

Roles and data first, screens second

In a permissioned B2B system, layout is downstream of who is allowed to see what. I drew nothing until that was settled.

01

Audit & frame

Logged into production, documented defects with evidence, reframed the brief from “make it prettier” to “separate three collapsed layers”.

02

Map the actors

Nine user types, four journeys, every step mapped to an access level — a live workbook I walked the client through.

03

Architect

Defined the storage / access / presentation split, the custom field-type library, and the structure all 16 modules share.

04

Design & specify

Greyscale zones → hi-fi on tokens → all four states per component → a written UX specification.

05

Hand off & hold

Annotated Figma, specs, and an accessibility checklist that gates approval. Stayed in review through build.

The decision that shaped everything

The obvious move was migrating off the no-code base onto a “proper” platform. I argued against it in writing, and the client agreed.

A migration would have burned the timeline, risked live data across 139 countries and a growing supplier base, and fixed nothing structural — the same flat model would have been rebuilt somewhere more expensive.

Instead: keep the schema, govern who can create and see fields, build task-specific views on top. Cheaper, faster, and it addresses the actual cause.

Nine roles, one wall that can't break

Partners must never see cost, markup or profit. That single rule governs what every screen renders.

I built the role model as a working artefact, not a slide: one tab per actor, every step of their real flow, and an access level per sub-user — Full, View only, No access, Approval needed, Own data only, or explicitly To be confirmed.

Marking cells “TBC” instead of guessing was the highest-value thing in the document. It surfaced six real open questions before they became rework in build.

Six reference products, each studied for one lesson
  • NocoDB — spreadsheet feel over a governed relational database. Proof that “same feel, better foundation” is achievable.
  • Baserow — deeper native field types than a generic grid. The case for a domain-specific field library.
  • Teable — the closest philosophical sibling; patterns for structured sub-fields.
  • Retool — the access layer specifically: query-level filtering plus component-level role gating.
  • Stacker — turning a spreadsheet base into a role-gated portal without a platform rebuild.
  • Pencil & Paper, Data Table UX Patterns — column layout, row actions, density and overflow.
Aesthetic references — where the visual position came from
Four Seasons and LVMH brand films for restraint and pacing; Emirates for aspiration without gloss; Bloomberg and Goldman Sachs product spots for making dense financial data feel premium rather than clinical; Apple cinematics for the discipline of showing one thing at a time. The position that came out of it: quiet luxury — deep navy, champagne gold, ivory, generous whitespace, typography doing the work.

A system with reasons, not preferences

I wrote the type specification as a standalone document. Every size has a rationale, every rule maps to a WCAG criterion, and the client can hand it to any future developer without me in the room.

16px = 1rem, alwaysRoot at 100%, every size in rem so text scales with browser settings. Never below 16px for body, 14px for anything, 10px anywhere.
rem, not pxpx pins text and fails the spirit of WCAG scaling even when it technically passes.
Survives 200% zoomWCAG 1.4.4 AA — no horizontal scroll, no loss of content or function. Tested before sign-off, not after.
Contrast is non-negotiable4.5:1 body, 3:1 large. Navy #1B3A5B on cream #F7F3E9 passes. Gold on white is 2.5:1 — so gold never carries body text, only sits on navy.
Four weights, no more400 body, 500 emphasis, 600 headings and buttons, 700 display. Constraining the palette is what keeps a multi-designer team consistent.
Rules that protect usersVisible labels above every input, never placeholder-as-label. Consent copy never below 14px. 44×44px touch targets. Visible focus on everything.

Two scales, one family

The landing page uses a 1.250 major third with an 18px body — easier for an advisor audience skewing over 45. The KYC form uses a calmer 1.200 with a hard 16px floor on inputs, which also stops iOS Safari auto-zooming on focus.

Tokens, not values

Colour, spacing, radius and type all live as named tokens. A designer changing a hex in one place is a system; a designer changing it in forty is a liability.

Accessibility as a gate

The WCAG checklist isn't an appendix — handoff isn't approved until it passes. Criterion by criterion, with the specific trap named for each.

The work

Four surfaces, one system. Pick any of them.

The first screen an agency sees after login, every day. The brief I set: orient the user in under five seconds and let them decide what to do next without navigating anywhere. Six vertical zones on a 12-column grid inside a persistent shell.

ZoneSectionSpanJob it does
Z1Header & greeting12Orientation, period context, partner tier
Z2Alerts12Time-sensitive actions above the fold — hidden entirely when there are none
Z3KPI cards3 × 4Bookings, active clients, MTD revenue, pending commission — each with a delta
Z4Revenue + commission8 + 4Six-month trend, and the next payout — the most motivating number on the page
Z5Recent bookings12Last 10; row click opens a drawer, never a page change
Z6Quick actions12Five shortcuts, shown or hidden by role — no greyed-out dead ends

Lexis, the MICE master database — the biggest workstream: 42 artboards across four departments. The visual brief was blunt — the old system's worst flaw was that different modules looked like different products. Everything here shares one navigation, one badge system, one record pattern.

Lexis Countries gallery — 259 records with quick filters and inventory tabs across the top

Six custom field types, not generic inputs

Generic field types caused the concatenated currency and the broken lookup. Each replacement has its own control, validation and display — plus a governance rule that only a data steward can create new types, which is what stops the sprawl returning.

Field typeBehaviourDefect it retires
Destination ReferenceStructured Continent → Region → Country → City; always resolves to a readable value.Raw record IDs surfacing to operators
CurrencyThree independent sub-fields: code, name, symbol.ALL | Albanian Lek | L as one string
Contract StatusLifecycle state — Draft, Active, Expiring, Expired.Contracts expiring unnoticed
Validity WindowPaired dates with expiry proximity — “Expires in 12 days”.Stale rates used in live pricing
Supplier TypeGoverned category list seeded from tags already in use.Ad-hoc categorisation
Document AttachmentTyped by purpose — visa, insurance, company profile.Untyped file dumps

The audience is an experienced professional deciding whether to bet their business on a platform. Establish credibility fast, answer the obstacles they already know they have, and make committing feel like a beginning rather than a purchase. One CTA, repeated.

Partner intake is regulated, which usually means a long hostile form. I treated it as the first product experience instead — shrinking legal text is both an accessibility barrier and a compliance risk.

Most handoffs ship one state and let engineering improvise the rest. The improvised ones are exactly where products feel broken — so I specified four for every zone.

Loading

Skeletons per zone, not a page spinner. The shell renders immediately; widgets fill independently.

Empty

A new partner sees “—”, never “0”, plus one clear action. Quiet and single-line, not a toolbar over nothing.

Error

Widgets fail independently: inline message plus retry. One failed call never takes down the dashboard.

Populated

The primary target, with every hover, focus and active state drawn rather than assumed.

The clickable prototype

Built at breadth rather than polish — enough screens across all four departments to prove the pattern generalises, with a live role switcher so stakeholders could feel the permission model instead of taking my word for it.

Product design didn't stop at the interface. I wrote and directed the brand film — a problem-to-resolution arc from the advisor's daily frustration to the product resolving it. The delivered cut runs 43 seconds.

43 seconds. Written and directed by me; produced from my scene-by-scene script and storyboard.

Six key frames from the brand film in sequence
Key frames across the film — proposition, product reveal, inventory, finance, close.

How I structured it

A problem-resolution narrative, not a feature list. The colour grade carries the story: scene two is deliberately cool and desaturated, and it warms into champagne gold from the reveal onward. The viewer feels the shift before they read a word.

Three documents made it survive production: a scene-by-scene generation prompt with motion and infographic direction, a visual-only cut with no on-screen copy for footage generation, and a client approval script with a per-scene sign-off table. Production didn't start until that came back signed.

The 10-scene script I wrote for client approval

The approved script ran to ten scenes; the delivered cut condenses them into 43 seconds.

  • 01 Opening — aerial resort, the advisor at her desk.
  • 02 The problem — scattered tools. Cool, desaturated.
  • 03 The reveal — the platform appears; the grade warms.
  • 04 Inventory — globe, destination pins, the scale she now has.
  • 05 AI — a proposal building itself in real time.
  • 06 Finance — ledgers and reconciliation, premium not spreadsheet.
  • 07 Portal — twelve capabilities as a rapid icon-grid build.
  • 08 Support — the emotional beat; warmest grade in the film.
  • 09 Perks — the reward made tangible, in slow motion.
  • 10 Close — Dubai at dusk, logo, one line.

The team I led, and how it reached engineering

Design that can't be built is decoration. I wrote specs engineers could implement without me in the room — and stayed in review through build.

PersonDisciplineWhat they ownedHow I led them
NameUI DesignerSecondary module screens from my defined patternsDaily async Figma reviews; I set the component rules, they applied and extended them
NameJunior Product DesignerEmpty, loading and error states; icon setPaired on the first two, then handed over with a written state checklist
NameMotion / VideoFilm production from my script and storyboardScene-level direction, two rounds of cut review before client sign-off
NameContent / CopyLanding page and KYC microcopyWrote the voice rules and reviewed every string against them
Amal (client)Product OwnerBusiness rules, commercial model, sign-offWeekly sessions; I brought decisions rather than options, and logged every open question
Written UX specificationZone-by-zone layout with exact spans, spacing, type tokens and colour values — versioned, dated, with a named author.
Every state, drawnLoading, empty, error, populated for each component, so nothing gets improvised in code.
Data & API requirementsPer section: what data, what refresh rate, what edge case — “if no pending commission, show '—' not '0'”.
Interaction micro-specsSidebar collapse 200ms ease-in-out. Drawer 480px. Toasts auto-dismiss at 4s, max 3 stacked.
Accessibility checklistCriterion by criterion, with the specific trap named — as a handoff gate, not a footnote.
Open questions registerNumbered, with impact, owner and status. Unknowns tracked in the open rather than guessed.

Design calls with technical reasons

The loading fix needed a backend change, not a frontend one. I said so in the document and flagged it to the API owner rather than speccing an animation to paper over a fetch-all pattern.

Reused what existed

Revision history was already in production. I built governance on top of it instead of speccing change-tracking from scratch — weeks of engineering time not spent.

Blocked on the right things

Six open questions were logged as blockers on spec lock. Everything not blocked was designed in parallel rather than waiting.

Named the known gaps

Mobile for the v1 dashboard was documented as a deliberate gap with a recommendation, not quietly omitted. Stating a limit is what makes the rest of a document trustworthy.

Stayed through build

Your build-phase rhythm: review cadence, how you handled implementation questions, whether you QA'd against the spec.

One source of truth

Your file structure and versioning: how engineers knew which frame was current, how changes after handoff were communicated.

Outcomes

42Artboards delivered across 4 departments
8–10sBlank loading state identified and designed out
6Production defects found and resolved by design
AAWCAG 2.1 built into the handoff gate

What it produced

  • A live public platform built on the design system I authored.
  • A partner ecosystem specified end to end — every role, screen, state and data requirement documented before build.
  • A typography and accessibility spec the client now applies across all product surfaces.
  • A brand film approved scene by scene, with the approval process itself designed.
  • A structural argument that avoided an expensive migration and protected live operational data.

What I'd do differently

I recommended validating the redesigned flows with real travel operators performing actual tasks — and that testing sat later in the plan than it should have. On a system where the users are a small, reachable, expert group, I'd run that validation in parallel with the architecture work rather than after it. The architectural call was sound, but it was defended with audit evidence and benchmarks rather than by watching an operator try it.

I'd also push earlier on measurement. The defects were documented rigorously; the baseline metrics to prove the fix worked weren't captured with the same rigour at the start.

Need a platform designed this way?

Tell us the problem and we will recommend a scope, timeline and cost.

All projects