iFolio: a portfolio tracker that runs in your browser
iFolio tracks an investment portfolio in the browser. Your portfolio is encrypted on your device with AES-256-GCM. I built it with AI agents in 48 days.
- Built
- 48 days, 224 AI sessions, 5 models
Your device
Pages and stores
The dashboard, positions, transactions and income. Charts receive their data as props and never touch the stores.
Ledger engine
One pure function rebuilds positions, tax lots and income from the raw transactions every time anything changes.
Vault
Encrypts and decrypts with the Web Crypto API. The key is not extractable, and it is cleared when you lock.
Encrypted file
Your portfolio on your device: magic bytes, salt, IV and ciphertext in one .iFolio file.
Outside your device
Cloudflare Worker
Relays price requests for ticker symbols from Yahoo Finance. It never sees your balances or transactions.
Google Sheets, optional
Account balances are written to a sheet you choose, only if you turn sync on.
What it does
Everything you see is calculated in the browser from your own transactions and public prices.
- An encrypted vault. The key comes from your passphrase (PBKDF2-HMAC-SHA256, 600,000 iterations), and the data is sealed with AES-256-GCM.
- Tax lots and cost basis. Open positions expand into their lots, with FIFO, LIFO, Specific ID and Average Cost, and a flag for wash sales.
- Imports and sync. Bank-specific CSV parsers for Schwab and Optum plus a generic one, with duplicates removed, and balances written to a Google Sheet through OAuth 2.0.
- Dashboard, positions and income. Value over time, allocation and monthly income, with filters by account and period.
- Installable and responsive. A PWA with dark mode, a collapsible sidebar on desktop and a bottom tab bar on phones.
How it’s built
Every number on screen is rebuilt from the raw transactions by one pure function, so positions, tax lots and income can’t drift apart. The code is TypeScript with no any, enforced in CI.
I first built a Schwab OAuth integration for market data, then switched to Yahoo Finance. That removed the sign-in to maintain and about 60% of the Worker code.
Built with AI agents
I built iFolio entirely through AI pair programming, with no team and no outsourcing.
- 224 sessions across 5 AI models. I began with careful prompt-by-prompt guidance, testing each feature as it landed.
- Several agents at once. Later one agent refactored the ledger engine while another built the charts and a third set up CI/CD, held together by typed interfaces.
Tech stack
Frontend
- Nuxt 4 (SPA)
- Vue 3
- TypeScript
- Pinia
- Tailwind CSS 4
- Nuxt UI 4
Charts and tables
- ApexCharts
- TanStack Table v8
Backend
- Cloudflare Worker (TypeScript)
- Yahoo Finance API
Security
- Web Crypto API
- PBKDF2-HMAC-SHA256
- AES-256-GCM
Infrastructure
- GitHub Actions (CI/CD)
- @vite-pwa/nuxt
- GitHub Pages
- Cloudflare Workers
Testing
- Vitest
- @nuxt/test-utils
- @cloudflare/vitest-pool-workers