Back
Next.jsSupabaseOpenAI GPT-4oAsynchronous Worker PatternsServerless FunctionsOptimistic UI

FinBuddy:AI-Powered Personal Finance Tracker

Full-stack AI platform with OpenAI GPT-4, OCR, and predictive analytics.

Core Impact

Transformed raw financial visual data into semantically searchable assets with automated spending pattern analysis.

FinBuddy: AI-Powered Personal Finance Tracker

~90%

Fewer LLM calls via caching

1536-dim

Vector search over every expense

temp=0

Deterministic receipt extraction

The Problem

Most expense trackers make you type every purchase in by hand, and then they still can't answer a question like "what did I spend on coffee last week" because they match keywords, not meaning. I wanted to snap a photo of a receipt, have every line item pulled out automatically, search my spending by intent, and get the analysis done for me.

The Approach

01

Why GPT-4o Vision at temperature 0

Receipts are messy and inconsistent. I run extraction at temperature 0 so the same receipt always returns the same amount, category, date, and itemized lines. I want it deterministic, not creative, because a finance tracker that guesses differently each time is useless.

02

Why pgvector semantic search

I embed every expense with text-embedding-3-small and search by cosine similarity, so "coffee last week" finds the cafe run even when the word coffee never appears on the receipt. It ranks by what you meant, not which keyword happened to match.

03

Why SHA-256 caching

Before any summary call, I hash the current expense snapshot and check the cache. Roughly 90% of requests hit and skip OpenAI completely. That short-circuit before the API call is where the cost savings actually come from.

04

Why row-level security at the database

Receipts are private financial data. I enforce ownership in Supabase RLS policies at the database layer and serve receipt images through signed URLs that expire in an hour, so nobody can reach another user's data even if the client-side logic is wrong.

Technical Deep Dive

01

Built a GPT-4o Vision receipt intelligence pipeline at temperature=0 for deterministic extraction of amount, category, date, and itemized line items; ran a separate GPT-4o-mini pass on raw OCR text to generate per-receipt insights (store name, unusual spend flag, category guess) stored in `expenses.insights_json` for zero-latency display.

02

Engineered semantic search using 1536-dim embeddings via `text-embedding-3-small` stored in pgvector, with a `match_expenses` cosine similarity RPC and 600ms client-side debounce, enabling natural language retrieval ("coffee last week", "anything from Whole Foods") ranked by intent rather than keyword.

03

Reduced LLM API costs ~90% via SHA-256 hashing of the current expense snapshot, short-circuiting summary generation on cache hits before any OpenAI call.

04

Designed Budget Shield (velocity-based spend/day × days_in_month projection, zero LLM, instant response) and Smart Switch (50-transaction GPT-4o-mini pass returning one high-impact savings recommendation, e.g. "switch Disney+ to annual, saves $24/year").

05

Architected multi-tenant row-level security enforced at the Supabase database layer via RLS policies, and secured receipt storage with server-generated signed URLs (1-hour expiry) via an ownership-verifying API route, preventing unauthorized access regardless of client-side logic.

Systems Analysis Concluded

© 2026 · Marian Glen Louis

Engineered with Next.js, Tailwind v4 & Framer Motion