← Blog · May 12, 2026 · 11 min read
Founder Essay

Confessions of an Indie Finance App Builder: 14 Prototypes and a Chat

I have been trying to build the right money tracker for myself, off and on, since 2017. I built fourteen versions before the one I still use. This is what I learned, including the bug that cost me a paying customer, and why the answer turned out to be a chat.

This is a founder essay, written in my own voice. It is not the Capi product page. If you came here for a pricing comparison, the best money tracker for 2026 post is more useful. This one is the long answer to "why I built Capi" as an indie finance app, what the failed attempts taught me about how people actually behave with their money, and the small set of decisions that finally made the fifteenth version stick.

The Mint years, and why they ended

I started using Mint in 2017. I lived in Moscow at the time, with a US bank account from a previous job, a euro account for a side project, and a Russian card for daily spending. Mint was honest with me about exactly one of those, the US one, and it cheerfully ignored the other two. For years I told myself this was a US-only product behaving like a US-only product. I made peace with the gap.

By the time Intuit announced in November 2023 that it was shutting Mint down, I had already drifted away from it. The auto-categorization had quietly gotten worse, the rules I had written did not survive a UI refresh, and the only number I trusted was the export to CSV that I cleaned up myself in a spreadsheet once a quarter. The official shutdown date was March 23, 2024. I logged in one last time, exported everything to a folder I named mint-archive, and never opened it again. Intuit pointed everyone at Credit Karma, which is a credit score product wearing budgeting clothes. The transition kept account balances and three years of transactions, but the budgeting features that made Mint useful did not come along.

The Mint years were not wasted. They taught me what the bank-feed model gets right and what it does not. The right part: most spending is on cards, so most of it can be pulled from a feed without me typing anything. The wrong part: any transaction not on a connected card (cash, Wise, foreign currencies, peer transfers, anything in an old account whose token expired) is silently missing, and most users never notice until something big has drifted.

The fourteen prototypes

Between Mint and Capi, I built fourteen versions of a money tracker for myself. Some were weekend hacks, some ran for a year. None of them survived contact with a real month for more than two cycles.

  1. Sheets v1, 2018. A Google Sheet with one tab per month. Manual entry, formulas for category subtotals. I used it for two months before I started skipping days, and once you skip days, the sheet is a museum, not a tool.
  2. Sheets v2, 2019. A more ambitious Sheet with a Form-based entry on my phone. The Form added two taps and three seconds, and that was enough to make me forget the transactions until evening, by which point I had already forgotten the small ones.
  3. Notion, 2019. Database-backed, beautiful, slow. The Notion mobile app took four seconds to open on my phone in 2019. I tracked for nine days.
  4. Sheets v3, 2020. Apps Script triggered on a webhook from IFTTT, which read my SMS. Russian banks did not send well-formatted SMS, and the parser broke on every third message. Abandoned in a month.
  5. iOS app v1, 2020. SwiftUI, TestFlight only. The opening screen was a category picker, eleven buttons in a 3x4 grid. Opening it felt like a duty. I used it twelve days.
  6. iOS app v2, 2021. Same idea, prettier. Used it nine days.
  7. iOS app v3, 2021. With Siri Shortcut integration. The Shortcut worked exactly the way I had hoped, but my Siri trigger only succeeded about sixty percent of the time, and a tracker that drops four in ten transactions is worse than nothing.
  8. Discord bot v1, 2022. For a server of friends. People liked it, including me, for about three weeks. The bot lived inside a Discord server I did not check often enough.
  9. Discord bot v2, 2022. A private one-person server. Worked better. Lasted seven weeks. Then I switched phones and never reinstalled Discord.
  10. Slack app, 2022. For a tiny team budget at a side venture. Useful for the team. Did nothing for personal tracking.
  11. macOS menu bar app, 2023. A SwiftUI menu bar dropdown for logging spending while I worked. It assumed I was at the laptop when I spent the money. I am not, mostly. The cafe is not at the laptop.
  12. Gmail receipt scraper, 2023. A Chrome extension that read my Gmail receipts and posted them to a webhook. It caught about a third of my spending (online subscriptions, Amazon, ride-hails) and missed the other two-thirds (cafes, groceries, anything in cash or abroad). The third it did catch was the third I least needed help with.
  13. Voice memo parser, 2023. Apple Voice Memos plus a daily script that ran Whisper locally on my Mac. It worked. It also assumed I would tag the memo at recording time and then sync to the Mac that night. Two phones and one trip to Brazil broke that habit.
  14. React web app, 2023. The last serious app attempt. Self-hosted, password-protected. Beautiful. I logged the build process more carefully than I logged my spending.

