Guardaito
In ProgressMulti-currency finance for the real world.
The Problem
When your money lives across bank accounts in USD, VES, and COP, crypto wallets, and digital payment platforms like Zelle or Binance P2P, no single app gives you a clear answer to "how much money do I actually have?" Let alone "how much can I spend this week?"
The Solution
A personal finance tracker designed for people managing multiple currencies and asset types. Instead of forcing everything into one currency, Guardaito tracks each account in its native denomination and converts on display using real-time rates.
Unified Financial View
Every account (traditional bank, crypto wallet, cash, credit card, digital payment platform) shows its real balance in its native currency. The dashboard converts everything to your preferred display currency for a unified net worth view, while keeping the original values intact for accuracy.
Smart Spending Intelligence
The "free money" widget answers the only question that matters: after rent, subscriptions, and fixed expenses, what can I actually spend? Subscription tracking with pre-billing alerts warns you before charges hit. Daily spending limits help you stay on track without micromanaging every transaction.
Multi-Currency Architecture
Financial data uses numeric(20,8) precision. Eight decimal places handle crypto amounts (0.00045 BTC) while keeping fiat values exact. Exchange rates are stored per-transaction at the time of creation, so historical reports reflect what the money was worth when it moved, not what it's worth today. CoinGecko integration provides real-time crypto prices.
Preview
Key Technical Decisions
numeric(20,8) for all financial amounts
Most finance apps use floats or two-decimal precision. That breaks the moment you add crypto. numeric(20,8) in PostgreSQL handles 0.00000001 BTC and $1,500,000.00 in the same column with zero floating-point drift. The trade-off is slightly more complex formatting logic on the frontend.
tRPC with 15+ routers
The API has dedicated routers for users, accounts, transactions, subscriptions, categories, analytics, crypto, exchange rates, notifications, and more. Each router has its own Zod validation schemas, many generated directly from Drizzle ORM table definitions. Type safety from database to UI with zero runtime overhead.
Per-transaction exchange rates
Storing the exchange rate alongside each transaction instead of converting retroactively. When you deposited $100 at a 36.5 VES/USD rate in January, that's what the record shows, even if the rate is 42 today. Historical accuracy matters more than simpler queries.
Monorepo with shared packages
Three shared packages: @guardaito/api (tRPC routers), @guardaito/db (Drizzle schema + migrations), @guardaito/types (shared TypeScript types). The web app consumes all three. The upcoming mobile app will share api and types, only bringing its own UI layer.