Projects

Things I'm building

A running list of what I'm building outside of work — some shipped, some barely past a napkin sketch. A couple have write-ups on how they came together; the rest are still cooking.

Ka-ching — Personal Finance Dashboard

A local Mint/Monarch alternative that turns a pile of bank statements into one honest picture of where the money went.

  • RoleSolo — design & build
  • StackPython · Vanilla JS · HTML/CSS
  • StatusWorking & in daily use

Why I built it

Mint shut down, the alternatives all want a subscription and a linked login to every account I own, and none of them ever categorized my spending the way I actually think about it. I wanted the full picture — cash flow, trends, trips, a budget that talks to my auto-invest plan — without handing my credentials to anyone. So I built it to run entirely on my own machine.

How it works

You drop statements into a folder and it figures out the rest. Content-detected parsers read Chase checking, Chase Sapphire Preferred, Capital One Venture X, and Venmo, and normalize all of them into one ledger — so a coffee is a coffee whether it came from a PDF, a CSV, or an OFX export. Every transaction gets categorized by a rules engine I can teach, and the dashboard renders spending, a cash-flow Sankey, trends, per-trip breakdowns, and a coupled budget + auto-invest planner.

The part I'm proud of

The parsing. Bank statements are gloriously inconsistent, and getting a PDF, a CSV, and an OFX file to agree on what a transaction is took more care than the whole front end. It content-detects the source instead of trusting file names, falls back through a few PDF extractors when the nice one isn't installed, and has a reconcile step that catches when an import double-counts. It's the least glamorous part and the reason I actually trust the numbers.

What I'd do next

More parsers, mostly — every new account is a new statement format to teach it. And I keep eyeing a proper import-review UI so adding a new bank doesn't mean reading my own code six months later.

  • Runs 100% locally
  • Multi-format parsing
  • Cash-flow Sankey
  • Budget + auto-invest

This Website

A personal site for the stuff that doesn't fit on a résumé — and an excuse to actually enjoy front-end for once.

  • RoleSolo — design & build
  • StackAstro · One React island · Hand-written CSS
  • StatusLive — you're on it

Why I built it

Most of my day is spent deep in robotics middleware where nobody sees the interface. A UI I built for visualizing robot navigation reminded me how much I like the front-end side of things, so I wanted a small space that was entirely mine to design — no spec, no product manager, no ticket.

How it's built

It started as three hand-written HTML files and outgrew them — the head, the nav and the hero were copy-pasted across all three. So there's a build step now: Astro, static output, one layout. The CSS never moved: still hand-written, split by domain so each sheet has one owner. And exactly one React island, for the only thing here that needs state — the contour drawing behind my name is a putting green, and you can putt on it.

The details I cared about

The motion serves the content rather than showing off, and all of it switches off cleanly for anyone who prefers reduced motion. The green isn't decoration pretending to be a game: the ball reads the gradient of the same height field the contour lines are drawn from, so reading the break genuinely works. I held it to real accessibility standards — keyboard-navigable, AA contrast measured off the rendered pixels, focus states you can actually see.

What I'd do next

Keep it alive. It's the kind of project that's never really finished — a new section here, a nicer transition there, whenever I've got a free evening and an idea.

  • Playable hero green
  • One React island
  • Reduced-motion aware
  • WCAG AA contrast
  • Hand-written CSS

Also on the bench

Still cooking

Ideas I'm poking at. No write-ups yet — check back.

Restaurant Dating App

Concept · Mobile App

Matching people on their taste in restaurants instead of the usual profile — think Hinge meets Beli. The best first dates happen over good food anyway.

Menu
Get in touch