Skip to content

Guardaito

In Progress

Multi-currency finance for the real world.

Next.js 16React 19tRPC v11TypeScriptTailwind CSSshadcn/uiFramer MotionPostgreSQLNeon ServerlessDrizzle ORMClerkNanostoresTanStack QueryBunTurborepo

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

Dashboard
Guardaito dashboard showing balance, daily spending, and free money widget
Accounts
Guardaito accounts page with multi-currency balances and wallet breakdown

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.