1 / 17
Tally — Local-first finance
A personal finance app designed around clear financial visibility, thoughtful interactions, and making imported data easy to understand and review.
Money data rarely arrives clean. I kept running into statements, receipts, pasted text, email, and manual entries that all disagreed about the same spend. Most apps treated every import as correct anyway.
I built Tally around that mess. It normalizes input, fingerprints duplicates, categorizes with confidence gates, and parks anything ambiguous in a review queue before it shapes the picture. SQLite is the on-device source of truth, and sync pushes sanitized changes through a durable outbox.
The project taught me that finance tools earn trust by making uncertain imports reviewable, not by pretending every import is correct.
Scope
Imports, review queue, finance tools, on-device SQLite, sync outbox, and privacy boundaries. Active development, no public launch claims.
Local writes first
SQLite is the on-device source of truth. Mutations write locally, enter a durable outbox, sync to Convex, and pull remote changes using an updatedAt watermark.
- 1.Write to SQLite
- 2.Queue outbox event
- 3.Push sanitized change
- 4.Resolve conflict
- 5.Pull by updatedAt
- 6.Apply locally
Interaction details
- Local writes first: mutations land in SQLite, then enter a durable outbox before sync.
- Confidence-gated categorization keeps uncertain automation in a review queue.
- Raw receipt content and OAuth tokens stay out of sync payloads.
- Demonstrations use deterministic fictional accounts and transactions.
Stack
React Native, Expo 54, Expo Router, TypeScript, SQLite, Zustand, Convex, Uniwind.
How it works
Trustworthy input
The difficult part is making inconsistent financial input reviewable rather than pretending every import is correct.
- Text, CSV, PDF, optional Gmail receipt, and Apple Wallet Shortcut inputs.
- Normalization and fingerprint-based deduplication across formats.
- Editable category rules, confidence gates, and a review queue.
- Accounts, budgets, subscriptions, debts, reminders, wishlist, tax profiles, and insights.
Privacy boundary
Raw receipt content and OAuth tokens are excluded from sync payloads. The demonstrations use deterministic fictional accounts and transactions.
Current state
Tally is in active development. No public launch, customer count, adoption, savings, or performance claim is made here.














