JoeOkami
All work

02

mydlink Smart Home

Cameras, plugs and sensors each carried their own logic. Unifying them so adding a device type stopped meaning adding an interface.

View the live product
mydlink app screens showing cameras, smart plugs and sensors in one unified interface.

Managing D-Link cameras, smart plugs and sensors from one place, in a single interface that holds together as the product line grows.

TL;DR — three sentences

  1. Plugs, sensors and cameras had each arrived with their own logic, and cameras were the ones that wouldn't fit — everything a camera says is either happening right now or is evidence about something that already did.

  2. The fix wasn't a shared card component. It was a shared language for what state a device is in, and a guided setup that starts with the app finding the device over BLE instead of the user finding a network.

  3. The hardest conversation was about colour, and it wasn't about colour. I stopped arguing which palette and started arguing who each product is sold to.

  4. Other teams started building with my components, which is the evidence that they worked. But I only ever shipped a Figma library — no written rules, no tokens agreed with engineering — so when people moved on, it came apart.

My part

  • Interface design & prototyping
  • State components & visual system
  • Cross-device consistency rules
  • WCAG contrast pass

Platforms

  • iOS
  • Android
  • Web

Team

  • 2 UX designers
  • 2 UI designers (incl. me)

Client & timeline

  • D-Link
01Challenge & Objective

The camera was the device that wouldn't fit

One app had to hold cameras, smart plugs and sensors, and each category had arrived carrying its own logic. A plug is a state: on or off. A sensor is an event: something happened, at a time. A camera is neither — it's a live view, a recording history, a storage plan, a permission set and a motion sensitivity, all current at once and all wanting to be on screen.

Cameras were the hard case and it wasn't close. The others could be pushed into a shared shape without losing much. Cameras resisted, because everything a camera has to say is either happening right now or is evidence about something that already happened, and those two want different amounts of room.

The failure mode was already visible in the product line. The more device types shipped, the more the app became several products sharing a login: every new category brought another set of screens, and anyone who owned three kinds of device had to learn three different ways of reading whether something was working.

02Competitive Analysis

Four trends that were all saying the same thing

We looked at the three platforms people actually compare us against: Google Home, Apple Home and TP-Link Tapo. Four things came out of it — dashboard-first management that puts the important state on the opening screen; neutral greys plus a technical blue; device identity carried by iconography rather than names; and flows built for few steps and immediate feedback.

Read together, those four are one observation. The competition had stopped being about the feature list and moved to the first few seconds after opening the app — whether you can tell what's going on at home before you've tapped anything.

So each one turned into a decision rather than a mood board. Dashboard-first meant the home screen stopped being a device list. Neutral plus technical blue meant status colour became the only saturated thing on screen and everything else stepped back. Icon-led identity meant every device category had to be recognisable without reading its name. Few steps and immediate feedback meant setup had to go find the device over BLE, instead of sending the user off to find a network.

A competitor's home screen: scene buttons at the top, then device cards grouped by category, with a tab bar switching device types.
One of the platforms we studied. Scenes above devices, devices grouped by category — we took that hierarchy. What we left is the flat grid: every device the same size means nothing is ever the thing you should look at first.
03User Research

People read colour and icons before they read anything else

Testing was task-based with non-technical people who live with this kind of product: check a device's current state, switch something on or off quickly, then notice something abnormal and react to it. No prompting on where to tap.

What it produced was qualitative, not a completion-rate table — I'd run it differently now. But three things came back often enough to design against: people lean on colour and icon to judge state, before labels and before layout; clear device grouping visibly cuts the time spent hunting; and immediate feedback — the small animation when a state flips — makes people trust that the tap worked.

The three changes that came out of it were not new features. They made what was already on screen easier to read.

  • What testing showed

    People judge state by colour and icon first

    What changed

    Pushed status colour contrast up and made icons more distinguishable

  • What testing showed

    Clear grouping cuts hunting time

    What changed

    Secondary settings moved out of the main path so grouping stays readable

  • What testing showed

    Immediate feedback builds confidence in the tap

    What changed

    Made interaction feedback consistent across device types

