← Portfolio
UX Case Study · MarketsMojo · 2026

Making an expert tool usable — without making it weaker.

A strategy builder for everyday investors — people with no finance degree and no technical skill. No queries to write. Testing built in, so a strategy could be tried before any money was risked. And it had to feel premium.

Product DesignerRole
Sole designerTeam
Discovery → handoffScope
34 screensOutput
Live in productionOutcome

Sold before it was built. The prototype earned revenue in its first hour and funded development. mojofundmanager.com ↗

What I did on this project

The 30-second version
Deliverable 01

Working prototype

34 screens that run. Shown live to real users.

Deliverable 02

Design system + Figma

Tokens, type scale, component states. WCAG 2.1 AA.

Deliverable 03

Developer handoff

Specs, component map, changelog, prototype.

Stakeholder discovery Competitive audit Heuristic evaluation Information architecture Wireframing Interaction design Usability testing Design system Prototyping Developer handoff
01DiscoverPhase 1 of 7

A brief, not a blank canvas.

The team arrived with a query-driven builder.

“The success of this product depends on how simply you can present these queries and filters.”

Kick-off — promoter & product team

What I heard underneath it

Two constraints, pulling against each other:

A

Anyone can use it. Not just people who write conditions.

B

Nothing gets weaker. Removing power is the useless answer.

What today's tools ask of a person

Strong engines. Interfaces built for people who think in syntax.

Tool typeHow you express intentLearnable in one sittingTells you if it worksRecovers from a wrong answer
Stock screenersTyped query syntaxNoNo — today onlyRewrite the query
Broker watchlistsManual pickingYesNoEasy
Advisory / tipsSomeone else decidesYesNoNo control
SpreadsheetsFormulas + manual dataNoOnly if you build itFragile
What we neededGuided choicesYesYes — 10 yearsChange one rule, re-run

Heuristic teardown of the starting point

The inherited approach, against basic usability principles.

The starting point — where each problem occurs4 violations
1 3 2 4

Numbers mark where each problem happens.

You can customize the query below:
Market Capitalization >500 AND
Sales growth 5Years >15 AND
Debt to equity <1 AND
PEG Ratio <1 AND
Promotor holding >30
Show only latest results?
➤ Run this query

One condition is misspelled — Promotor.

1
Recall over recognition

You must remember the exact field names and the syntax. Nothing on screen helps you.

2
No visible system status

You learn nothing until you press Run.

3
No error prevention

A typo returns an empty result. Failure looks like an answer.

4
No path to expertise

A beginner has no first move.

02DefinePhase 2 of 7

I reframed the brief first.

Wrong problem. Simpler syntax still leaves 65 conditions and no idea which are yours.

The brief as given

“Make the query language simpler.”

Autocomplete and tooltips. You still need the system's words.

How I reframed it

“How might we let someone express an investment intent they already hold, in their own terms, and see whether it holds up?”

Shifts the unit of work from a condition to an intention.

Who I was designing for

Primary

The opinionated investor

A clear view. No way to act on it.Blocked at the first screen.

Secondary

The cautious first-timer

Needs evidence before committing money.Needs the rehearsal.

Edge

The power user

Will leave if simplifying costs them control.Constraint B exists for them.

The flow I proposed

The journey, before any screen. The fork after Preview is what I argued for.

Enter Landing Start Import existing portfolioor Set the context
Build 1 Construction 2 Entry 3 Exit 4 Manage 5 Preview
Decide Backtest · 10 years Result Review & edit rules ↺or Take live
Live Live portfolio Holding detail Alerts Compare strategies
03IdeatePhase 3 of 7

Five directions, sketched.

All five went to the team, not one answer. Four failed the same way.

Early working sketches — screen flow, entry rules, filters, chart ideas and open questions
Before any screenRecreated from the working notes
A · autocomplete
Debt to eq|
Debt to equityDebt / EBITDADebt to assets
➤ Run query

A · Assisted query

Help on the box that exists.

Faster typing. Still typing.
B · question 7 of 20

How long will you stay invested?

1–3 years
3–5 years
More than 5

B · Question wizard

Twenty questions, one per screen.

Reads as a form
C · ready strategies
Blue-chip growth +14%
Low-debt value +11%
High dividend +9%
Use this, then edit

C · Template first

Pick a ready strategy, then adjust it.

Kept — as its own feature
D · rule canvas
Market cap AND Debt/eq ?

D · Node canvas

Drag conditions onto a canvas.

A blank canvas is a blank box
E · step 0 first

What is this portfolio for?

Long-term growth
Now showing 6 of 65
Sales growth · above 15%
Debt to equity · below 1

E · Context, then choices

Ask what it's for. Shape the rest around the answer.

