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×2100unique 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×1890Adaptive
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×1224States 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×2133Farms
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×2133States
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×900Skeleton-лоадер поруч із завантаженою панеллю: форма мерехтіння повторює контент, який стане на його місце. 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×1890Charts
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×2133System
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×900Method
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