Skip to main content
All work

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
A walkthrough of iFolio with a made-up portfolio, not mine. It unlocks the encrypted vault at 0:03, shows the dashboard at 0:04, the open positions at 0:08, filters the 1,844 transactions by symbol at 0:12 and the monthly income at 0:15, then locks again at 0:17.

Your device

  1. Pages and stores

    The dashboard, positions, transactions and income. Charts receive their data as props and never touch the stores.

  2. Ledger engine

    One pure function rebuilds positions, tax lots and income from the raw transactions every time anything changes.

  3. Vault

    Encrypts and decrypts with the Web Crypto API. The key is not extractable, and it is cleared when you lock.

  4. 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.

How data moves. Your transactions stay inside the box; the two services outside it see only what is listed under them.

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

Tell me what you’re trying to ship.

Free · no prep needed · proposal in 48h