BargainBasket - Project Details

Inspiration

With grocery prices skyrocketing across Canada, families are struggling to stretch their budgets. Shopping smart requires comparing prices across multiple stores - a tedious, time-consuming process that most people skip. We built BargainBasket to solve this friction: empowering consumers with real-time price data so they can make informed decisions and reclaim their savings without the hassle.

What it does

BargainBasket is an intelligent grocery price comparison platform that:

  • Automatically scrapes real-time pricing data from major Canadian retailers (Walmart, Costco, Loblaws, Metro)
  • Normalizes prices across different units and formats for accurate comparison
  • Tracks products with real-time dashboard showing best deals and cost trends
  • Sends price alerts when items drop below user-defined thresholds
  • Generates savings reports showing how much users save compared to full-price shopping
  • Manages product/store inventory with an intuitive admin interface

How we built it

Frontend: React 18 with Tailwind CSS, providing a responsive, modern UI with components for dashboards, price comparisons, alerts, and reports.

Backend: Node.js + Express server handling API requests, database operations, and background job scheduling.

Web Scraping: Yellowcake API integration for reliable, JavaScript-rendered content extraction from retailer websites.

Database: SQLite3 tracking products, stores, prices, alerts, and statistics.

AI Integration: Gemini API for chatbot assistance helping users with shopping recommendations and budget planning.

Challenges we ran into

  • Data Persistence: Initial issue where scraped data wasn't displaying in frontend components despite appearing in backend logs - required debugging async/callback patterns in the scraper
  • Price Normalization: Retailers format prices differently (per unit, bulk discounts, regional variations) - built a smart normalizer to standardize across sources
  • Concurrent Scraping: Managing multiple simultaneous product/store scraping operations without database locks or race conditions

Accomplishments we're proud of

End-to-End Working System: Fully functional product-to-savings pipeline from data collection to user-facing insights

Smart Price Normalization: Intelligent system to handle diverse retailer pricing formats and ensure accurate comparisons

Scalable Architecture: Designed for easy expansion to new stores and product categories without code changes

Beautiful, Intuitive UI: Clean React interface making price comparison accessible to non-technical users

What we learned

  • The importance of robust error handling in async operations, especially with callback-based database queries
  • How to design real-time user feedback systems that build trust in backend processes
  • Data normalization is a critical but often overlooked step in price comparison
  • The balance between scraping frequency and API rate limits in production systems
  • How to structure a full-stack application for maintainability and rapid iteration

What's next for BargainBasket

  • Fix 30-day data summary reports
  • Fix data visibility issue ensuring all scraped prices display correctly across all components
  • Mobile app for on-store price lookups
  • User authentication and personalized shopping lists
  • Coupon integration with store systems

Built With

Share this project:

Updates