Inspiration
After graduation I started brainstorming a personal project that monitored whether hard-to-find products were in stock. While designing the schema for it, I saw that egg prices had spiked. That made the real need obvious to me: a service that tracks everyday prices, not just stock, so people can decide when and where to shop before leaving home. That pivot became TrackBasket!
What it does
TrackBasket is a web app that continuously watches prices and availability at the largest U.S. retailers (Walmart, Target, Giant Eagle, Amazon and more). With one search you can compare today’s price for the same product across stores, build a basket of weekly staples and see the cheapest place to buy the whole list, set drop alerts, and explore AI-suggested alternatives when something is out of stock or overpriced.
How I built it
The frontend is a Next.js 15 application that uses React Server Components and Tailwind-styled shadcn/UI elements. Supabase supplies Postgres storage, row-level-secure auth and Deno-based Edge Functions. Python scrapers written with Selenium and Playwright collect raw HTML, which a normalization layer unifies around UPCs, canonical categories and consistent units, with Celery scheduling refresh jobs. Edge Functions call the ChatGPT API to interpret free-form recipes, grocery lists, or just text requests and to rank alternatives when UPC data is absent or unreliable. Early iterations were prototyped rapidly in Bolt.new and Supabase, which now hosts all backend architecture. The frontend is deployed via Vercel.
Challenges I ran into
The hardest challenge by far was normalization across retailers. Retailer taxonomies are wildly inconsistent - Target calls a shelf “Peanut Butter & Jelly” while Walmart names the same aisle “Peanut Butter & Spread” - so I built a mapping service that aligns every retailer category to a canonical tree and caches results for low-latency queries. Product matching was already very difficult; name-based heuristics failed, pure-UPC matching missed edge cases, and even UPC lookups sometimes returned conflicting data. The solution layers multiple lookup providers, fallback heuristics and a confidence score that flags questionable joins for manual review. Finally, store-level price differences meant the system had to store price histories at a zip-or-tile granularity instead of nationally.
Accomplishments that I'm proud of
TrackBasket is the first full-stack application I have shipped end to end on my own, so I am very proud of it. The application surfaced surprising price gaps - I found a type of coffee $6 cheaper at one store than another - which validated the idea. I had never touched Deno before this hackathon; deploying AI-powered Supabase Edge Functions that could serve real users is a milestone I am proud of.
What I learned
Clean schemas and data matter A LOT when you are reconciling thousands of retailer rows. UPCs can be incorrectly used or malformed, so any product matcher needs multiple evidence layers.
What's next for TrackBasket
I had a good time working on this project, and I absolutely believe in the concept. I'll probably take a break for a bit after this, but I'm workshopping a SwiftUI mobile companion that will reuse the same Supabase backend. I additionally want to expand to more area codes and get more local product information, and maybe eventually implement coupon and deal findings! There's a lot of room for growth, and I'm excited to keep expanding it.
Built With
- bolt.new
- next.js
- postgresql
- python
- react
- restapi
- supabase


Log in or sign up for Devpost to join the conversation.