Koinly works out your crypto taxes. You connect the exchanges, wallets and blockchains you've used, Koinly pulls in every transaction, and once they all add up, the tax report is a download. Its users run from first-time filers to DeFi traders and accountants with hundreds of clients.

Robin Singh, Koinly's founder and CEO, got in touch in January 2026. In five years in market the product had mostly been designed by its engineers as they went. Koinly was rebuilding its front end on shadcn, and over six weeks, from late January to early March, Prakash and I redesigned the web app to go with it: the look, a design system on shadcn's components, and the main screens. I took the UX, Prakash the visual work.

Koinly's redesigned dashboard: total value and a chart, a row of in, out, income and gains figures, an allocation bar, and the holdings table

Crypto tax is mostly reconciliation

Robin described Koinly in three steps: connect your data, reconcile it, download the report. The middle step is where people spend their time.

To calculate a gain, Koinly needs to connect a disposal with what the asset originally cost. If a coin turns up in a wallet without its earlier history, the calculation may be missing its cost basis. Someone has to find where it came from. Transfers between a person's own wallets make this particularly easy to get wrong: the coins have moved, but they haven't necessarily been sold.

So most of the product is finding and fixing gaps: missing wallets, transactions that look wrong, a transfer between two of your own wallets read as a sale. The interface needed to make those problems approachable for a first-time filer while preserving the detail and bulk tools an accountant needs.

Playful, but you'd trust it with your tax return

Robin pointed us at Claude and Intercom for clean interfaces people trust, and Wise for clear fintech writing.

Our first round leaned too hard on those references. Robin said it looked like Koinly's dashboard inside Claude, and he had checked: he'd given Claude the same two screenshots and got much the same mock in two prompts. He wasn't sure it was worth carrying on.

That feedback moved the discussion from the application shell to the detail inside it. We agreed to continue through the second week and make the dashboard specific enough to judge. The next round cut back the rounding, tried monospace for the big figures and filled in the tables. A week later he called it a level up.

the new look had to work in the tables, not only around them

Keep the detail, share the controls

Robin wanted the dashboard's holdings table reused for wallets and transactions, so the tables share one design. Sort and filter controls sit in each column header, because Robin asked of the first round how anyone would know a column could be sorted. Add sits on the left of the toolbar, next to Filters and search. That one was mine: a button in the top right corner gets missed.

The transactions list, grouped by day, each row showing the type, the wallet, the amount in crypto and in pounds, and the transaction hash

Someone reconciling a long trading history needs to narrow the list without losing track of what they asked for. Filters open as chips under the toolbar, where the selected categories and counts stay visible. Selecting rows brings up a bar to tag or delete them in bulk. Those controls support detailed work without making every transaction row carry all the available actions.

Filtering transactions by currency and type from chips under the toolbar Selecting transactions, with a bar to select all, tag or delete them
bulk actions appear with the selection

Adding a wallet starts with one search box

Adding a wallet is the first thing anyone does in Koinly, so we designed it early. It opens on one field to paste a wallet address or search by name. Pick an exchange and auto-sync is recommended over importing a file. Both routes remain available, with a short explanation of what each one does. The person starts with what they know, such as Coinbase or a wallet address, before choosing how to import its history.

Adding a wallet: one field to paste an address or search, with exchanges laid out as a grid Connecting Coinbase, with auto-sync recommended over importing a file
recommend a route without hiding the alternative

Sign-up asks who you are

The first question after sign-up is whether you're an individual, a business or an accountant. The next asks whether you want tax reports or just portfolio tracking. Those are different reasons to connect the same financial history. We made the distinction explicit during setup, alongside home country and base currency, so a person could describe the job they wanted Koinly to do without first understanding its navigation.

the same data can serve a tax return or a portfolio

Setting up an account as an individual, a business or an accountant Choosing tax reports or portfolio tracking only, with home country and base currency

Settings explain themselves on the page

Robin's first ask was to lean less on tooltips, settings especially. Our first concept put every setting on one full page; he liked it, and sent a screenshot with the titles down the left to try too. A line under every field says what it does, like the timezone deciding where your tax year starts and ends. The help stays beside the choice instead of requiring a hover to discover it. Grouping the settings mattered too: base currency, home country and the tax calendar need to be understandable together, while more specialised rules can sit further down the page.

Koinly's settings as a full page: base currency, home country, timezone, tax year start and income rules, each with an explanation under it
explain the consequence beside the setting

The tax report starts with what needs fixing

A report is only as good as the history under it, so the report page opens on what needs reviewing: wallets with problems, and how many transactions the report is built on. The year's gains, income and costs come after. This puts the condition of the underlying data before the apparent precision of the result. The review warning keeps those checks visible even when someone arrives at the page ready to download.

show what needs reviewing before presenting the report as ready

The tax report page: a review warning, a summary of gains and income, form uploads and the report download A full-screen version of the tax report, with the summary down the left and the chosen report type on the right

Plans are priced by transactions

Koinly charges per tax year, by the number of transactions in it. The plan screen shows your count up front and greys out the plans too small for it. We explored it as one page and as four steps. In the one-page version, the transaction count sits above the choices and the order summary stays alongside them. A person can see why the smaller plans won't cover their year, then check additions and the total before paying.

Choosing a tax plan on one page, with plans too small for the year's transactions greyed out and the order summary beside them
plans that cannot cover the year are visibly unavailable

Give the developers a system they can keep using

The same system needed to work outside a desktop mockup. Robin called out medium screens, very wide screens and phones. We worked through icon-only navigation for narrower layouts, a maximum width for large ones, and cards in place of tables on mobile. A dense transaction table couldn't simply shrink until it fitted.

Robin had raised the longer-term requirement in our first call: the engineers needed to add things such as settings without waiting for a designer to draw every screen. Their move from Bootstrap to shadcn gave us a shared starting point. We restyled its components and kept established behaviours where they already worked, including table filters and pagination. Reusing the same controls across the core pages also gave the developers examples of how to assemble the next one.

More from Koinly

Koinly screen
Koinly screen
Koinly screen
Koinly screen
Koinly screen
Koinly screen
Websitekoinly.io
TeamJeremy BlazePrakash GhodkeAnas Bin Zia
CategoryFintech
LocationUnited Kingdom
Period2026
Jeremy Blaze
Founder & Design Lead
Jeremy is the founder of Never Before Seen and serves as design lead on all of our projects. For over 10 years he's led product and design for over 70 early-stage companies worth $1b+ combined.