The pattern is one I did not see until prototype thirteen. Every failure shared a property: the tracker lived somewhere I did not already live. Notion, my own apps, Discord, a self-hosted React page, my Mac. I had to remember to open them. The act of remembering was the friction, and the friction was the killer. The amount of will required to log a coffee should be smaller than the will required to drink it. If it is not, you eventually stop.

The fifteenth attempt

In late 2023, I started a Telegram bot. The first version was eighty lines of Python that took a message, parsed it with a regex, and stuck a row in a Postgres database. It did not classify. It did not chart. It did not even confirm. It just received and stored.

I used it for a week without breaking the habit, which had never happened with anything else. The reason was not the feature set; the feature set was barely a feature. The reason was that I open Telegram thirty times a day to talk to friends and read groups, and the bot lived in the place I was already standing. Opening it cost zero seconds.

The next four months were spent slowly adding the parts that made the bot actually useful: a small LLM that classified transactions into categories, a currency detector that understood that "5 BRL" was different from "5 USD", a photo handler that pulled the total off a receipt, a voice handler that ran the audio through Whisper. None of those were novel in 2024; what was novel for me was that they were all surfaces of one conversation, not separate screens of an app. You spoke to the same chat, you got back the same one-line confirmation, the categories accumulated without you opening anything.

By summer 2024, the bot was useful enough that a friend asked if she could try it. By autumn, three more had tried it. By the start of 2025, a stranger paid me ten dollars for a month of it on Telegram Stars. That was the moment Capi stopped being a personal tool and became a product. I was unprepared for that moment in most of the ways you would expect, and a few you would not.

The bug that cost me a paying customer

Early 2025, three weeks of January. A user in Brazil reported that her voice messages were not turning into transactions. She sent a screenshot of the bot saying "I did not catch that" five times in a row. I assumed Whisper was hallucinating on Portuguese, which it does occasionally on noisy audio, and I asked her to try again. She did. Same result. I asked her to retry in a quiet room. She did. Same result.

What I had not realized was that her Telegram voice messages were arriving in the .oga container (Opus inside Ogg), and my handler was rejecting that extension before the file ever reached Whisper. The audio I had been testing on my own devices came through as .ogg, which my code accepted. Her files came through as .oga, which my code dropped. Two days after her third "still broken" message, she cancelled her subscription. Her cancellation note said, in Portuguese, that she had tried hard but the voice feature did not work for her. It was the politest cancellation note I have ever received, and the most preventable.

I shipped the fix that week. The change list in the bot's internal patch log calls it the feature. The fix was forty lines, including the test. The expensive part was not the code; it was the assumption that the user was wrong before I had checked. Indie developers cannot afford that assumption. Nobody is on retainer to test your bug fix; if the product does not work the first time, they leave with their ten dollars and they tell one friend.

The lesson, written down so I do not forget it. When a paying user reports a bug that I cannot reproduce on my devices, the first hypothesis is that my devices are missing the case, not that the user is wrong. The second hypothesis is the same as the first.

People lie to apps. They are honest with chats.

The most useful thing I learned in 2025 was about behavior, not code. People lie to finance apps. Not on purpose; the form encourages it. A field that asks for a category, an amount, a date, and an account asks the brain to round. The five-fifty turns into five. The food court turns into "restaurant." The date drifts to whenever the app was opened, not when the transaction happened.

