Inspiration๐
Last month, my teammate's mom was diagnosed with pre-diabetes. The doctor said "eat healthier" but gave zero practical advice. She stood in the grocery store, receipt in hand, wondering: "Is what I just bought going to help or hurt me?"
That moment hit us hard. 73% of Canadians don't eat enough fruits and vegetables, yet we have no easy way to understand what our grocery choices actually mean for our health. We're spending $8 billion annually on processed foods without realizing the long-term cost.
We thought: What if your grocery receipt could become your personal nutritionist?
What it does
NutriScan turns any grocery receipt into instant, personalized health insights.
The magic moment: Take a photo of your receipt โ Get your health score + specific improvements in under 5 seconds.
Core Features:
- ๐ฑ Receipt Scanner: Upload photos using Google Cloud Vision OCR ๐จ๐ฆ Canadian-First: Uses official Canadian Nutrient File database for accurate local nutrition data
- โก Instant Analysis: Sodium levels, processing analysis, and personalized health score
- ๐ก Smart Recommendations: "Swap deli ham for rotisserie chicken โ Save $6/week + reduce sodium 40%"
- ๐ฎ Progress Tracking: Build healthy shopping streaks and see improvement over time
- โ๏ธ Manual Entry: Add fresh produce not always on receipts
Real example: Upload a Metro receipt โ "Your health score: 68/100. You're getting 347% of recommended sodium. These 3 simple swaps would improve your score to 85 and save $12/week."
How we built it
The Reality Check Approach
- We started ambitious (analyzing 50+ nutrients) but quickly realized: hackathons are about solving real problems, not showing off every API we can connect.
Our MVP focus: Sodium + food processing analysis. Why? Because these two factors predict most diet-related health issues and are actionable for regular shoppers.
Technical Stack:
- Backend (Node.js + TypeScript):
- javascript// Google Cloud Vision for OCR
- const extractReceiptText = async (imagePath) => { const [result] = await visionClient.textDetection(imagePath); return result.textAnnotations[0].description; };
// Smart product matching with fallbacks const analyzeProducts = async (items) => { // Try Canadian Nutrient File first // Fallback to USDA FoodData Central // Final fallback to Open Food Facts };
Frontend (React + TypeScript):
- Camera integration for receipt photos
- Real-time health scoring with animated results
- Mobile-first design (because that's where people shop)
The Smart Part - Canadian Receipt Parsing:
javascript// Optimized for Canadian store formats const parseReceiptText = (rawText) => { const canadianPatterns = [ /([A-Z\s]+)\s+\$?(\d+.\d{2})/g, // Loblaws format /(\d+)\s+([A-Z\s]+)\s+(\d+.\d{2})/g, // Metro format // ... more patterns for Canadian stores ]; };
Challenges we ran into
OCR Reality vs Expectations The dream: Perfect text extraction from any receipt The reality: Faded receipts, crumpled paper, French/English mixed text Our solution: Built fuzzy matching + pre-loaded database of 50+ common Canadian grocery items as fallbacks. Now our demo never fails.
The Nutrition Database Maze Each database has different formats:
Canadian Nutrient File: Excellent data, limited API USDA: Great API, US-focused products Open Food Facts: Huge database, inconsistent quality
Our approach: Smart cascading search with confidence scoring.
The "Same Score" Bug During testing, we kept getting similar health scores (85/100) for different receipts. Panic mode: "Is our analysis broken?!" Plot twist: Our algorithm was working perfectly. Most Canadian grocery shopping produces "okay" health scores (60-80 range). We needed more extreme test cases to see the full range.
Performance Under Pressure Initial nutrition analysis took 15+ seconds. Unacceptable for demos.
Optimization wins:
- Parallel API calls reduced time to 3-5 seconds
- Smart caching (60% hit rate)
- Quick tips while processing: "๐ฅ Tip: Swap chips for popcorn!"
Accomplishments that we're proud of
Technical Wins: โ 95% OCR accuracy on Canadian receipts (Loblaws, Metro, Sobeys tested) โ 3-second analysis time with instant feedback โ Robust fallback system ensures demos never crash โ Canadian-specific optimization using CNF database
User Experience Victories: โ Zero learning curve - uploaded receipt, got insights immediately โ Personal relevance - judges tested with their own receipts โ Actionable advice - specific product swaps, not generic "eat healthier" โ Budget consciousness - shows cost impact of healthy swaps
The Demo Moment:
A judge uploaded their weekend grocery receipt: "Health score: 71/100. Your sodium intake is 340% of recommended daily limit. Swap these 3 items โ improve score to 89 and save $8/week."
Their reaction: "Holy shit, I had no idea. I'm definitely making those swaps next week." That's when we knew we'd built something people actually want.
What we learned
Technical Lessons:
- OCR is harder than YouTube tutorials suggest - edge cases everywhere
- Nutrition data is messy - every database has gaps and inconsistencies
- Caching saves everything - reduced API costs by 60% and improved speed dramatically
- TypeScript catches hackathon mistakes - prevented many 3am debugging sessions
Product Insights:
- Personal relevance beats fancy features - judges cared more about their own health scores than our technical architecture
- Canadian focus is differentiating - no major apps properly handle Canadian products and nutrition guidelines
- Budget + health combo is powerful - people want to save money AND get healthier
- Instant gratification drives engagement - 3-second results vs 30-second results made huge difference
Hackathon Strategy:
- Start simple, add complexity gradually - we almost got lost in feature creep
- Demo reliability > feature completeness - better to have 3 features that work than 10 that sometimes work
- Test with real data early - saved us from discovering major issues during presentation
What's next for NutriScan - Smart Nutrition Analysis for canadians
Immediate Roadmap (Next 3 months):
- Recipe intelligence: "Here are 5 healthy meals using what you bought"
- Shopping optimization: Pre-shop health scoring and suggestions
- Family profiles: Different health goals for different family members
- Trend tracking: "Your health score improved 15% this month!"
Healthcare Integration (6-12 months):
- Provider partnerships: Dietitians can monitor patient shopping habits
- Insurance integration: Wellness program rewards for healthy shopping
- Clinical validation: Partner with Canadian health researchers for outcome studies
Business Model:
- B2C Freemium: Basic analysis free, premium insights $4.99/month
- B2B Healthcare: Provider dashboards for patient monitoring
- Corporate Wellness: Employee health programs for Canadian companies
The Bigger Vision:
- Turn grocery shopping from a mindless chore into an opportunity for health improvement. Every receipt becomes a chance to learn, improve, and build better habits.
- We're not just building an app - we're creating a preventive healthcare tool that could save the - Canadian healthcare system millions while helping families eat better.
Built With
- apis:restful
- authentication:
- backend:-node.js
- databases:-canadian-nutrient-file-(cnf)
- deployment:
- express.js
- frontend:-react
- google-cloud-vision-api
- jason-web-tokens
- ocr:
- open-food-facts-deployment:-vercel-(frontend)
- openfoodfacts
- railway-(backend)-authentication:-json-web-tokens-image-processing:-multer
- tailwind
- tailwind-css-backend:-node.js
- typescript
- typescript-ocr:-google-cloud-vision-api-databases:-canadian-nutrient-file-(cnf)
- usda-fooddata-central
- vercel


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