ShopSmart
Inspiration
As college students in Madison, we are on a tight budget due to high costs of living while still wanting to prioritize eating healthy. We wanted to maximize our nutrition while minimizing grocery costs, so we built an app that helps users see what’s in their food, compare prices with similar products, and plan meals around what they can actually afford.
What It Does
ShopSmart pulls live grocery prices from stores in your area such as Kroger and Metro Market. Users enter their biometric information, such as height and weight, along with their nutritional goals. Based on the items in the cart, the model builds a meal plan detailing the cost of each meal and the macronutrients contained. The app can also scan barcodes so users can see all nutritional information in one place and add items directly to their cart. Barcode normalization ensures that UPC-A, EAN-13, and similar formats all resolve to the same product.
How We Built It
We built ShopSmart with a React Native (Expo) frontend and a FastAPI backend. The app displays live Kroger prices in the Madison/Dane County area, shows a cart, maps nearby stores with directions, and includes a barcode scanner, while the backend handles the data processing and optimization.
We pull prices from the Kroger API and per-item nutrition data from the USDA API, then fuse them by search term so each product contains both price and macronutrient data for scoring. Barcode scans are sent to Open Food Facts with UPC-A and EAN-13 normalization so lookups work across formats. The optimizer scores items by nutrition per dollar and uses a greedy budget-fill algorithm to suggest a high-value cart. Meal plans are generated using the Groq API based on the cart contents and user preferences, constrained by a strict JSON schema to keep responses grounded and parseable. REST endpoints expose prices, nutrition, locations, optimization, and meal-plan generation so the mobile client interacts with a single clean pipeline behind a simple UI.
Challenges We Ran Into
One major challenge was building upon existing ideas to make the system dynamic, effectively combining features from apps like MyFitnessPal and Instacart into one centralized model. Another difficulty was ensuring reliability and grounding the meal plan generation. We implemented token and price caching so that Kroger and USDA API failures or rate limits would not break the app, and we constrained the LLM by passing the actual cart contents along with a strict JSON schema so it only suggested meals using ingredients the user actually had.
We also faced challenges in structuring the project due to the many moving components. Careful planning before implementation was crucial to maintaining clarity and keeping the architecture organized.
Accomplishments We’re Proud Of
We’re proud of building something genuinely useful in a short amount of time. We went from questioning whether we could successfully wire all the services together to having real integrations with Kroger, Open Food Facts, USDA, and Groq, along with our own logic for barcode handling and data fusion.
We’re also proud of implementing a nutrition-per-dollar scoring system and a greedy budget-fill optimizer that maximizes value within a budget instead of simply listing the cheapest items. Designing this logic required careful thought about how to meaningfully handle and compare nutritional data.
What We Learned
Throughout development, we learned the importance of collaboration using Git and dividing the system into manageable sub-problems so each team member could take ownership. We also learned how critical communication and shared planning are in building a multi-service application.
Additionally, we discovered that barcode formats vary widely and APIs often don’t align cleanly. We had to fuse Kroger pricing with USDA nutrition data by search term and implement caching and throttling to ensure that one unreliable response wouldn’t cascade into a system-wide failure.
What’s Next for ShopSmart
Next, we plan to add support for nearby farmers markets to promote local businesses. We are also considering integration with delivery platforms like DoorDash or Uber Eats so users can have groceries delivered directly to them.
We would like to expand social features by allowing users to add friends, share recipes, and post nutrition goals on their profiles with comments and reactions. Finally, we aim to expand beyond Kroger by adding more Madison-area stores and wiring the optimizer to live multi-store data so carts reflect real-time prices while respecting dietary filters and nutrition goals.
Log in or sign up for Devpost to join the conversation.