Dmytro Karpushyn
Web App DeFi · BNB Chain Two themes Client work

CB Tools

Five products under one nav bar.

A decentralised exchange with everything bolted around it: swaps, liquidity pools, yield farms, staking, a two-level referral system, and Charts, a token analytics terminal that watches sixteen markets at once. I designed all of it as UX/UI: 153 unique screens, light and dark drawn as a pair, and every flow carried from 1920 down to 360.

Role

UX/UI Designer

Platform

Web app, adaptive 360 to 1920

Timeline

2021

Scope

153 screens · two themes · 5 breakpoints

Обкладинка

Charts, сторінка токена на 1920: інформація і safety check ліворуч, графік і тредбук по центру, своп і портфель праворуч. Обидві бічні панелі розгорнуті. Charts 6503:1922.

cases/cb-tools/img_cb_01.jpg@2x 3360×2100

unique screens across five products on one platform

153

multichart grid layouts, from a single chart to twelve

13

markets on one screen at once, the terminal design limit

16

TL;DR · what I did

  • Designed a full DeFi platform as UX/UI: swap, liquidity, farms, staking and referrals, 153 unique screens, handed to development ready to build.
  • Drew the interface as state machines rather than screens: eighteen liquidity states on one canvas, twenty-four transaction modals in both themes, skeleton loaders for every panel that waits on a chain call.
  • Designed Charts, a terminal whose multichart grid re-forms across thirteen layouts as you add charts, up to sixteen tokens on one screen.

Client work, published with permission. I worked through the development team, so the company is not named here. Every number in the mockups, yields, balances, liquidity and token prices, is placeholder content rather than product economics.

Overview

An exchange is never one product.

A decentralised exchange is a swap, plus the liquidity pools that make the swap possible, plus the farms that pay people to supply that liquidity, plus the staking that pays them to hold the token, plus the referral program that pays them to bring friends. Each one is a different mental model, and all five live under one navigation bar.

CB Tools carried all of it, and the interface says so plainly: the footer lists Swap, Liquidity, Staking, Pools, Docs, Whitepaper, Audit, Analytics, News, Partners, Team, Contacts. The nine-dot launcher in the header opens the wider ecosystem. The home page carries a diagram of the token economy itself, two funds and a fee flow, because the product was selling a mechanism and not just an interface.

My job was the interface for all of it.

Скрін

Мультичарт на дванадцять графіків, сітка 4×3. Charts 6503:25249.

cases/cb-tools/img_cb_02.jpg@2x 3360×1890
Скрін

Головна в темній темі, увесь лендінг однією стрічкою. CB3 2211:11476.

cases/cb-tools/img_cb_03.jpg@2x 1600×900
Скрін

Реферальний кабінет у світлій темі, друга половина пари. CB3 2468:12825.

cases/cb-tools/img_cb_04.jpg@2x 1600×900
Артефакт

Діаграма економіки екосистеми: два домени, потік комісій, ліквідний та інвестиційний фонди. Кроп блоку Coinbackers Ecosystem з CB3 2211:11476.

cases/cb-tools/img_cb_05.jpg@2x 3360×1890

Adaptive

Drawn, not resized.

Five breakpoints: 360, 540, 720, 960 and 1140, plus the 1920 canvas the desktop work was drawn on. Every page exists at every width, drawn by hand rather than left for a developer to guess.

Light and dark are a pair, not a theme bolted on afterwards. Both were drawn for every screen that has a state worth showing.

The colour styles were named for it from the start: Neutral 1 to 5, Primary Green, Semantic Orange, Background, each existing as a day and a night pair. The naming carries the intent to theme. What Figma could not do at the time was enforce it, which is the thread the last section picks up.

Скрін

Своп у темній темі, розгорнутий стан з маршрутом обміну. CB3 2376:12140.

cases/cb-tools/img_cb_06.jpg@2x 2176×1224
Скрін

Той самий екран у світлій темі. CB3 2465:12798.