In a chat, the same person types "5.50 cafe" the moment they leave the counter, because typing is closer to the way they would tell a friend, and the friend gets the cents. The transaction is more accurate not because the bot is smarter (it is not), but because the human is less performative when speaking to something that feels less like a ledger and more like a friend with a notepad.

The other half of the same insight is the chat advisor. When users ask the bot questions like "did I spend more than usual on food this month," the answers they accept are the honest ones, not the encouraging ones. I noticed that messages framed as flat reporting ("groceries were $612 this month, up 22% from your 3-month average") got engagement. Messages framed as cheerful coaching ("Great job tracking! Let's see how you did!") got mute. The bot is not your friend, and pretending otherwise is condescending. The bot is a note-taker that you trust because it does not flatter you.

What I would tell another indie developer building a money tracker

Four things, in order of how much pain they would have saved me.

  1. Pick a surface that is already in the user's pocket. If your tracker needs its own app icon, you are competing against every other icon. Telegram, WhatsApp, iMessage, SMS, email; pick the one your audience already opens twenty times a day. The friction of opening a new app at the moment of spending is the entire game. Everything else is downstream.
  2. Do not build bank linking on day one. Plaid is expensive, the connection token expires every few months, and the support load of one bank breaking is high. Manual entry feels worse on paper and is better in practice for the first thousand users. The slice of users who would never log manually self-select out, which is fine; the slice that does log manually self-selects in, which is your real audience.
  3. Test on Android first. The world is not iPhone-only. Half of my Brazil cohort and most of my Russia and India cohort are on Android. The.oga incident would have surfaced in a week if my dev phone had been Android instead of an iPhone.
  4. Honest comparisons in your marketing. Naming Mint, YNAB, Monarch, and Copilot fairly, and admitting where each one beats you, makes the customer more likely to stay because they made an informed choice. Hiding the comparison creates buyers who churn the second they discover a feature you do not have.

The honest comparison, since I brought it up

Here is the table I would have written in 2017 if I could have read it.

NeedBetter than CapiWhy
Strict envelope budgeting in USDYNAB ($109/yr)Method-first product, opinionated about zero-based budgeting
US dashboards, Plaid feeds, net worthMonarch ($99.99/yr Core)Closest spiritual successor to Mint, US-centric by design
iPhone aesthetic, single currencyCopilot ($95/yr)The prettiest single-currency iOS app on the market
Multi-currency, voice, photo, no bank linkCapi (Free to $69.90/yr)Chat surface, source-currency at capture, seven languages
Free, US-only, with adsCredit KarmaIt still exists, kind of, but the budgeting features did not survive Mint's migration

Capi is not the right tracker for every reader of this essay. It is the right tracker for the reader who lives in more than one currency, speaks more than one language, opens Telegram more than email, and does not want to wire a bank into a third-party app. That description was me in 2018. It took me nine years and fourteen prototypes to build the thing for it.


Try the fifteenth prototype.

Capi runs in Telegram. Free tier, no card, no bank link.
Log spending in voice, photo, or text. In seven languages.

Try Capi Free on Telegram →

Frequently asked questions

Why did you build a money tracker when Mint, YNAB, and Monarch already exist?

Because none of them worked for me the way I actually live. Mint shut down on March 23, 2024 (I had used it on and off since 2017). YNAB at $109 a year is a fine product, but its envelope method demands a planner's brain, and I am not a planner; I am a noticer. Monarch at $99.99 a year for Core is the closest spiritual successor to Mint, but like Mint, it is built around US bank feeds, which is a problem when you spend in three currencies and your largest account is a Wise multi-currency wallet. Copilot at $95 a year is iOS-first; I write code on a Linux laptop. The wedge for Capi was not features. It was the surface: a chat I already open thirty times a day, in seven languages, that doesn't need bank linking to start.

How many prototypes did you build before Capi?