Taken forward

Why E won — the same screen, two orders

Options first
65 conditions · alphabetical
Beta (1 year)
Book value per share
Current ratio
Debt to equity
Dividend yield
Earnings yield
EPS growth 3 years
EV / EBITDA

↳ “Which of these are mine?”

Context first
Step 0

What is this portfolio for?

Long-term growthIncomeCapital safety
Conditions worth your attention · 6 of 65
Sales growth 5 years · above 15%
Profit growth 5 years · above 15%
Debt to equity · below 1
+ show all 65

↳ Fewer options, all relevant. The rest one tap away.

04WireframePhase 4 of 7

Low fidelity, so it could be argued with.

Structure first. Styling later.

Step 01
Create strategy
Amount to invest ₹5,00,000
Time horizon 3–5 years
Rebalance Quarterly
Sets the context for every step after this
Continue →

Construction

Its answers shape everything after.

Step 02 · the heart of the product
Entry rules 412 stocks qualify
Long-term growth · showing 6 of 65 conditions
Sales growth 5 years is above 15% ⋮⋮
AND
Debt to equity is below 1.0 ⋮⋮
OR
Promoter holding is above 30% ⋮⋮
+ Add a rule
← Back
Continue →

Entry

Rule rows, connectors, a live count, reorder handles. Every other screen is a variation of this.

Step 03
Exit rules Pre-loaded, not an empty list
Stop loss at −10% ⋮⋮
OR
Book profit at +25% ⋮⋮
+ Add a rule
Continue →

Exit

Same components as Entry. Starts filled, because people skipped it.

Step 04
Manage Order changes meaning
1 · Entry rules⋮⋮
2 · Exit rules⋮⋮
3 · Rebalance⋮⋮
Check rules Weekly
Continue →

Manage

Priority and frequency. Order is a real decision, so it drags.

Step 05
Preview
₹5,00,000 · 3–5 years 3 entry rules · 2 exit rules Checked weekly, rebalanced quarterly
Restated in plain language, not rule syntax
Backtest 10 years
Take live

Preview

The strategy in plain words, then the fork. Backtest sits level with Take live.

The component everything depends on

Readable as a sentence. Quick to operate.

1Debt to equity 2is below 31.0 4⋮⋮
1Subject

The plain name, not the database field.

2Operator

Words, not symbols.

3Value

Validated as you type. An impossible rule can't be saved.

4Handle

Order changes meaning, so it drags.

Five states, specified up front
Default
Debt to equity · below 1.0
Hover
Debt to equity · below 1.0
Selected
Debt to equity · below 1.0
Error
Debt to equity · below —
Locked by plan
Debt to equity · below 1.0

Joining rules without teaching Boolean logic

People say “and” and “or” without thinking about precedence. So it's drawn, not explained.

Rejected — one toggle for the whole list
Match
All of these rules
Any of these rules
Market cap · above ₹500cr
Debt to equity · below 1.0
Promoter holding · above 30%
Can only ever mean: A and B and C

One setting for every rule. No way to say “these two together — or that one alone.”

Shipped — a connector between each pair
Group 1 · both must be true
Market cap · above ₹500cr
AND
Debt to equity · below 1.0
OR
Group 2 · on its own is enough
Promoter holding · above 30%
( A AND B ) OR ( C )

ANDs group into one bracket; an OR starts a new one.

05Prototype & testPhase 5 of 7

The structure came from watching people fail.

One task, given to real people:build a strategy you'd actually be willing to fund.Where they hesitated changed the design.

Finding 01 · people lost their placeBlocking
Before · one long page
Amount
Horizon
Entry rule 1
Entry rule 2
Exit rule 1
Frequency
After · five named steps
1 Construct2 Entry 3 Exit4 Manage5 Preview
Step 1 of 5 · Continue →

People scrolled, lost their place, and couldn't tell how far along they were.Split into five named steps with visible progress, and blocked forward jumps until the current step was valid.

Finding 02 · no first moveBlocking
Before · all 65, alphabetical
Beta (1 year)
Book value per share
Current ratio
Debt to equity
Dividend yield
Earnings yield
After · shaped by context
◆ Long-term growth
6 of 65 worth your attention
Sales growth · above 15%
Debt to equity · below 1
+ show all 65

People froze at the full list.Moved context ahead of choice, and used those answers to shorten and order the list.

Finding 03 · exits were guessed atSerious
Before · exit is a footnote
Entry rule 1
Entry rule 2
Entry rule 3
Exit rules
None added
After · its own step, pre-loaded
2 Entry3 Exit
Stop loss · at −10%
Book profit · at +25%
+ Add a rule

Entry was careful. Exits were guessed.

