Kvit — business banking for Ukrainian freelancers
- Role
- UI/UX & Product Designer
- Platform
- Mobile
- Domain
- FinTechBusiness banking
- Team
- Solo concept

- Problem
- Verification, money in transit and income records: at the moments that matter, people can’t see what the bank wants from them.
- What I did
- One path from sign-up to the first payment received: verification that names the error and the fix, a tracker for foreign payments with the document request inside, and AI flags on income that show their reasons.
- Result
- Activation reached its 28% target, up from 23%. Verified accounts went from 41% to 57%, and foreign payment tickets fell by a third.
Kvit is a mobile bank for Ukrainian sole proprietors who get paid by clients abroad. In beta, 59% of sign-ups never reached a verified account, and only 23% received a first payment within 30 days. I redesigned the path from sign-up to the first dollar, and activation reached its 28% target.
Concept. Product, users and data are fictional.
Context
Kvit is five months into its beta: 32,000 sign-ups and about 11,000 monthly active users, mostly freelancers who sell services abroad. They are sole proprietors who pay 5% tax on income, and their clients pay them in dollars or euros. The quarter has one goal, activation: a first incoming payment within 30 days of sign-up. It stands at 23%, and the target is 28%.
This is a solo concept, written the way it would run in a team: a product lead, four engineers, a compliance officer, an accountant as an advisor and me. I ran the research, the hypotheses, the flows and screens, the design system and the test plan. Ten weeks of work, six of measurement.
Constraints
- Compliance. The bank can’t tell the customer the exact reason for some holds, so every hold message has to be agreed with compliance.
- No tax advice. The app can suggest, but the user decides anything that touches tax.
- Diia is an outside service. If the state ID app is down, the photo path has to work on its own.
- Ten weeks, two mobile engineers, and no view of a SWIFT payment before it reaches the bank. Anything that needs new back-office work has to earn its place.
- WCAG AA contrast for all text, in both light and dark themes.
Process
I cut the scope first. The list had onboarding, verification, two-factor login, invoices, foreign payments, tax reminders and AI tips on spending: too much for one quarter. I kept one path, from sign-up to the first payment received.
Funnel of the August cohort, 6,400 sign-ups. 38% failed verification on the first try, and only 37% of them retried. Verification became the first problem to solve.
300 support tickets. 48% were about foreign payments on hold or unclear document requests. A held payment became the second.
9 interviews. Six freelancers paid in USD or EUR, two local-only owners for contrast, and an accountant who keeps the books for about 40 of them. Compliance joined two synthesis sessions, so we knew early what we could show. The interviews explained the numbers:
A rejection without a reason feels like an accusation. 6 of 8 had failed a bank’s verification at some point; what hurt was not knowing what went wrong.
“I took the photo in my kitchen at night, glare all over the ID card. If it had said ‘glare’, I’d have moved to the window. Instead I got an email two days later.”
Marta, illustrator
Money in transit is the most stressful moment. All six foreign-currency earners described a payment they couldn’t track and a document request they didn’t understand.
Tax isn’t hard; knowing what counts as income is. Converting at the National Bank rate on the right day, and keeping own-card top-ups and refunds out of the books, is.
Cash flow beats discipline, and people split. Three of six wanted the app to set tax aside for them; three said their income is too uneven to lock any of it.
Four hypotheses, each tied to one number:
- H1. Errors with a fix and Diia first get more people verified: 41% now, target 52%.
- H2. A payment tracker with a one-tap Kvit invoice clears holds faster: 38% cleared within 24 hours now, target 60%.
- H3. Most foreign-currency earners will turn on an automatic tax pocket: target 40%.
- H4. AI flags with checkable reasons get accepted: target 60%.
For references, I studied the App Store screens of Mercury, Wise, Qonto, Revolut Business, Copilot and Payoneer, and took principles, not screens: tasks on the home screen, time and fees next to the amount, a review queue for AI. Payoneer showed what to avoid: a payment status in small grey text.
Key decisions
How do people verify?
Options: one long form, step by step with live checks, or Diia first with a photo path. Chose Diia first, with the live checks: Diia shares a verified ID, so most people skip manual review. Cost: an outside dependency, so the photo path has to be a full flow, not a fallback screen.