Fourteen, depending on how you count. The first four were spreadsheets, three of them in Google Sheets and one in Notion. The next three were iOS apps in TestFlight, none of which I kept open past week two. There were two Discord bots, one Slack app for a team budget, one SwiftUI macOS menu bar app, one Chrome extension that watched my Gmail receipts, one Mac-only voice memo parser, and one web app with a React front end. None of them survived contact with a real month. The fifteenth attempt was a Telegram bot, started in late 2023. It is the one I am still using.

Why a Telegram bot and not an app?

Because the app I open the most is not a finance app; it is a messaging app. Telegram on my phone has near-zero cognitive load. I log a coffee the same way I tell a friend I am running late. There is no install screen, no onboarding, no second password, no second notification stack to ignore. For tracking specifically, a chat surface beats an app because the act of typing or speaking a transaction is the same act you would take to remember it. The app forms its own friction. The chat removes it.

What did you learn about how people behave with a chat versus an app?

People lie to apps. Not deliberately; the form encourages it. When the screen asks for a category, an amount, a date, and an account, the brain rounds. The five-fifty turns into five, the food court turns into 'restaurant', the date drifts. In a chat, the message is usually accurate to the second because the entry happens at the counter. A bot also feels less judgmental than a dashboard. People will tell a chat, in plain words, that they spent three hundred and thirty on a pair of headphones they did not need. They will not type that into a form.

What was the bug that cost you a paying customer?

A voice transcription bug. For about three weeks in early 2025, Capi's Telegram audio handler ignored Opus audio sent in the.oga container, which is one of the file extensions Telegram uses for voice messages depending on the client and platform. The bot would receive the file, fail to transcribe it silently, and reply with a generic 'I did not catch that' message. A user in Brazil reported it on day eleven; I assumed it was Whisper hallucinating and pushed back on the report. Two days later they cancelled. I shipped the.oga handler later that week (the change list calls it the feature). Nobody is forced to test your bug fix; they just leave.

Is Capi a venture-funded company?

No. Capi is bootstrapped and runs on a single Hetzner VPS with the bot in Python, a Postgres database, and a small set of third-party API calls (OpenRouter for the classifier, Groq for Whisper, OpenAI as a fallback). The monthly server cost is under $40. I am the only engineer. The product is what it is because I am paying for the LLM tokens out of revenue, which keeps me honest about cost per transaction and protects me from feature drift.

How does Capi compare to Mint, YNAB, Monarch, and Copilot honestly?

Mint is shut down. YNAB ($109 a year) is better than Capi if you want a strict zero-based envelope methodology and you live mostly in one currency. Monarch ($99.99 a year for Core) is better than Capi if you want a US-centric dashboard with auto-categorized Plaid feeds and net worth tracking. Copilot ($95 a year) is better than Capi on an iPhone if Apple is your whole world and you want the prettiest single-currency app on the market. Capi is better than all of them if you log spending in multiple currencies, speak more than one language, want voice or photo or text entry, do not want to connect a bank, or already live in Telegram for other reasons. Pick whichever description sounds more like you.

What is the price of Capi?

There is a free tier with thirty entries a month, no card required. Capi Monthly is $9.90. Twelve months is $69.90, which is $5.83 per month. Capi Together for couples is $99 a year for two people. Compared to YNAB at $109 a year for one person, or Monarch at $99.99 for one or $299 for the Plus tier, Capi is the lower-priced option, intentionally, because the model runs on cheap small LLMs and the unit economics work.

Written by Daniil Kozin, founder of Capi. More from this series: The best money tracker for 2026 · Emergency fund runway by country · Budget paid in two currencies · Voice expense tracker test · AI money tracker 2026 · YNAB alternatives without the fee · Track expenses without a bank account · Split expenses with unequal income · Read your bank statement · Money tracker pricing trap · Credit card installment tracker · Money tracker for couples 2026 · 12 re-uploads, 6 apps tested · Mint alternative 2026 · 5 money apps with our partner for 90 days · Why ChatGPT is worse than a real tracker · Text vs tap.