Inspiration

28.8 million Americans will experience an eating disorder in their lifetime. Existing food tracking apps make the problem worse — they scold, assign guilt, and reduce food to numbers on a scorecard.

One of our team members used a calorie counting app for three months. It lasted until the night they ate a slice of birthday cake and the app flashed red. That's when it clicked: an app that makes you feel guilty about birthday cake is broken by design.

We wanted to build something different: a tool that empowers people to make small, kind improvements without shame. Food shouldn't be a source of anxiety. FridgeVisor was born from the idea that gentle nudges beat harsh judgments, and that people need encouragement, not punishment.

What it does

FridgeVisor lets you snap a photo of your meal and get a friendly health score — no calorie counting, no guilt language. If your meal scores low, Lama (your kind, non-judgmental companion) gently asks: "What else is in your fridge? Let's look!" You take a photo of your fridge, and the AI suggests small, practical additions using ingredients you already have.

Over time, it tracks your eating patterns and provides warm, actionable recommendations. We empower people to decide — we never decide for them.

How we built it

  • Frontend: React (Vite) with Tailwind CSS, designed mobile-first with large tap targets for phone demos
  • Backend: Python FastAPI serving as the API layer
  • AI: Anthropic Claude API (claude-sonnet-4-20250514) using vision capabilities for both meal and fridge photo analysis, and text generation for pattern-based recommendations
  • Architecture: Images are compressed client-side (resized to 1024px, JPEG 70%) before upload, then sent as base64 to the backend which forwards them to Claude's vision API. Only the text analysis is stored — never the images themselves. That's not just a technical shortcut — it's a deliberate privacy decision. Sessions are anonymous with no persistent identity, keyed by a random ID in localStorage with an in-memory Python dict on the backend. No accounts, no emails, no data that survives a server restart.

Challenges we faced

  • Image size limits: Phone cameras produce large files that exceeded Claude's 5MB limit. We solved this with a two-layer compression pipeline — client-side canvas resize before upload, plus server-side Pillow compression as a safety net.
  • Mobile browser quirks: crypto.randomUUID() isn't available on Android over HTTP (non-HTTPS), so we had to implement a manual UUID generator fallback. These are the kinds of problems that only surface when you test on real devices, not just laptops.
  • Prompt engineering for safety: The hardest challenge wasn't technical — it was crafting prompts that are funny and engaging without ever triggering shame or restriction. We built explicit guardrails: if meals look genuinely concerning, the AI dials back humor and becomes straightforwardly supportive.
  • Keeping it fast: Vision API calls can be slow. Client-side image compression before upload cut both network transfer time and API processing time significantly.

What we learned

The humor and tone are the product. Getting the technical stack working was the easy part — the real challenge was designing an AI interaction that feels like a supportive friend rather than a judgmental authority.

Small, kind suggestions build lasting patterns. That's the core insight we want to carry forward into smart grocery suggestions, budget-friendly alternatives, and meal planning that feels good — not meal planning that feels like homework.

Built With

Share this project:

Updates