Everything I've built
Four things you can install today, one web app, and the archive that got me here. Store apps link to the store; everything else downloads straight from this site.
At a glance
| Project | What it is | Built with | How to get it |
|---|---|---|---|
| Yo GVL | Community event app | React Native, Firebase | App Store & Play |
| Snappled | Video party game | React Native, Firebase | TestFlight / Play beta |
| Tracker | Timers, lists, tasks, tallies | React Native, Firebase | Direct APK download |
| stock-alerts | Market screening toolkit | Python, pandas | Download the source |
| Yo GVL Web | Web companion dashboard | Next.js 15, TypeScript | Open in browser |
| Snapples archive | 2018–19 components & cron backend | React Native, Cloud Functions | Reference only |
On the stores
Reviewed, approved, and updated over the air.
Yo GVL
Create an event, invite your people, see who's coming. A follow graph, interest matching, per-event message boards, and a notification for every thing that actually matters.
- Full event lifecycle — templates, co-hosts, guest lists, private events
- 26 Cloud Functions covering every notification path
- QR-code invites with verified universal links
- Google & Apple sign-in, contacts and calendar integration
Snappled
A prompt lands, you record ten seconds, the crowd votes and the votes decide the round. Saved clips stay in your collection; everything else disappears when its prompt expires.
- In-app capture, compression and playback
- Round engine split into prompt → record → vote → results
- Custom lobbies, or solo practice against bots
- Coins, tickets and topic tokens
Not on a store
These didn't need review to be useful. Take them as they are.
Tracker
One idea: everything is a node. A node with children is a folder, one with a goal is a timer, one you tick is a task, one with a count is a tally — and a single node can be all of those at once.
- Works fully offline; sign in only if you want shared lists
- Timers store an absolute start time, so reboots don't lose them
- Share a list by email; due dates can surface an item in another list
- Push reminders
stock-alerts
A screening toolkit that reads the levels a chart reader would mark by hand — consolidation shelves, pivot lows, unfilled gaps, projected moving averages — straight from raw OHLCV.
- ~500 tickers, sector-rotation and market-regime reports
- Confluence scoring — levels several methods agree on rank higher
- Auto-built four-rung entry ladders, spaced to each stock's volatility
- Runs on free yfinance data; Alpaca optional
On the web
Yo GVL Web
The web companion to Yo GVL, running on the same Firestore database as the phone app — so an event created on your laptop is on your phone before you close the tab.
- Next.js 15 App Router, TypeScript, Tailwind v4
- Server-rendered pages with interactive client islands
- Admin tooling behind
firebase-adminAPI routes
The archive
Where the house style came from. Kept for reference, not for install.
Snapples components
Around 9,000 lines of React Native components written by hand before any of the modern tooling existed — camera, cards, map, menus, game UI. Every app I ship today still traces its design system back to this folder.
Snapples cloud functions
Firebase Cloud Functions plus an App Engine cron service running the original game's hourly loop — topic rotation, pre-submission handling and quick-play matchmaking.