cases/cb-tools/img_cb_07.jpg@2x 2176×1224

States in a row

Three pool states side by side, not one click apart.

A pool card moves through connecting a wallet, approving the contract, staking, and harvesting. The staking screen puts three cards in a row showing three consecutive states at once, so a developer sees the transition rather than isolated frames.

Скрін

Стейкінг: три картки пулів в одному ряду показують три стани поспіль, гаманець не підключено, контракт не схвалено, застейкано і збирає. CB3 2466:13371.

cases/cb-tools/img_cb_08.jpg@2x 2176×1224
Скрін

Той самий ряд у світлій темі. CB3 2652:4236.

cases/cb-tools/img_cb_09.jpg@2x 2176×1224
Скрін

Лаунчер екосистеми на девʼять крапок, десктоп. CB3 2537:13172.

cases/cb-tools/img_cb_10.jpg@2x 3360×1890
Скрін

Головна на 360, повна довжина. CB3 2407:12937.

cases/cb-tools/img_cb_11.jpg@2x 1600×2133
Скрін

Те саме меню екосистеми на мобільному. CB3 2653:6067.

cases/cb-tools/img_cb_12.jpg@2x 1600×2133

Farms

One feature, two presentations.

Farms are a table of yield pools. Every row has a state machine underneath it: wallet not connected, connected but contract not approved, approved but nothing staked, staked and earning, finished. Five states, and every one needs a different button.

I drew it in two presentations, switchable from a toggle. The grid puts each pool in a card with the state as a single button at the bottom and a Details disclosure holding liquidity, contract and pair links. The list puts the pools in a dense table and, on expand, lays the state machine out as three numbered steps: get the token, unlock the wallet and stake, harvest.

The numbered-step expansion is the decision worth pointing at. In the card the state is one button and the user has to infer what comes next. In the list the whole sequence is visible at once and only the current step is lit. Same data, same states, two different levels of hand-holding, and the user picks which one they want.

Скрін

Ферми картками: стан пулу як одна кнопка внизу картки. КРОП КОНТЕНТУ, без хедера і футера. CB 1 325:5147.

cases/cb-tools/img_cb_13.jpg@2x 1600×900
Скрін

Ферми списком: розкритий рядок розкладає стан на три пронумеровані кроки. КРОП ТАБЛИЦІ, без хедера і футера. CB 1 325:7017.

cases/cb-tools/img_cb_14.jpg@2x 1600×900
Скрін

Ферми на 720. КРОП контентної зони. CB 1 325:4526.

cases/cb-tools/img_cb_15.jpg@2x 1600×900
Скрін

Ферми на 960. КРОП контентної зони. CB 1 325:4882.

cases/cb-tools/img_cb_16.jpg@2x 1600×900
Скрін

Ферми на 360, тільки колонка карток. КРОП. CB 1 325:4020.

cases/cb-tools/img_cb_17.jpg@2x 1600×2133
Скрін

Ферми на 540, тільки колонка карток. КРОП. CB 1 325:4277.

cases/cb-tools/img_cb_18.jpg@2x 1600×2133

States

States, not screens.

The part of the work that does not photograph as screens and matters most.

Liquidity is a single 1920 by 13,666 frame holding roughly eighteen states of the add-and-remove flow stacked vertically: empty pool list, import pool, pair selected, amounts entered, share preview, the amber price-impact warning, the removal slider, the confirmation. Not eighteen pages. One vertical map you read like a spec, which is exactly what a developer needs when the flow is conditional rather than linear.

The transaction modals live on a board 11,980 by 2,408: about twenty-four states in a row, dark on top and light below, covering the whole path from selecting a token to a submitted transaction.

Wallet panels have real skeleton loaders as their own component set, with the shimmer blocks matching the shape of the content that replaces them. The product waits on a blockchain, so the waiting state is a design surface, not a spinner.

Скрін

Полотно ліквідності цілком, 1920 на 13 666: вісімнадцять станів флоу згори вниз. Зменшити так, щоб уся колонка влізла. CB3 2440:17146.

