Inspiration
Food prices in Canada have risen steadily in recent years due to inflation, shrinkflation, and the increasing cost of dining out. For students and families, weekly grocery shopping has become a financial burden. Bargain Bites was inspired by this challenge, with the goal of turning scattered flyer deals into actionable savings.
What We Built
Bargain Bites is a web application that scrapes grocery flyers, generates personalized meal plans, and consolidates everything into a single optimized shopping list. Users can factor in household size, dietary restrictions, cooking skill, budget, and transportation limits.
Stack Overview
- Framework: Next.js (TypeScript)
- Database: Prisma + MongoDB
- Auth: NextAuth (Google, Auth0)
- UI: React with modular components (e.g.,
CuisineStep,TransportStep) - Data Processing: JSON flyer data, PDF flyer parsing, store mapping
- Hosting: Vercel (deployment-ready)
What We Learned
- Parsing unstructured flyer data required combining JSON extraction with PDF parsing.
- Prisma simplified database modeling, while MongoDB provided flexibility for dynamic meal plans and shopping lists.
- NextAuth enabled rapid integration of multiple authentication flows.
- Building modular onboarding flows (e.g.,
BudgetStep,CookingExperienceStep) improved user personalization. - Balancing optimization involved both user constraints and mathematical tradeoffs:
$$ \min \text{TotalCost}(items) + \lambda \cdot \text{TravelTime}(route) $$
Challenges
- Scraping and normalizing flyers across multiple retailers with different formats.
- Handling shrinkflation, where product weights and sizes varied despite similar pricing.
- Designing a minimalistic but clear interface that remains intuitive under budget and travel constraints.
- Coordinating meal plan generation with user-specific constraints while keeping results reliable and affordable.
Built With
- css-modules
- eslint
- javascript
- json)
- languages:-typescript
- mongodb
- next.js
- nextauth
- postcss
- prisma
- react
- store-logos
- typescript
- vercel

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