Still loading
Case studies

How the work
actually happened.

Three projects in full — the research, the design decisions it forced, what usability testing changed, and what I would do differently. The outcomes are on the work page; this is the reasoning behind them.

CASE 01

Wave Fest

RoleSole designer
TypeClient engagement
Year2026
Built withFigma, React, Supabase
StatusLive

A UAE yacht charter operator was getting traffic but losing enquiries. I was brought in to redesign the booking experience, and ended up redesigning how the business runs it.

Context

The operator sells charters that start around a few thousand dirhams. Every booking begins as an enquiry, so the entire business depends on a visitor being willing to start a conversation. The existing site described the boats accurately and still converted badly.

Research

I interviewed the owner and the staff who answer enquiries, because they were the only people who could tell me where conversations actually died. That turned out to matter more than anything I could infer from the site itself.

Two things came out of it. Customers repeatedly asked the same questions before they were willing to enquire, and the answers were not on the page. And the owner could not change a price or a tour without paying someone — so the content was quietly going stale, which made the site less accurate the longer it stayed up.

The design problem

I had framed this as a layout problem when I arrived. It was not. It was an information problem on the customer side and a maintenance problem on the business side, and the second one was slowly causing the first.

Design decisions

I designed the journey around the questions people actually asked rather than the structure of the old site, and made pricing transparent at the point of interest instead of on request — the single-price quote removed a round trip that the staff told me people rarely came back from.

I placed a knowledge-base chat assistant at the moment of hesitation rather than in a corner of every page, so it answers the specific question standing between someone and an enquiry.

The admin dashboard and content editor were designed so a non-technical owner can publish a price change without a developer. That was a design decision about who holds the keys, not a feature request.

Testing

Before launch I ran usability sessions on the booking flow with the client and with people using it for the first time. I watched where they slowed down rather than asking whether they liked it.

The hesitation clustered in the middle of the enquiry path, on steps I had considered necessary. I cut them. The flow shipped shorter than I designed it, which is the part of this project I am most pleased about.

What I would do differently

I would test the admin side with the same rigour as the customer side. I designed the content editor carefully but validated it far less than the booking flow, and the owner is the person who has to live in it every week.

What shipped
  • An enquiry journey shortened after testing, with transparent single-price quoting
  • An admin dashboard and content editor the owner uses without a developer
  • A knowledge-base chat assistant placed at the point of hesitation
  • Live, and maintained by the client themselves
CASE 02

Stem by Stem

RoleSole designer
TypeConsumer product
Year2026
Built withStripe, Arabic RTL, dark mode
StatusLive demo

An online flower shop where browsing the catalogue was the thing stopping people from buying. The fix was not a better catalogue.

Research

I watched people shop. The blocker showed up almost immediately and it was not what I expected: they knew the occasion and they knew the feeling they wanted to convey, but they did not know what to order. They were being asked to choose between roses and eucalyptus when the thing in their head was an apology.

Category-first navigation asks the customer to already know the answer. These customers knew the question.

Design decisions

I designed a second entry point rather than replacing the first. The customer describes the feeling in their own words and the interface composes the bouquet from it; the stem-by-stem manual path stays for people who would rather control every element. Removing choice from someone who wants it is as bad as demanding it from someone who does not.

Arabic right-to-left layout and dark mode were designed from the first screen rather than retrofitted. Retrofitting RTL means discovering every hard-coded assumption about direction at the worst possible moment, and it shows in the result.

For checkout I stayed deliberately conventional — cart, Stripe, sign-in, same-day delivery selection across the seven emirates. The novelty belongs in discovery, where the customer is undecided. At payment, familiarity is the feature.

What I would do differently

I would test the described-feeling path against the catalogue path properly, with the same people on the same task, instead of trusting that the observation generalised. I believe it does. I did not prove it.

What shipped
  • Two discovery paths: describe a feeling, or build stem by stem
  • Full Arabic RTL and dark mode, designed in from the start
  • Cart, Stripe checkout, sign-in and same-day delivery across seven emirates
  • A conventional checkout, on purpose
CASE 03

Barjeel

RoleSole designer
TypeTrust & safety
Year2026
Built withOn-device, 20 checks, 81 tests
StatusLive

A QR scanner that tells you where a code really leads. The hard part was not detecting the attack — it was writing the warning.

The design problem

A malicious QR code is invisible by design. A lookalike domain, a punycode homograph, a mixed-script substitution — all of them are engineered to survive a glance. The detection is solvable in code. The design problem is telling someone with no technical vocabulary that the thing they are about to open is not what it claims to be, in the two seconds they will give you.

Design decisions

The strictest decision was what the product refuses to do: it never opens a link on the user's behalf. A safety tool that navigates for you has to be right every time, and nothing is right every time.

It runs entirely on the device. Nothing the user scans leaves their phone — which also means the product cannot quietly become a log of everywhere they have been.

The warning shows what the domain claims to be alongside what it actually is, because the gap between those two is the whole story and it is more persuasive than any severity label.

Testing

I tested the warning screens with non-technical users, and the question was narrow: without me explaining anything, do you know what this is telling you and what you should do?

The first wording failed that test. It was accurate and useless — it described the mechanism instead of the consequence. I rewrote it around what it means for the person holding the phone, and kept testing until the danger landed without explanation.

What I would do differently

I would test the safe case harder than the dangerous one. A scanner that makes people anxious about legitimate codes has failed differently, but it has still failed, and I spent most of my attention on the warning state.

What shipped
  • Danger states written for non-technical users and tested for comprehension
  • Detection for lookalike domains, punycode and mixed-script attacks — 20 checks
  • Fully offline: nothing about the user leaves the device
  • Never opens a link on the user's behalf