← Projects

Deneb

Full-stack personal finance tracker — multi-agent AI backend meets a mobile-first Tauri app

Overview

Deneb is a daily-use personal finance system built in two layers. A Python backend powered by Google ADK (Agent Development Kit) orchestrates a multi-agent pipeline for expense extraction, retrieval, and visualisation — accessible via Telegram. A Tauri 2 + Svelte 5 mobile frontend provides a native-feeling iOS-style UI for managing finances on the go. The name comes from Deneb (alpha Cygni), and the app carries a subtle swan/bird theme throughout its design.

Architecture

Backend — Multi-Agent Orchestration

A Google ADK Runner manages five agents that collaborate to process financial data:

Root Agent (gemini-2.5-flash) — Orchestrator routing intents to the correct sub-agent or responding directly to chat queries
Saver Agent — Parses text, receipt photos, PDFs, and voice recordings into structured expenses. Extracts item, amount, currency, category, payment method, and optional blob attachments
Retriever Agent — Translates natural language into MongoDB query filters (date ranges, categories, comparison operators) and fetches expenses on demand
Bank Agent — Handles bank statement reconciliation, monthly CSV exports, and discrepancy reporting
Visualizer Agent — Leverages Google ADK's BuiltInCodeExecutor to generate Matplotlib charts (bar, line, pie) from expense data

Backend Infrastructure

The backend runs as a Telegram bot (aiogram) deployed to Cloud Run. Incoming messages — text, photos, PDFs, voice notes — are routed through the ADK pipeline. Receipt images are stored in Google Cloud Storage with signed URLs, expenses persist in MongoDB via the Beanie ODM, and observability is handled by AgentOps. Multi-user sessions are isolated by Telegram chat ID.

Mobile Frontend — Deneb App

A Tauri 2 shell wrapping a SvelteKit 2 SPA with Framework7 9's iOS theme. Designed as a daily check-in tool — 30-second glance shows net worth, recent spend, and upcoming bills.

Dashboard — Welcome card, cash flow strip, account pie chart, scrollable cards (recent transactions, bills, category breakdown), and a daily budget modal
Records — Transaction ledger with search, period filters (1W/1M/3M/1Y), date range, amount slider, and lazy-loaded Nivo charts (line trend, pie categories, monthly stacked bar)
Expense Form — Add expense or income with currency, category, payment method, QR scanner, and camera buttons
AI Chat — Connects to the ADK backend. Dashboard cards support long-press to open a context picker that pre-fills financial data into the chat
Notifications — Security, payment, investment, and alert notifications
Lock Screen — Biometric (fingerprint on mobile) + passcode unlock flow

Mobile Key Design Patterns

State management uses Svelte 5 runes exclusively — no external library. Module-level singletons for theme (dark/light mode with localStorage persistence), toast notifications, and a signup state machine. The navigation uses a custom bottom-sheet drawer (not Framework7's built-in panel) with frosted-glass floating action bar. Charts are lazy-loaded via dynamic import on scroll expand. Tauri plugins provide barcode scanning, biometric auth, deep linking, geolocation, and native notifications.

Key Features

Multi-modal expense entry via Telegram (text, photo, PDF, voice)
AI-powered natural language querying of expenses
Receipt image upload to GCS with signed URL sharing
Bank statement reconciliation and monthly CSV export
Automated chart generation from expense data
Mobile-first iOS-style dashboard with dark mode
Long-press context picker → AI chat with financial data pre-fill
QRIS barcode scanning for automated expense capture
Biometric + passcode lock screen security
Multi-currency support (USD, MYR, GBP, JPY, IDR)

Tech Stack

Google ADK Python Tauri 2 Svelte 5 Framework7 9 Rust MongoDB GCS Nivo Telegram Bot Cloud Run AgentOps

View on GitHub