Selected work01DeFi · Lead Product Designer
Juncta.Where liquidity never sleeps.
A DLMM liquidity market maker with a lending protocol built in. Every idle dollar in the DEX earns yield in the lending market, without the user routing it there.
- Role
- Lead Product Designer
- Timeline
- June–September 2026 · 17 weeks
- Scope
- UX research, 35 dashboard screens, full design system
- Chain
- Designed for Cedra (Move L1), now live on Solana devnet

- 01The problem
- Every Move DEX was copying the Uniswap V3 playbook. In an average week, $542M of liquidity sits out of range, earning nothing.
- 02The bet
- Build on DLMM. A protocol that knows which price bin is active can lend out the capital that isn't working.
- 03My role
- Lead product designer across research, product design and the design system, over 17 weeks.
- 04The outcome
- 35 production-ready screens, a full design system, and the first DLMM designed for a Move chain.
01Context
A protocol where capital never sits idle.
LPs set static price ranges, wait, and watch their capital sit idle the moment price drifts outside them. The architecture has no idea which bins are working and which aren't.
Juncta went DLMM instead, for architectural reasons rather than cosmetic ones. Liquidity lives in discrete price bins, and the protocol knows which bin is active at every moment. That awareness is what makes the core mechanic clean: liquidity in inactive bins is routed into the lending market automatically.
Before · static range
Out of range, out of work
Price drifts outside the range the LP set. Every dollar in the position stops earning until they notice and rebalance by hand.
Juncta · DLMM + lending
Every bin has a job
The protocol always knows the active bin. Liquidity near price earns trading fees; bins further out are lent to the lending market, so they earn interest instead of nothing.
02Problem
Make six yield states feel like a savings account.
Every screen had to translate a deeply technical engine into something a newcomer could trust, without hiding what a professional needs to see.
$542,000,000
sits out of range in an average week, industry-wide.
36.7%
of that liquidity goes untouched for 90+ days.
Source: Dune, 26 weekly snapshots, 7 chains, Jan–Jun 2026.
03Research
Five structural issues, validated before they became design decisions.
- 01Passive LPs consistently lose.Once impermanent loss and missed rebalancing are priced in, the average retail LP underperforms simply holding the tokens. Concentrated liquidity has become an institutional product wearing retail clothing.
- 02DEX liquidity and lending are disconnected.LP capital and lending deposits live in separate pools with no relationship to each other, so LP capital sits idle when it's inactive. Nobody had brought unified liquidity to a Move chain.
- 03Impermanent loss is treated as inevitable.Every AMM design treats IL as the cost of providing liquidity. No protocol had built IL mitigation into its core fee economics instead of leaving it as the LP's problem.
- 04Lending parameters adapt too slowly.Aave and Compound use static utilisation curves that only change through slow governance. No lending market adapts continuously to live on-chain conditions.
- 05Collateral sits idle.When a trader or borrower deposits margin, that capital earns nothing while it waits. Pure capital inefficiency that no protocol had resolved at the protocol level.
Who it's for
Three users, three different reasons to trust it.
User 01
Passive LP
“Yield, not a second job.”
Deposits once, and expects the protocol to rebalance and route idle capital automatically.
User 02
Active / Pro LP
“Control and live data.”
Manages positions across bins directly. Needs real-time bin state and fine-grained controls.
User 03
Borrower
“Liquidity without unwinding a position.”
Borrows against an LP position as collateral, instead of exiting it to raise cash.
04Thinking
How the problem became this specific solution.
The three-layer architecture wasn't the first idea. It's what survived testing two liquidity models, and cutting a version that showed users too much.
- 01Mapped where capital actually sits idleTraced a position through both the DEX and the lending market and found two silos that never talk. The DEX knows a bin is inactive; the lending market has no idea.
- 02Tested static range against DLMM, head to headStatic range was simpler to build and explain, but couldn't tell the lending layer which capital was actually idle. DLMM's bin-level tracking could. That data decided it, not visual preference.
- 03Found the gap wasn't a missing featureThe DEX already knew which capital wasn't earning fees. The fix was routing that signal to the lending layer, not inventing a new primitive.
The fix wasn't a new feature. It was routing a signal the protocol already had.
05Design
Making a three-layered protocol feel like one product.
Juncta's edge is tying three layers that update at the same time into a single surface, so the user never has to connect what the protocol is already doing.
- Layer 01DLMM
Concentrated liquidity, in discrete bins.
The protocol tracks exactly which price bin is active at every moment. No static range, no guessing.
- Layer 02Debt
Lending that reacts to the DEX in real time.
Idle capital on either side of a position is automatically eligible as lending collateral.
- Layer 03Signal
Rebalancing logic the user never has to trigger.
The layer that decides when a position needs attention, before the user has to notice.
Pools
The whole protocol, at a glance.

