25 Versions Later: What Building My Own Investment Tracker Taught Me About AI (And Finance)

25 Versions Later: What Building My Own Investment Tracker Taught Me About AI (And Finance)
Vibe coding investment portfolio tracker built with AI - 25 deployment versions

It started with a broken pivot table.

One Saturday morning I was staring at a portfolio spreadsheet that had decided to stop refreshing. Twenty minutes in, it hit me: I'm a CPA. I work with AI every single day. Why am I sitting here fighting a pivot table? I'll just build my own tool.

Twenty-three deployment versions later, I have a fully working personal investment portfolio tracker — live prices in AUD, ATO-style capital gains estimates using the FIFO method, analyst ratings pulled from Yahoo Finance, technical buy/sell signals, a watchlist with timing verdicts, and a viewer mode for my partner. Built entirely through vibe coding with AI. Zero traditional development experience.

I'm not writing this as a tutorial. I'm writing it because what I learned across those 25 versions says something important about what AI actually is — and how finance professionals are uniquely positioned to use it well.

25
Deployment versions from "test sorting" to a working live portfolio dashboard — each one a lesson in how vibe coding actually works
$0
Monthly hosting or infrastructure cost — the entire app runs inside my own Google account, data never leaves my control
×32
The rogue multiplier that made my Silver ETF holdings look like $3M instead of ~$126K — spotted because the numbers "felt off"
5
Versions required to fix one chart sorting bug — because bar chart libraries render arrays bottom-up, not top-down, and a "reverse: true" axis just cancelled itself out

What the Finished Thing Actually Does

Before I get into the war stories, it's worth describing what Version 25 actually is. The dashboard shows my total portfolio value, unrealised gain, and AU versus US split — all updated with live prices converted to AUD. Holdings display as a table on desktop and as cards on mobile. Each stock has a traffic-light technical signal showing RSI, 50 and 200-day moving averages, 52-week range position, and MACD momentum. Click any holding to expand the detail.

The CGT tax report uses a FIFO parcel methodology — one of several methods the ATO accepts for share disposals — with a 50% discount toggle and a financial year selector. It's useful for rough planning conversations and building intuition around disposal timing decisions. It's not a tax return and not a substitute for advice from a registered tax agent. The disclaimer is prominent in the tool. Analyst ratings pull from Yahoo Finance: average rating, mean score, number of analysts covering, and target price in AUD. There's a watchlist where I track stocks I don't own yet, with technical timing indicators based on the same signal framework. A portfolio news feed surfaces relevant headlines weighted by position size. CSV import and export. Viewer mode with a separate password for my partner.

The whole thing runs on Google Apps Script and Google Sheets. No third-party SaaS applications, no separate hosting bill, no authentication layer to manage beyond Google's own. My data stays within my own Google environment — I'm not piping it to external applications or services. It deploys in one click.

The 25-Version Journey (The Honest Version)

The deployment history tells the real story of how vibe coding works in practice. It reads like this: "test sorting" → "fixed sorting" → "fixed sorting 2" → "revert icons" → "fix sorting" → "add analysts" → "fix analysts" → "add watchlist" → "fixed watchlist" → all the way to "fixed watchlist 4" at Version 25.

There are four bugs from that journey that I keep coming back to, because each one taught me something specific.

The SLV ×32 bug. My Silver ETF (SLV) is priced in ounces. Somewhere in the code, a rogue multiplier of 32 had crept in — converting ounces to something else, presumably. The result: my portfolio was displaying at roughly $3 million instead of approximately $126,000. I caught it not because I reviewed the code, but because the number felt wrong. Finance instinct. Twenty years of knowing roughly what a number should be before you look too closely. That instinct, not the AI, was the control.

The FX direction bug. The RBA publishes the AUD/USD rate as "USD per 1 AUD" — for example, 0.7121. For about a week, I had the conversion backwards: dividing when I should have been multiplying. Every USD holding was mispriced. The fix was trivial once I found it. Finding it required me to know enough about how exchange rates are quoted to smell that something was off.

The sorting saga. Versions 8 through 13 were consumed by a single chart bug. The bar chart library I was using renders arrays bottom-up rather than top-down. Combined with a "reverse: true" setting on the axis, the sort direction kept cancelling itself out. Five versions. One bug. This is what vibe coding actually feels like at the sharp end — you're describing what you want, the AI writes code that seems right, and then something subtle in the library's rendering logic breaks the outcome in a way that isn't obvious until you look at it from the right angle.

