2
0 Comments

SubBuddy v1.3.0 Is Live: Multi-Currency, Better UX, and My First Paying Customer

Hey Indie Hackers,

Quick build-in-public update from my solo SaaS, SubBuddy.

I just shipped v1.3.0, hit 50 users, and got my first paying customer (Lifetime plan).
This release was about one thing: reducing friction without compromising the privacy-first model.

SubBuddy still avoids bank connections by design. That tradeoff helps with trust, but it means UX has to be really sharp to make manual tracking feel worth it.

What shipped in v1.3.0

1) Better control over subscriptions

  • Pin subscriptions (starred items stay at the top)

  • Pause/Resume subscriptions without deleting

  • Unified status selector (Active / Paused / Canceled / Trial) to avoid conflicting states

  • Overview row click opens detail drawer (same behavior as subscriptions page)

2) Budget + spending improvements

  • Budget controls moved into the Monthly Spending card

  • Clear progress/remaining/over-budget feedback

  • Better dashboard prioritization of what matters (pinned + active first)

3) Multi-currency support (the big one)

  • Per-subscription currency in create/edit/onboarding/import flows

  • Cross-currency display in dashboard rows/cards/details

  • Analytics totals converted into the user display currency

  • Renewal emails now include converted + source values when relevant

4) UX quality upgrades

  • Full dashboard localization (English + Spanish)

  • Sidebar dark mode toggle

  • Sidebar collapsed state persistence

  • Duplicate subscription warning during add flow

  • Improved chart readability and responsive behavior

What was harder than expected

1) Cross-currency totals that are actually correct

It sounds simple until you handle edge cases:

  • missing exchange rates

  • mixed source currencies

  • not lying with blended totals when conversion fails

I ended up enforcing strict validation + safer fallbacks instead of forcing every number into one total.

Lesson: financial UX needs correctness before convenience.

2) Status logic across the whole product

“Paused” touched more than I expected: filters, calendar visibility, spend timelines, preview sorting, edit forms, and reminders.

Lesson: one new state can ripple through every query and UI assumption.

3) Keeping extension + web app taxonomy in sync

Categories/currencies drift between systems unless there’s a single source of truth.

Lesson: shared constants save you from silent data mismatches.

What changed in my thinking

I used to treat “manual entry” as the weakness.
Now I treat it as the wedge:

  • users who value privacy trust it more

  • users burned by flaky bank sync prefer explicit control

  • the product has to earn that tradeoff with faster input + better defaults

My first paying user choosing Lifetime reinforced that this positioning resonates with at least a subset of users.

Current numbers

  • 50 users

  • 1 paying customer (Lifetime)

Still tiny, but enough signal to keep pushing.

Next up

  • Better onboarding activation (time-to-first-value)

  • Faster import workflows (extension + parser improvements)

  • Pricing validation experiments (Free vs Monthly vs Lifetime)

The ask

If you were at this stage, what would you prioritize first:

  1. onboarding/activation

  2. pricing experiments

  3. acquisition/distribution

I’d love to hear what worked for you around the 50-100 user stage.

If you want to try SubBuddy:

  • Demo: subbuddy.io/demo

  • Pricing: subbuddy.io/#pricing

posted toAvatar for product SubBuddy
SubBuddy