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
- express.js
- node.js
- react
- sqlite
- tailwind
- yellowcake
Log in or sign up for Devpost to join the conversation.