Where does the AI go?
Options: AI tips on spending, as the roadmap had them, or AI on incoming payments. Chose incoming payments: for this tax group, expenses don’t change the tax, and own-card top-ups and refunds in the income book do. Cost: the spending tips are dropped from the roadmap.
How do we test the tax pocket?
Options: argue about H3, or test it cheaply as a staged rollout. It was the riskiest bet: interviews split on it, and it touches available cash. The product lead and I chose the staged rollout. Cost: it is measured before and after, not against a control group.
Verification that names the error and the fix
Diia comes first; the photo path is a full flow. Engineering pushed back on custom photo checks, so we used the vendor’s three: glare, blur and cropped edges. When a photo fails, the photo marks the field that couldn’t be read, the text says how to fix it, and the screen confirms what was read correctly. A short panel explains who sees your data and for how long. Two-factor setup fits into the wait.



Foreign payments you can track
Bank requests live on the home screen, not in email. The tracker shows a payment like a parcel: what happened, what’s happening now, what comes next. An invoice made in Kvit is already the document the bank wants: the app matches it by client, amount and currency and offers it in one tap. With compliance, I rewrote 14 hold reasons in plain language; for the three they can’t disclose, the screen says what happens next and when. To fit ten weeks, the tracker has four statuses, not a full SWIFT trace.





When the money arrives, the app converts it at the National Bank rate, adds it to the income book and offers to set the tax aside. Selling dollars is usually the next step: a daily limit with a way around it, a rate that holds for a minute, confirmation and success.
AI flags that show their reasons
The AI never changes the books on its own. It flags payments that may not be income, such as own-card top-ups or refunds. In the prototype test, the plain suggestion failed: 4 of 6 people asked “why does it think so?” and tapped Yes to make it go away. So each flag shows two or three facts the user can check and a confidence word instead of a percentage: “may not be income”, never “not taxable”. The two answers have the same visual weight.




A receipt for every payment, in two themes
Kvit is short for kvytantsiia, the Ukrainian word for a receipt. Payment records, statuses and confirmations are printed on warm paper with a torn edge, dotted leaders and a document number; a credited payment gets a green stamp. Everything else stays quiet: cool grey, navy ink, one cobalt accent, Golos Text with tabular figures. Two layers of tokens and eight components make the dark theme a second set of values, and every text pair passes WCAG AA. A critique found the first pass generic, so I redid it.

States and edge cases



Result
Each decision got the cheapest test that could prove it wrong. In a moderated prototype test with 6 people in week 5, all 6 understood what the bank wanted, and 5 attached the invoice without help. One checked email out of habit, so the hold notification now opens the tracker. Two missed the error under the ID photo, so the photo itself now marks the unreadable field. An unmoderated comparison of old and new verification with 20 people in week 7: task success went from 55% to 90%, and the median time from 6:40 to 3:10.
The A/B test moved verification. 50/50 for 3 weeks, about 9,400 sign-ups: 56% reached a verified account in the new flow versus 43% in control. The other changes went out as a staged rollout, because there wasn’t enough traffic to A/B test everything. Six weeks after the full rollout, activation reached the quarter’s target of 28%, up from 23%.

Support, speed and the books. Foreign payment tickets fell from 46 to 30 per 1,000 active users, about 175 fewer a month. The median time to a verified account dropped from 26 hours to 2.5 hours; on the Diia path, it’s under 10 minutes. 74% of AI flags were accepted against a 60% target, and manual corrections to the income book fell from 2.1 to 1.3 per user per quarter. At about 6,400 sign-ups a month, five points of activation means roughly 320 more accounts receiving money every month.
One hypothesis failed. The automatic tax pocket reached 19% of foreign-currency earners against a 40% target, and 23% of those who turned it on switched it off within two weeks. I called six of them:
“It took 5% exactly when I was short for rent. I’d rather pay the tax myself, I just need to know how much.”
beta user
We kept the goal and gave control back: each credited payment offers the exact amount, one button and a reminder ten days before the deadline. In the first month, 41% of foreign-currency earners set money aside at least once, twice the reach of the automatic pocket.
One number went the other way. The share of verified users who got paid within 30 days fell from 56% to 49%. We now verify people who used to drop out, and many of them aren’t ready to invoice yet. That’s the next problem: helping newly verified users send their first invoice.
What I learned
- The strongest idea connected two features that already existed: the invoice and the bank’s document request.
- When a feature touches someone’s cash, the user should make the move; the tax pocket proved it, the one-tap offer fixed it.
- Name the riskiest bet up front: it turned the tax pocket’s failure into a planned result, not a debate.