None of the three are new features — all three make what's already there easier to read.

Colour analysis board: blues, neutral greys and the graded status colours.
Neutral greys carry the information so status colour can be the only saturated signal on screen.
04Information Architecture & Flows

A shared language for state, not a shared card

The obvious move is to draw one device card and make everything sit in it. That gets you visual consistency and not much else — the moment a camera needs to say something a plug can't, the card either grows a special case or the camera gets its own screen, and you're back where you started.

What actually carried the weight was agreeing on what states a device can be in, independently of what kind of device it is: found, connecting, named, active, unreachable. Once every product speaks that set, a new device type doesn't need a new interface — it needs to declare which state it's in, and the interface already knows how to say it.

Setup is where the same idea pays out most visibly. Traditional hardware setup asks the user to go and find the device's own network, which is exactly the step where people get stranded. Here the app searches over BLE and finds the device itself, then walks through connecting it to Wi-Fi, naming it, and switching it on as one guided sequence. The user never has to know that a network handover happened. That's not a convenience feature — it's the difference between a product that installs itself and one the buyer has to be qualified to install.

The web side had a different routing problem, one about hardware generations rather than device types. Two web systems were live at the same time — older models could only run the old one, newer models went to the new one, and the user has no idea which group they're in. They just know they own a D-Link camera. The worst possible handling is to let them guess and then fail to sign in on the wrong site.

So each portal carries a door to the other one: the new site asks «want the old version?», the old site asks «want the new one?», and the button sits in the top bar. Running two systems side by side isn't a transitional exception — for that stretch of time it is the normal state, and normal states belong in the layout, not in a notice on a help page.

Guided setup screens: the app searching over BLE, connecting to Wi-Fi, naming the device.
The app goes and finds the device. The user is never sent off to look for a network.
The two web portals side by side, each with a bar at the top linking to the other version.
Two portals live at once, and which one you belong to depends on which generation of hardware you bought. Each carries a door to the other — in the top bar, not buried in a help page.
05Interface Design

The colour argument wasn't about colour

The hardest person to bring round was the boss, and the subject was the palette. The ask was to line mydlink up with AQUILA — one company, one colour direction. On its face that's just brand discipline, and hard to argue with in the abstract.

So I stopped arguing in the abstract. The two products aren't sold to the same person. AQUILA is bought by someone who chose their own router; mydlink is a consumer product, bought by a household that wants a camera in the hallway and doesn't think of itself as running a network. Unifying the palette across them doesn't unify the brand — it borrows the more technical product's posture and puts it in front of the less technical audience.

That's the move worth keeping from this project, and I used it again later on a different argument: when a decision is stated as a preference, it can only be answered with a preference. Restate it as a question about who the product is for, and it becomes something two people can actually settle.

Home dashboard in three themes: scenes at the top, camera live view, then other devices.
One screen for the whole home. Note the plug and the sensor speaking the same status language — «On», «Insufficient Battery».
Scenes: Home, Away and Sleeping, each bundling several device actions.
Scenes let people declare the situation they're in instead of configuring devices one at a time.
Automation builder: conditions by time, event and location.
Automation as an everyday tool, not an advanced feature — the logic is wrapped into choices you can read.
Geofencing setup: actions triggered by arriving at or leaving home.
The system reads your situation so you tap less — lights on as you arrive, monitoring on as you leave.
Rich notification on the lock screen with a thumbnail and direct actions.
A notification has to carry enough context to be answered on the lock screen, or it just becomes another thing to open.
AI detection settings: drawing the area of interest directly on the camera view.
AI parameters hide behind a spatial metaphor — you circle what you care about, you don't tune a sensitivity slider.

Someone else's proof


Official tutorials filmed against the interface. Everything else on this page you have to take my word for — these you don't.

06Designing the Paywall

The first screen doesn't let you compare

Six cloud recording plans exist. The first screen shows one.

