Inspiration
Grocery prices in Canada have never been higher, and they vary wildly between stores. Most people just pick one store out of habit and overpay without realizing it. We wanted to fix that, not with another flyer app, but with something that actually thinks for you. Cartly was built to take the stress and guesswork out of grocery shopping so Canadians can stretch their budgets without spending hours doing the math themselves.
What it does
Cartly is a smart grocery optimization platform for Canadian shoppers. You enter your grocery list, set your budget and preferences, and Cartly cross-references prices across nearby stores to build you the most cost-effective shopping plan. It compares a single-store strategy against the best multi-store combination, maps out your route, suggests smarter substitutions, and shows you exactly how much you're saving, all in under two minutes.
How we built it
We built Cartly with a React + Vite frontend, a Flask backend, Supabase and PostgreSQL for data storage, and Auth0 for authentication. The optimization engine evaluates item prices across stores and finds the lowest-cost cart, either from a single store or split across multiple. Gemini API powers our smart substitution suggestions. Google Maps and Mapbox handle route planning and visualization. Cloudinary manages our asset delivery.
Challenges we ran into
Real-time grocery price data across Canadian chains isn't publicly available, so we built a structured dataset to power the optimization engine. Modeling the multi-store problem was also harder than expected. We had to balance actual savings against travel distance so recommendations stay practical, not just theoretically cheap. Getting all the moving pieces to talk to each other cleanly under a tight deadline pushed us to be scrappy and decisive.
Accomplishments that we're proud of
Getting the optimization engine to correctly output the lowest-cost cart and seeing real savings numbers appear for the first time was a genuine moment. We are also proud of how polished the frontend turned out. It actually looks and feels like a production app. We were able to integrate many new things which we have never worked with before. And honestly, the fact that we took this from a rough idea to a working prototype in a single weekend.
What we learned
Building Cartly taught us a lot about data structuring, rapid prototyping under pressure, and what it actually takes to make a complex algorithm feel simple to a user. An optimization engine is only useful if everyday people can understand and trust the output, so we spent as much time on clarity as we did on the logic itself.
What's next for Cartly
Live price scraping from Canadian grocery flyers and retailer APIs, PC Optimum and Air Miles loyalty card integration for even better deal optimization, real-time flyer updates, and a native mobile app. Long term, personalized recommendations based on your purchase history so Cartly gets smarter the more you use it.
Built With
- auth0
- cloudinary
- flask
- gemini.api
- google-maps
- mapbox
- postgresql
- python
- react
- supabase
Log in or sign up for Devpost to join the conversation.