Inspiration
I used to buy a Red Bull from Harvest Market almost every day, until I wandered into INS Market and found a deal that made the same can noticeably cheaper. I'd been overpaying for months just because I didn't know.
To check it wasn't just me, we interviewed random students around campus. Most said they buy wherever is closest or most familiar, with no idea how much prices differ between outlets. A few cents per purchase adds up fast when you buy the same thing every school day, especially on a student budget.
What it does
GoodsBuddy shows you where the exact thing you buy every day is cheapest near you on UBC campus.
- Campus map and list view: every outlet is a pin labelled by price level (
$,$$,$$$). - Search an item: see every outlet that sells it, closest and cheapest first, with distance and when the price was last updated, plus what switching would save you over a term.
- One-tap directions: pick a place and GoodsBuddy opens it in Google Maps.
- Scan to compare instantly: already in a shop? Scan an item's barcode and GoodsBuddy shows where it's cheaper nearby, no typing needed.
- Snap to share prices: photograph a price tag or receipt and Gemini reads the item and price for you to confirm, so every user helps keep prices up to date.
- Outlet pages: every tracked item an outlet sells, each compared to the campus average.
- "vs BC average" badge: compares campus prices to Statistics Canada data where items match.
- Community checks: new prices and sold out reports are confirmed by other students before going live.
We track 21 everyday items, from energy drinks and coffee to snacks and grab-and-go food.
How we built it
Databricks: the backbone
Databricks holds all our data and runs all the computation behind our final product.
- Lakebase (Databricks' managed Postgres) stores every outlet, item, price, sold out report and community confirmation. Every search reads from it and every shared price is written to it.
- Unity Catalog connects Lakebase to our notebooks, so they work on live data directly.
- Notebooks fit a statistical price model that compares outlets fairly on the same items, producing the "typical campus price" behind every comparison in the app. They also pull and process Statistics Canada price data for our BC averages.
- Delta tables, synced tables and a scheduled Job feed results back into Lakebase automatically and rerun the pipeline monthly.
- Databricks Apps runs our first full prototype, built with an agentic build prompt.
Other tools
- Claude Code wrote most of our code, with us directing design, features and fixes.
- Next.js and React for the web app.
- Leaflet and OpenStreetMap for the campus map.
- Gemini for reading price tags and receipts, and generating icons.
- Open Food Facts for barcode lookups.
- Google Maps for directions.
- Vercel for hosting.
Challenges we ran into
We set out to use only real price data, but collecting prices for 21 items across every campus outlet in 24 hours wasn't realistic. We pivoted to a proof of concept using a mix of real and synthesised data, which let us demonstrate the full experience instead of a half-filled database.
Accomplishments that we're proud of
We both came in as complete beginners. In 24 hours we went from an everyday frustration, to validating it with real students, to a working prototype with mapping, scanning, photo price reading, community verification and a full Databricks data pipeline.
What we learned
Even professional software engineers now rely heavily on AI to write code. It let us build something real as beginners, but we learned you still need to understand the problem, make good design calls, test what the AI produces and know when to pivot. We also learned a lot about databases, data pipelines in Databricks and scoping to a deadline.
What's next for GoodsBuddy
- Real data from every outlet we track.
- Crowdsourced prices from users, with Databricks recalculating campus prices as reports come in.
- A native iOS app on the App Store.
- More coverage: more items and outlets, nearby grocery stores, and alerts when your usual item is cheaper nearby.
Built With
- claude-code
- delta-lake
- gemini
- google-maps
- lakebase
- leaflet.js
- next.js
- open-food-facts
- openstreetmap
- postgresql
- python
- react
- statistics-canada
- tailwindcss
- typescript
- unity-catalog
- vercel