Opening cloud recording gives you a single price — $4.99 a month — and one primary button: Try It. «See All Plans» sits underneath in secondary weight. That is a stronger recommendation than putting a «recommended» badge on one of six cards. A badge says of these six, I suggest this one, which still leaves you comparing six things. This says use this one, unless you actually want to compare — and most people don't want to.

Two more decisions sit in the same flow. Which plan and how you pay for it are separate questions, so the billing period comes after you've chosen, on its own screen, where Yearly carries the only «save more than 15%» label in the entire flow. One decision at a time, and the nudge arrives at the moment it's relevant rather than competing with five other prices.

And the plan list inside the app has no free tier at all — the web pricing page does. Someone who opened this screen in the app is already considering paying; putting the free plan in front of them there mostly hands them a reason to stop. The web page is for people still evaluating, the app is for people already using the product, and the same six plans are arranged differently in each place.

Three screens: the single-price intro with Try It, the full plan list, and the monthly/yearly choice.
One price, one button, and «See All Plans» kept quiet underneath. The billing period is a separate screen — that's where the only «save 15%» nudge lives.
Bundle offer screen and the confirmation screen showing the subscription expiry date.
After payment the screen says what you bought and when it runs out. A confirmation that only says «success» leaves people opening the app later just to check.
07Accessibility & Design System

Other teams started building with it — that's the evidence it worked

The visual system had one job: carry a lot of information without competing with it. Neutral greys hold the layout, the technical blue carries identity, and status colour stays the only saturated thing on screen — which is what makes a red dot mean something.

Status never rides on colour alone. Every state is colour plus icon plus label, which is both an accessibility requirement and the thing that stops «green» from having to mean two different things on two different device types. I ran the contrast pass against WCAG AA and reworked the swatches that didn't clear it.

The part I'm actually proud of is downstream: engineering, product and the other designers started pulling these components into their own work. A component library gets adopted when it's faster to use than to avoid, and that happened here — which makes what I didn't do next more annoying (see below).

  • #26486DPrimary
  • #77899CSecondary text
  • #00B0D0Action
  • #5BCA4ENormal
  • #FBB647Alert
  • #EA5B59Error
  • #AFB7BFDevice background
  • #EFEFEFBackground
mydlink App v2.0 GUI board: colour palette with hex values and the full text style scale.
The library other teams ended up building from — dated September 2020, which is the only timestamp this project left me.
The all-cameras page on the web: each camera card carries a toggle, a live view and a state message.
Colour plus icon plus label on every state — «privacy mode is on» says so in words, so «is it recording?» never depends on telling two greens apart.
Redline board: home screen at two sizes with spacing, type and colour specs annotated.
Specs went down to the pixel — 16pt gutters, type sizes per platform, hex values. But notice what it isn't: annotation on a screen, not a rule about when to use which.
08Outcome & Reflection

The components survived. The rules didn't.

What changed, in the terms I can actually stand behind: support questions about the app dropped noticeably — the ones that stayed were hardware problems, which is the right kind to be left with. Sales demos got smoother, because you can now show the whole home in one screen instead of narrating your way through a device list. And engineering, product and other designers started building with my components.

No before-and-after numbers. I didn't set up a way to measure it, and I'm not going to reverse-engineer percentages now to make this page look better.

The real lesson is the thing I stopped short of. I shipped a Figma library and treated that as done. I never wrote the rules down, and I never sat with engineering to agree on tokens — so the library lived exactly as long as the people who remembered how it worked. When they moved on, it came apart, and the same states started being rebuilt slightly differently in different places.

A component library is an artefact. What makes it a system is the written rule and the shared token, and those are the parts that survive a handover. That's the first thing I set up now, before drawing a single component.

Screens from the shipped 3.0 app.
The screens shipped and stayed. The rules behind them didn't get written down — that's the half I'd do differently.

Looking for a product designer?

I’m open to product design roles, in-house or remote. Happy to walk through any of these cases in detail.