The deployment confusion. For longer than I'd like to admit, I kept creating new deployments instead of updating the existing one. The result: each "fix" got a new URL, so I was always testing the old broken version. The fix was working in the right place — not a code problem at all. This is a classic beginner mistake that no amount of AI assistance could prevent, because the AI doesn't know which URL you're looking at.

Why I'm Not Selling It (And Why That's Actually the Right Call)

I thought about monetising it. I thought about open-sourcing it. I decided against both, for reasons that are worth being transparent about.

The data sources I'm using — Yahoo Finance's unofficial API, GOOGLEFINANCE — are not licensed for commercial redistribution. Building on unofficial APIs and redistributing derived data commercially creates potential licensing and commercial-use issues that aren't worth taking on for a side project, regardless of how many disclaimers you attach.

The second issue is more specific to my situation. A tool that displays real-time market data, technical indicators, and capital gains estimates — with my name and professional title attached — is something I want to be careful about framing. Describing technical signals as "buy" or "sell" recommendations, even on a personal tool, creates ambiguity I'd rather not carry. The right approach: clear framing that these are technical indicators, not advice, with a disclaimer that's impossible to miss. Keeping it personal-use-only removes any question about whether ASIC's financial advice framework is engaged.

What Vibe Coding Actually Feels Like (For a Finance Person)

The framing that resonates most for me: you're the product manager, the AI is the developer. Your job is to know what you want to build and why. The AI's job is to write the code. The gap between a good outcome and a frustrating one usually lives in the quality of your brief — not in the AI's capability.

What surprised me most is how much my finance background helped. When the SLV multiplier bug appeared, I caught it because $3 million felt wrong. When the FX conversion was backwards, I caught it because I understand how exchange rates are quoted. When the CGT calculation was off, I caught it because I know what the FIFO method should produce. A developer without that domain knowledge might have shipped all three bugs undetected.

Twenty years of knowing what financial numbers should look like made me a better vibe coder than most developers would be — because I had an instinctive control framework that the AI couldn't replicate. The AI wrote the code. Finance experience was the audit.

⚠️ Model training privacy note: The portfolio tracker described here was built without passing any real financial data through AI training pipelines. All AI assistance was used for code generation only — no live portfolio data, transaction records, or personal financial information was shared with any AI platform during development. If you're building similar tools, keep the architecture clean: AI for code, your own environment for data.
Related reading: For a look at how the same privacy-first architecture thinking applies to finance tools more broadly, see Why I Built My Own Budgeting App — And Why Your Financial Data Belongs on Your Own Drive.
Note: The portfolio tracker described in this post is a personal tool built for my own use. Nothing in this post constitutes financial advice. The CGT estimates and technical signals described are for personal planning purposes only and should not be relied upon for investment decisions. Always seek independent financial and tax advice.
What could your finance team build with vibe coding?

If a CPA with no development background can build a live portfolio dashboard with CGT estimates and technical signals across 25 versions, imagine what the same approach can do for the finance functions running NDIS, aged care, and SME organisations. At PFL, we apply exactly this thinking to the automation challenges our clients face every day. The what and why, done well, with the how handled by the right tools.

See what PFL builds →
About the author: Timothy, CPA, is Managing Director of Professional Financelink (PFL) — senior-level outsourced finance, management reporting, and AI automation for Australian NFP, NDIS, and SME organisations. With 20+ years in finance leadership across NFP, NDIS, and SME sectors, he writes about the intersection of practical finance and AI adoption in Australia.
Tomorrow on Finance Intelligence: The NDIS crackdown is real — a $5M fraud arrest, a Commission staffing surge, and 1 July mandatory registration arriving in two weeks. What NDIS finance managers need to know right now, and where AI fits into the compliance picture.

Comments

Popular posts from this blog

Google Gemma 4 Just Launched — And It Might Solve Finance's Biggest AI Privacy Problem

Why NFP Boards Are Finally Talking About AI — And What the Finance Team Should Do Before They Ask

Claude vs Gemini for Australian Finance: An Honest Comparison After 12 Months of Using Both