cases/cb-tools/img_cb_19.jpg@2x 3360×4480
Скрін

Три сусідні стани того самого полотна крупно, включно з бурштиновим попередженням про вплив на ціну. Кроп з CB3 2440:17146.

cases/cb-tools/img_cb_20.jpg@2x 1600×900
Скрін

Стани виведення ліквідності зі слайдером, темна тема. CB3 2440:19311.

cases/cb-tools/img_cb_21.jpg@2x 1600×900
Артефакт

Дошка модалок, 11 980 на 2 408: двадцять чотири стани транзакційного флоу, темний ряд зверху, світлий знизу. CB3 3067:15498.

cases/cb-tools/img_cb_22.jpg@2x 3360×1890
Скрін

Та сама дошка, кроп послідовності підключення гаманця: вибір, QR WalletConnect, очікування, відхилено, відправлено. CB3 3067:15498.

cases/cb-tools/img_cb_23.jpg@2x 1600×900
Скрін

Skeleton-лоадер поруч із завантаженою панеллю: форма мерехтіння повторює контент, який стане на його місце. CB3 3088:18761 і 3086:17580.

cases/cb-tools/img_cb_24.jpg@2x 1600×900
Артефакт

Матриця станів UI-кіта: кожен контрол проти Default, Hover, Pressed, Active, Disabled, темна і світла поруч. CB3 2650:3546.

cases/cb-tools/img_cb_25.jpg@2x 3360×1890

Charts

A terminal that holds sixteen markets.

The analytics product of the ecosystem. The token page runs three columns: contract and pool information on the left alongside a safety check panel covering honeypot, buy and sell tax, pausable transfers, proxy contract, creator liquidity share and blacklist. The middle holds the chart and a six-tab trade book with filters over amount, value, price and date range. The right holds swap and portfolio. Both side columns collapse.

The multichart grid is the headline. The empty state promises sixteen tokens at once, and the file delivers on it with thirteen distinct layouts: one chart fills the canvas, two split it, three sit in a row, then the grid starts mixing sizes, three large over four small, two wide over two rows of four, three by three, four by three. Charts do not just shrink as you add them, the whole grid re-forms.

Charts are added through a modal that counts against the cap and re-ordered by dragging, with a dashed drop zone.

Артефакт

Як сітка перекладається: зібрати в одну дошку розкладки на 1, 4, 7 і 12 графіків. Charts 6503:6859, 6503:8554, 6503:13227, 6503:25249.

cases/cb-tools/img_cb_26.jpg@2x 3360×1890
Скрін

Порожній стан мультичарта, обіцянка на шістнадцять токенів. Charts 6503:7234.

cases/cb-tools/img_cb_27.jpg@2x 1600×900
Скрін

Перетягування графіка, видно пунктирну зону Place here. Charts 6503:9815.

cases/cb-tools/img_cb_28.jpg@2x 1600×900
Скрін

Ліва колонка Charts крупно: інформація про контракт, пули ліквідності, safety check на шість перевірок. Кроп з Charts 6503:1922.

cases/cb-tools/img_cb_29.jpg@2x 3360×1890
Скрін

Панель фільтрів тредбуку: три двобічні слайдери плюс діапазон дат. Charts 6503:4305.

cases/cb-tools/img_cb_30.jpg@2x 1600×900
Скрін

Модалка додавання з лічильником проти ліміту, Add chart 3/16. Charts 6503:7448.

cases/cb-tools/img_cb_31.jpg@2x 1600×900
Скрін

Термінал на 360 з пʼятивкладковим таббаром. Charts 6503:29030.

cases/cb-tools/img_cb_32.jpg@2x 1600×2133
Скрін

Своп на 360, той самий таббар. Charts 6503:28614.

cases/cb-tools/img_cb_33.jpg@2x 1600×2133

System

The same product on current tooling.

