nutrition-analyzer
Analyze food items and calculate nutritional values for NutriProfile. Use this skill when working with food detection, nutritional calculations, meal analysis, or the Vision page. Covers calories, proteins, carbs, fats, and portion estimation.
SKILL.md
| Name | nutrition-analyzer |
| Description | Analyze food items and calculate nutritional values for NutriProfile. Use this skill when working with food detection, nutritional calculations, meal analysis, or the Vision page. Covers calories, proteins, carbs, fats, and portion estimation. |
name: nutrition-analyzer description: Analyze food items and calculate nutritional values for NutriProfile. Use this skill when working with food detection, nutritional calculations, meal analysis, or the Vision page. Covers calories, proteins, carbs, fats, and portion estimation. allowed-tools: Read,Write,Edit,Grep,Glob,Bash
NutriProfile Nutrition Analyzer Skill
You are a nutrition analysis expert for the NutriProfile application. This skill helps you work with food detection, nutritional calculations, and meal analysis features.
Context
NutriProfile uses multi-agent AI (BLIP-2, LLaVA) for food detection from photos. The nutrition data is stored in:
- Backend:
backend/app/models/food_log.py- FoodLog, FoodItem, DailyNutrition models - Frontend:
frontend/src/data/nutritionReference.ts- Local nutrition database with 30+ foods - API:
backend/app/api/v1/vision.py- Vision analysis endpoints
Nutrition Reference Database
The local nutrition database (nutritionReference.ts) contains per-100g values:
calories: kcalprotein: gramscarbs: gramsfat: grams
Supported Foods (30+)
Common foods: riz, pâtes, pain, poulet, boeuf, saumon, oeuf, lait, fromage, yaourt, pomme, banane, orange, carotte, brocoli, tomate, salade, pomme de terre, haricots, lentilles, huile d'olive, beurre, miel, chocolat, café, thé, jus d'orange, eau, vin, bière
Calculations
Portion Calculation
function calculateNutrition(food: string, quantity: number, unit: string): NutritionValues {
const baseNutrition = NUTRITION_DATABASE[normalizeFood(food)]
const multiplier = getUnitMultiplier(unit) * (quantity / 100)
return {
calories: Math.round(baseNutrition.calories * multiplier),
protein: Math.round(baseNutrition.protein * multiplier * 10) / 10,
carbs: Math.round(baseNutrition.carbs * multiplier * 10) / 10,
fat: Math.round(baseNutrition.fat * multiplier * 10) / 10
}
}
Unit Multipliers
g(gram): 1.0ml(milliliter): 1.0portion: 150g equivalentpiece/pièce: 100g equivalentcup/tasse: 240g equivalenttablespoon/cuillère: 15g equivalent
Backend Integration
FoodLog Model Structure
class FoodLog(Base):
id: int
user_id: int
meal_type: str # breakfast, lunch, dinner, snack
image_url: Optional[str]
detected_items: List[dict] # AI detected
user_corrections: List[dict] # User edits
total_calories: float
total_protein: float
total_carbs: float
total_fat: float
confidence_score: float
created_at: datetime
Vision API Endpoints
POST /api/v1/vision/analyze- Analyze food photoGET /api/v1/vision/logs- Get user's food logsGET /api/v1/vision/logs/{id}- Get specific logPATCH /api/v1/vision/logs/{id}- Update log (user corrections)DELETE /api/v1/vision/logs/{id}- Delete log
Frontend Components
Key Components
VisionPage.tsx- Main page with camera/uploadAnalysisResult.tsx- Display detected foods (pre-save editing)FoodLogCard.tsx- Display saved food logs (post-save editing)EditFoodItemModal.tsx- Modal for editing food itemsEditFoodItemModalV2.tsx- Enhanced modal with USDA integration
State Management
Uses React Query for:
useVisionLogs()- Fetch food logsuseSaveFoodLog()- Save new analysisuseUpdateFoodLog()- Update existing loguseDeleteFoodLog()- Delete log
Best Practices
- Always validate nutrition values - Use the local database for estimation
- Handle unknown foods - Return default values (100 kcal, 5g protein per 100g)
- Preserve user corrections - Never overwrite user edits with AI values
- Calculate totals correctly - Sum all items in a meal
- Support i18n - Use translation keys from
visionnamespace
Example Tasks
Add New Food to Database
- Add entry to
NUTRITION_DATABASEinnutritionReference.ts - Add food name aliases if needed
- Add tests in
nutritionReference.test.ts - Update food suggestions in autocomplete
Fix Nutrition Calculation Bug
- Check
calculateNutrition()function - Verify unit multipliers
- Test with edge cases (0 quantity, unknown food)
- Run tests:
npm test
Enhance Food Detection
- Review Vision Agent in
backend/app/agents/vision.py - Check consensus validation in
backend/app/agents/consensus.py - Add new model or improve prompts
- Test with diverse food images