The pools dashboard, with four annotated details.
1Both halves, one row
TVL, lending supplied, volume and fees sit side by side, so the DEX and the lending market read as one market.
2Active bins, number first
The share of a pool's liquidity earning right now. 82% reads green and 35% red, but the number is always there, so colour never carries it alone.
3One liquidity layer
DLMM TVL and lending supply in a single chart. Trading fees and lending yield add up to one combined APY.
4The engine, made visible
Rebalances, graduations and bins moving into lending appear as they happen, so automation never feels like a black box.
New pool
Define the pool, then seed it.
Creating a pool and providing its first liquidity are two decisions, so they're two steps on one screen. The step you're not on stays visible but dimmed, so the whole flow is always in view.

1A starting price, suggested
The initial price shows the estimated market price underneath, so a new pool doesn't open mispriced.
2The economics, up front
Base fee, the fee ceiling at peak volatility, bin step, the LP share of fees and IL compensation, before anything is created.
3One step at a time
Seeding the pool waits, dimmed, until the pool is defined.
Swap
Every hop, accounted for.
A swap can route through several pools. Instead of hiding the route, the confirmation breaks it down hop by hop: each pool's type, fee and active bin, what went in, what came out, and the price impact at every step.

Settings speak in consequences, not just numbers. Slippage says exactly what happens at the chosen tolerance, and Auto shows the tolerance it picks for each route length. Expiry explains its own trade-off: more time to sign means more price risk.

Expiry, with its trade-off spelled out.

Slippage at 0.1%: what reverts, and the minimum you'll receive.

Auto, set by route length: 1.0% for this three-hop route.
Provide liquidity
Same deposit, two strategies.
Spot concentrates liquidity around the active bin. Wide spreads it across a broad range, with lower impermanent-loss risk.

The live bin state is where the strategy becomes visible. With Spot, liquidity crowds the active bin and earns more in fees. With Wide, more bins sit away from price, and those are lent out (blue) instead of left idle. Yield is broken into trading fees and lending yield before it's combined, so the user knows where the number comes from.


Borrow
Borrowing that grows with the user's position.
Two states of the same surface. A first-time borrower is asked how they'd like to start, and can deposit collateral directly, with no LP position needed. Someone with an active position sees the lending market beside their account: health factor, borrow power, active borrows and LP collateral, in one view.



Liquidation
Four stages, designed by hand.
Liquidation is where users lose money, so it's where vagueness costs the most. Each stage has an explicit threshold, so users can see what will trigger each action before it happens.
Full
< 1.0
3% penalty, 30% to the insurance pool.
Accelerate
1.0 – 1.1
25% converted per block.
Soft
1.1 – 1.2
10% of collateral de-risked per block.
Healthy
> 1.2
No action taken.
Health factor, from liquidation (left) to safe (right).
Portfolio
Everything a position is doing, in one scroll.
Trading fees, lending yield and borrow cost are reported separately, then reconciled, so an LP can see exactly where their return comes from and what each position is doing.

Design system
Built for dense data, dark rooms, and long sessions.
Every tabular layout had to stay legible at 12px, and every chart had to read at a glance. The palette is deliberately narrow, because in a product about money, colour is a signal.
Typography
Space Grotesk
Display · 500 weight · −1.5% tracking
Space Grotesk on a near-black ground, with a single signal green. Green means working capital, amber means attention, red means action required. Nothing else competes for your eye.
Table text at 12px
Palette
- Signal green#17CFAA · Working capital
- Amber#F79009 · Attention
- Red#F04438 · Liquidation, loss
- Background#07090D · Page
- Surface#171C26 · Cards and panels
Status, never colour alone
- Healthy · 1.84
- Soft · 1.15
- Accelerate
Actions
06Iteration
Overbuilt the signal layer, then cut it back.
The first version of the Signal layer told users everything. Testing showed that more information wasn't more trust.
- 04Overbuilt the signal layerThe first version surfaced every bin-rebalance event to the user. Early testers ignored most of it.
- 05Cut it back, then locked the splitTrimmed to the one trigger that mattered. DLMM, Debt and Signal became separate architectural layers with one shared surface: the version that shipped.
Cut to the one trigger that mattered: when a position needs attention.
07Outcome
What shipped.
35/35
Screens delivered
Pools, New Pool, Swap, Provide Liquidity, Borrow, Monitor and Portfolio, all production-ready.
6×
Empty-state variants
Every surface has a first-use empty state with shimmer skeletons, so a new LP never sees a broken-feeling dashboard before connecting a wallet.
1st
DLMM on Move
The first DLMM designed for a Move chain, with lending yield natively integrated into inactive bins.
Targets
What “working” means, beyond the design.
| Metric | Why it matters | Target |
|---|---|---|
| Capital utilisation | Share of pooled liquidity earning yield at any given time | > 85% |
| 90-day LP retention | Fewer IL-driven withdrawals than a static-range competitor | > 70% |
| Fees per $ of TVL | Fees earned per dollar of TVL, against a standard AMM pool | 2x+ |
| Time to mainnet | Design-to-ship speed for a three-layer protocol | 12 weeks |
