Budgetly – Personal Finance iOS App

A multi-currency personal finance iOS application that helps users track expenses, manage budgets, and analyze net worth across different accounts and currencies with collaborative shared spaces and intelligent analytics.

Founder & Sole iOS/Backend Engineer2024 – Present4 min read

Tech Stack

SwiftSwiftUIGo (Golang)PostgreSQLAWSStoreKit 2TerraformAmazon SES

#Overview

Budgetly is a personal finance iOS app built entirely solo — from the Swift/SwiftUI frontend to a Go backend running on AWS. It solves a real gap in the market: most finance apps force you into a single base currency, sacrificing context for users who naturally spend across multiple currencies.

The app is live on the App Store and supports expense tracking, budget management, net worth analysis, collaborative shared spaces for families, and intelligent analytics that adapt to user behavior — all with a clean, Apple-native interface.

#Screenshots

Budgetly app screenshot 1
Budgetly app screenshot 2
Budgetly app screenshot 3
Budgetly app screenshot 4
Budgetly app screenshot 5

#What We Built

#Multi-Currency Transaction Engine

Most finance apps convert everything to a base currency on entry — losing the original context forever. Budgetly stores both the original amount and an optional converted value, preserving exact decimal precision, exchange rates, and timestamps. This means users can always see what they actually spent, in the currency they spent it, with full audit history.

#Intelligent Analytics

Rather than static charts, Budgetly surfaces context-aware insight cards that adapt to user maturity. New users get onboarding guidance; active users see spending anomalies and category breakdowns; advanced users get trend analysis and savings opportunities. The backend analytics engine profiles each user and generates relevant insights without overwhelming them with data.

#Collaborative Shared Spaces

Families and couples can share budget spaces through a Universal Links invitation flow — no manual code entry. Members see real-time updates, shared transaction history, and joint budget progress. Invitations have expiry, ownership validation, and are handled idempotently on the backend to prevent duplicate joins.

#Scalable Backend Infrastructure

The Go backend follows clean architecture with dependency injection and comprehensive error handling. PostgreSQL uses materialized views and strategic indexing to keep analytics queries fast as transaction history grows. Everything is provisioned with Terraform on AWS, with Redis for caching and Amazon SES for transactional emails.

#Subscription & Premium Access

StoreKit 2 handles on-device purchase validation for immediate UX feedback, while the backend independently verifies receipts with Apple's servers. Webhooks handle subscription lifecycle events idempotently. Users who prefer not to subscribe can access premium features through a one-time premium code — a flexibility that's rare in this category.

#Internationalization

Full i18n across 8 languages: English, Spanish, Indonesian, Vietnamese, Portuguese, French, German, and Hindi. Localization goes beyond string translation — date formats, currency display, and financial workflows respect cultural conventions per locale.

#Impact & Results

  • Solo full-stack delivery — iOS app, Go API, PostgreSQL schema, and AWS infrastructure, built and shipped by one engineer
  • Scalable by design — architecture supports 10,000+ concurrent users with auto-scaling from day one
  • 5-star App Store rating — early users highlight the UX quality and multi-currency handling
  • Sub-200ms API responses — achieved through strategic caching and pre-aggregated analytics
  • 99.9% uptime — production infrastructure with monitoring, alerting, and automated recovery
  • 8-language support — reaching users across diverse markets with culturally appropriate experiences

#Technical Highlights

Why Go for the backend? Performance and concurrency. Financial workloads involve many parallel operations — exchange rate fetches, analytics aggregation, subscription validation — and Go handles these cleanly without the overhead of Node or the complexity of Java.

Why Terraform? Reproducibility. The entire AWS infrastructure is version-controlled and can be torn down and rebuilt in minutes. This is critical for a solo project where there's no ops team to manage manual configurations.

Why snapshot-based net worth? Real-time recalculation across thousands of transactions becomes expensive fast. Daily snapshots with incremental updates for recent changes keep the UI responsive regardless of transaction history size.

Why StoreKit 2? The modern API provides on-device transaction verification, reducing server round-trips for the common case while still enabling server-side validation for security and webhook handling for subscription state changes.

Key Challenges

  • Multi-Currency Integrity
  • Analytics Performance
  • Subscription Validation Security
  • Internationalization (i18n)

Impact & Results

  • Built entire product solo
  • Designed scalable backend for 10k+ users
  • Improved analytics UX with actionable insights
  • Production-ready infrastructure with Terraform

Subscribe to my space 🚀

Stay updated on my Blogs about Automation Test, Swift & iOS, Software Engineering, and book reviews.

100% free. Unsubscribe at any time.