Finding 04 · nobody would commitSerious
Before · one irreversible button
Preview your strategy
₹5,00,000 · 3 rules
Take live with real money
After · rehearse first
Preview your strategy
Backtest · 10 years
↻ change a rule, run again
Take live

People stalled at the end, becausenothing had told them it was right.

The Entry step, three rounds

Real screens, in the order they were made.

Round 1 · 30 MayFailed
Round 1 — the full wireframe prototype, every screen mapped in a left-hand index
Portfolio Architect · wireframe prototype

Every screen mapped and navigable.Structurally complete, and nobody could start.One dense screen, no way in.

Round 2 · 30 MayBetter
Round 2 — four layout options for placing the active rules, each rendered in real context
Rule engine · active-rules placement

Four layouts for one screen, each built in real context.Placement improved; the first move didn't.

Round 3 · shippedWorked
Round 3 — the shipped Entry filters screen with a five-step tracker, active rule chips and a live eligible-stock count
Entry filters · in production

Step tracker, rules as removable chips, categories aside, and alive count of 94 eligible stocksthat moves as you edit.

06Design systemPhase 6 of 7

One system, 34 screens, no drift.

Closer to a private bank than a trading terminal. This is someone's savings.

Type — one family, nine sizes

One family. A fixed scale, so no screen invents its own.

DisplayStrategy
TitleEntry rules
BodyDebt to equity is below 1.0
CaptionApplies to 412 stocks
Numeric₹5,00,000

One accent, and a rule about numbers

One gold accent per view. Gain and loss on numbers only.

Ink
Surface
Hairline
Gold
Gain
Loss
✕ Rejected
−₹18,240
✓ Shipped
−₹18,240

Spacing — a 4px base

Every gap is a multiple of four.

4
8
12
16
24
32

Accessibility — WCAG 2.1 AA, verified

Calculated, not eyeballed. The light theme inherits every ratio.

Primary texton ink · passes AA
Secondaryon ink · passes AA
Gold accenton ink · passes AA

Colour is never the only signal.

Mobile was not an afterthought.

The same product, rebuilt for a phone — not shrunk onto one.

The Entry filters screen on a phone — collapsed step tracker, accordion categories and a summarised rules bar
01The step tracker collapses. Only the current step keeps its name; the rest become ticks.
02Categories become an accordion. The desktop sidebar would have eaten the screen.
03Active rules summarise. “3 entry rules · All AND”, with Expand when you want them.
04Controls stack. Operator above value, so nothing is squeezed to a stub.
05An honest banner. Where the desktop view genuinely is richer, the app says so rather than pretending.
93 media queriesDown to 430pxReduced-motion respected
07Validate & hand offPhase 7 of 7

I built the thing I designed.

I built it as a working prototype. AI wrote the code, I made every decision.

Deliverable 0134 screens
The working prototype — a backtest result screen running in the browser
Working prototype

Real state, real interaction. Every flow runs.This is what was demonstrated in the webinar.

Deliverable 02Locked
The design system document — palette, type scale and components
Design system

Palette, type, states, spacing — written down so 34 screens couldn't drift.

Deliverable 03v10
The developer handoff package — token swatches, changelog and per-screen reference
Developer handoff

A package, not a link: design-tokens.css, six docs, 32 self-contained per-screen reference files, a versioned changelog, and the prototype as the source of truth.

What handoff looked like

Written as behaviour, not pixels. The prototype showed the look.

component: rule-row
spacing: 12px / 8px gap · radius 8
operator: gold · only editable logic in view
states: default · hover · selected · error · locked
reorder: drag handle + keyboard arrows
logic: connector per rule · AND binds tighter
a11y: 4.5:1 minimum · not colour-alone

Validation, before engineering started

Demonstrated live to real users, running end to end.It generated revenue within the first hour, and funded the build before a line of production code was written.

Flows were refined from that feedback. Then it was built.

Commercial figures available on request

The prototype — running here

befm — strategy builder · backtest · live
2 MB · loads only when you ask · 34 screens
Open full screen ↗ Visit the live product ↗
In the roomBehind the work

Designed and built at the desk, with the team.

Reviewing the builder, watching a backtest run, and the day it went live.

Reviewing the strategy builder at the office
Reviewing the builder · June
Running a backtest with a developer
Backtest preview, with the team
The finished product running on the live site
Live · mojofundmanager.com
ReflectionClosing

What I'd carry into the next one.

Reframing the brief was the work

I was asked to simplify a query language. The value was arguing the unit of work is an intention, not a condition.

Tidier ≠ solved

Neat, and it barely moved the outcome. Visual order can hide an unsolved problem.

Building it changed the design

Empty states, validation, the way back from a backtest. Building it forced the answers.