Theming was designed in from the first screen, with the means that existed then: paired day and night styles, naming discipline, state matrices. Figma variables did not exist at the time, they arrived two years later, so all of that logic rested on convention.

Once the tooling caught up, I came back to this product and rebuilt the layer under the Charts screen as a real token system. It came to 285 variables in six collections and twelve modes: four themes including two high-contrast, two brands, two densities, two typefaces. 43 component sets, 332 variants, 26 text styles bound across all five font fields, 13 effect styles with bound colours, 3,421 icons.

The proof sits in the same file: the same Charts terminal assembled entirely from the system, plus seven renders of one mobile component tree, one per mode. Nothing is redrawn between them, a collection switch does the work. A scan walks 4,730 nodes and finds no violations, and 44 of 44 contrast pairs pass WCAG across four themes.

The original day and night styles are deprecated rather than deleted: 12,399 fills still use them, and each carries its nearest new token in its description. That makes the migration incremental instead of a rewrite.

Артефакт

Матриця модів: сім мобільних рендерів одного дерева в ряд, Dark, Light, Light HC, Dark HC, бренд Vertex, Compact, Sora. DS 10504:10522, 10537, 10552, 10567, 10582, 10597, 10612.

cases/cb-tools/img_cb_34.jpg@2x 3360×1890
Артефакт

Семантичні токени в усіх чотирьох темах: один токен, чотири значення, хекси видно. DS 10505:13389.

cases/cb-tools/img_cb_35.jpg@2x 3360×1890
Скрін

Той самий термінал Charts, перезібраний повністю з системи. DS 10506:108457.

cases/cb-tools/img_cb_36.jpg@2x 1600×900
Скрін

Контрастна матриця WCAG, 44 з 44 пар. DS 10505:12948.

cases/cb-tools/img_cb_37.jpg@2x 1600×900

Method

What I carried forward from this.

Adaptive is a design decision, not a developer guess

Every page exists at all five widths, drawn rather than left to interpretation. Where a grid had to re-form instead of shrink, the mockup says so, and engineering was never left asking how a screen should behave. That is the approach I carried into component library work, where variants and constraints now do the same job.

A conditional flow hands over as a map, not a stack of screens

I deliver conditional flows on a single canvas with the states in sequence and every branch visible at once: adding liquidity, the price-impact warning, removal, confirmation. Same with transaction modals, all twenty-four in both themes on one board. A developer reads that as a spec instead of assembling the flow from scattered screens.

States matter more than screens

In DeFi half the interface is waiting and failure: wallet not connected, contract not approved, transaction rejected, data still coming off the chain. So every control carries a matrix of Default, Hover, Pressed, Active, Disabled and Loading across both themes, and panels that wait on the chain have their own skeleton components. A loading state is a design surface, not a default spinner.

The system gets built when the tooling allows it

Theming was designed in from the first screen with the means available then: paired styles, naming discipline, matrices. Once variables and modes arrived, I came back to the same product and moved that logic onto tokens, migrating through deprecated styles rather than rewriting the file. The product did not change; the cost of the next change did.

Outcome

Delivered to engineering and built.

The design was handed to the engineering team and the product was built. There was no public release: a client decision, and one that sits outside the design. So there are no business metrics here, and I am not going to invent any.

What can be verified is in the figures below: scope, breakpoint coverage, themes, and the system built over this product afterwards.

screens drawn, 153 of them unique

198

breakpoints: 360, 540, 720, 960 and 1140, on a 1920 canvas

5

themes, drawn as a pair rather than derived from each other

2

variables in the design system built over this product

285

Let's build something great!

Telegram t.me/dpush91 Email d.push91@gmail.com Phone +380 63 794 99 51 LinkedIn /in/dmytro-karpushyn CV PDF, one page
Services
Budget, USD
PDF, DOC, PPT, XLS, TXT or an image, up to 10 MB

© 2026 Dmytro Karpushyn · All rights reserved privacy policy

Dmytro Karpushyn

Wrong code