One campaign lifecycle, two product experiences
Connecting brands and creators through campaign discovery, applications, approvals, team collaboration, subscriptions, and payments.
Product context
Kliq
Kliq connects brands with creators: campaign creation, discovery, applications, approvals, deliverables, teams, subscriptions and payments. Two products — one for the brand, one for the creator — sit on a single shared campaign, and Saudi creator licensing means a creator’s right to take paid work is itself a piece of data the product has to reason about.
- My role
- Senior Product Designer
- Users
- Brands · Marketing teams · Creators · Campaign managers · Internal administrators
- What I did
- Product journeys across both brand and creator experiences
- Marketplace and creator-discovery design
- Role-based workflows and lifecycle states
- Responsive UI across mobile and web
- Prototyping and engineering collaboration
This work is described in words and abstract diagrams only. No client interfaces, screens, or data are reproduced here, in line with the confidentiality agreements covering it.
Product ecosystem
Two sides of one journey
- Campaign
- Application
- Creator profile
- Negotiation
- Deliverable
- Payment
Core complexity
Every action lands on someone else
There is no move either side can make that is private. A brand shortlisting, a creator declining, a deliverable submitted — each one changes what the other party is now waiting for. The unit of design is not a screen, it is a handover.
The commercial layer can revoke access mid-work
A subscription lapses while three campaigns are live and a creator is halfway through a deliverable. The product has to withdraw capability without pretending the work never happened, and without holding the other side’s obligations hostage.
A licence is a state, not a badge
Saudi creator licensing has validity that expires. A brand about to commit budget needs to know standing right now, not that a document was uploaded once. Compliance that renders as a tick is compliance that will eventually be wrong.
Selected journeys
Judging fit and standing in one pass
A brand evaluating a creator is asking two unrelated questions at once — are they right for this campaign, and are they legally able to take it. Splitting those into separate screens is tidier and it produces the failure it is meant to prevent: shortlists built on fit, with standing checked later, if at all. Reach, engagement, per-platform performance and licence validity sit on one profile so the answer arrives together or not at all.
- 01
Both sides act on one record; each action lands as state on the other. - 02
Performance signals sit alongside licence validity, not behind it. - 03
Saved lists hold a judgement between browsing and committing.
The conversation is the workflow
The alternative was a deal object alongside the thread, with its own status and its own screen. Cleaner in a data model, and it means the status is somewhere the people negotiating are not. We put the lifecycle on the thread — Negotiating, Signed — so the place where agreement is reached is the place that records it, and neither side has to ask where things stand.
- 01
Each thread carries a lifecycle status, so neither side has to ask. - 02
One side acts; the other inherits a state and a responsibility.
One screen, in depth
Expiry locks the work; it does not erase it
- 01
The work stays visible
Campaigns remain listed and their progress still reads. An expired subscription does not erase the value already created.
- 02
Locked, not emptied
Rows lock rather than disappear. The user can see exactly what they regain, which is the honest case for reactivating.
- 03
One route back
Recovery is a single action in the banner, at the moment the limit is met — not buried in settings.
- 04
Status still readable
Signed and Negotiating creators still show. Commercial state changes permissions, not the underlying record.
Beyond the happy path
Beyond the happy path
Empty and no-results are different problems and get different answers: one is an invitation to start, the other a signal that a filter is too narrow. An empty state nested inside a modal resolves without leaving the task.
- 01
A list not yet begun asks for the first action. - 02
A different problem from empty, so it gets a different answer. - 03
Resolves in place so the task is never abandoned.
Design-system contribution
Status chips, campaign tables, confirmation dialogs and the nested empty state hold across both sides, so brand and creator are visibly one system rather than two products that share a database. The same chip that tells a brand a creator is Signed tells the creator the same thing, in the same shape.
Reflection
What I would do differently: locked states were designed per surface rather than as one rule the whole product applies, so "what does an expired account see here?" had to be answered again on every new screen. It should have been a single capability check that every view asks, and the design should have made that obvious rather than leaving it to be remembered.