Systems
UX, UI and user flows
Interface work that starts from the states the system can occupy rather than from a list of screens. Most usability problems are modelling problems that reached the surface.
Every new requirement adds a screen, and the product is now forty of them.
Users complete the task and are not sure whether it worked.
Support answers the same three questions all day, and each is a design decision.
The design file and the built product diverged eight months ago.
- 01
Flows before screens
The paths a user actually takes, including the ones that fail: what happens on a rejected payment, an expired session, a partial upload. The unhappy paths are where trust is won or lost, and they are usually the ones nobody drew.
- 02
Information architecture
What belongs on one surface and what does not, named the way the user names it rather than the way the database does. A menu is a model of the domain, whether or not anyone modelled it.
- 03
Interface and design system
Components with defined states — empty, loading, partial, error, success — so the built product cannot quietly omit half of them. A design system is a constraint, not a sticker sheet.
- 04
Bilingual and right-to-left from the start
In this market, Arabic is not a later phase. Layout, typography and directionality are settled at the beginning, when it is still cheap.
- 01
Flow maps covering the failure paths, not only the happy one
- 02
Information architecture with the naming decided and justified
- 03
An interface design with every state specified, ready to build against
- 04
A design system your team can extend without asking us
Invariant
Model states, don’t multiply screens.
- Do you do design without the engineering?
- Yes, and we will say so if the design is not the constraint. Handing over a beautiful interface for a system that cannot support it wastes your money and our reputation.
- Do you work in Figma?
- Yes, and the handover includes the states and the logic, not just the frames. A file that only contains the happy path is a brief for a rewrite.
- Can you redesign without a rebuild?
- Often, and that is worth establishing first. A surface redesign over an incoherent model buys about six months.
Each one carries what it is good for, what it is proven on here, and the point at which it stops working. We take no vendor commissions on any of them.
- three.js
- A WebGL library for real-time 3D that runs in a browser tab with nothing to install.
- React 19
- React is a JavaScript library that describes an interface as a tree of functions of state, and recomputes the parts of that tree whose state changed.
- Tailwind CSS v4
- A CSS framework whose fourth version has no JavaScript configuration at all — the theme is declared as custom properties inside the stylesheet, and every utility class is generated from those declarations.
- Icon systems
- The libraries that supply an application's icons: Font Awesome, Phosphor and Lucide are the three we ship.
You almost certainly know which one it is. We will look at it with the data next to it — where people drop, what they do instead, what they were trying to accomplish — because a redesign that is not aimed at a measured failure is redecoration with a project plan attached.