Inspiration
FridgePulse started from a problem almost everyone has experienced: buying groceries with good intentions, putting them in the fridge, and forgetting about them until they spoil. We realized that food waste is not just an expiration-date problem. A tomato bought fresh today is different from a very ripe tomato bought from a clearance section. Storage method, visible condition, printed dates, and when someone actually has time to cook all affect whether food gets used or wasted. That led us to one question: What if your fridge could understand what needs to be used first and help you turn it into a meal before it becomes waste? That idea became FridgePulse.
What it does
FridgePulse is an AI-powered kitchen inventory and food-rescue copilot designed to help people use groceries before they spoil. With Snap & Stash, users can photograph groceries and Google Gemini analyzes the image to identify food and extract visible printed date information when available. Instead of blindly trusting AI, FridgePulse shows a review screen where users can verify or correct the detected item, printed date and date type, storage method, purchase condition, and visible condition. Our freshness engine then combines these signals to estimate what should be used first. For example, FridgePulse distinguishes between an ordinary promotional discount and a clearance item that may have a shorter usable window. It can also account for food being ripe, very ripe, damaged, refrigerated, frozen, or stored in a pantry. The inventory prioritizes items as Fresh, Use Soon, Use Today, or Expired. When users are ready to cook, Rescue My Food guides them through a simple flow where they choose ingredients that need rescuing, how much time they have, and the cuisine they want. FridgePulse then helps turn those at-risk ingredients into meal ideas instead of waste.
How we built it
We built FridgePulse using React, TypeScript, TanStack Start, Vite, Tailwind CSS, Google Gemini, Zod, GitHub, and Vercel. For Snap & Stash, grocery images are compressed before being sent to a secure server-side function. The Gemini API key remains on the server and is never exposed to the browser. Google Gemini provides the multimodal intelligence needed to understand grocery images and extract structured information from them. AI responses are validated before they enter the application. We deliberately separated AI recognition from freshness calculations. FridgePulse uses a deterministic freshness engine to process printed dates, storage methods, purchase conditions, and visible food conditions. This gives us predictable calculations instead of asking an AI model to invent expiration estimates. The user remains in control through a review step before detected food enters the inventory. We use GitHub for version control and team collaboration, with Vercel as our deployment platform.
Challenges we ran into
One of our biggest challenges was realizing that food freshness is more complicated than an expiration date. A discounted product is not automatically close to spoiling, while a clearance or very-ripe product may genuinely need to be consumed sooner. We had to design our freshness logic around meaningful signals instead of assumptions. Printed dates were another challenge. Packaging can contain Best Before, Use By, Expiry, Sell By, Packed On, production dates, or ambiguous manufacturing codes. FridgePulse preserves the detected date type and lets the user verify it rather than treating every printed number as an expiration date. We also had to balance AI automation with reliability. Gemini is excellent at understanding real-world images, but important information still needs validation. Combining multimodal AI, structured outputs, deterministic calculations, and human review became an important part of our architecture. Finally, deploying a server-rendered TanStack Start application introduced real-world serverless and runtime compatibility challenges that taught us a lot about moving from a working local prototype to production.
Accomplishments that we're proud of
We're proud that FridgePulse became much more than a basic expiration tracker. We built:
- AI-powered grocery image analysis with Google Gemini
- Printed food-date detection and review
- A deterministic freshness engine
- Storage, ripeness, condition, and clearance-aware freshness estimates
- Automatic inventory urgency prioritization
- Manual inventory management
- A guided Rescue My Food cooking experience
- Dynamic food-rescue impact tracking
- A responsive and animated user experience
- Secure server-side AI integration Most importantly, every feature supports one goal: help people act on food before it becomes waste.
What we learned
We learned that reducing food waste requires context, not just expiration dates. AI is powerful for interpreting messy real-world inputs such as grocery photos and packaging, while deterministic logic is better for calculations that need predictable and explainable behavior. We also learned the importance of keeping users in the loop. Rather than silently trusting an AI-detected date, FridgePulse lets the user verify and correct information before saving it. Technically, we gained hands-on experience with multimodal AI, structured outputs, React, TypeScript, TanStack Start, server functions, validation, environment-variable security, Git collaboration, and serverless deployment.
What's next for FridgePulse
Our next goal is to turn FridgePulse into a persistent household kitchen companion. We want to add cloud-based inventory storage, household accounts, shared family fridges, smarter meal-prep scheduling, notifications, pantry tracking, shopping recommendations, and deeper food-waste analytics. We also want to expand the cooking intelligence so FridgePulse can create increasingly personalized recipes based on ingredients at risk, available cooking time, cuisine preferences, and household needs.
Our long-term goal is simple: Make wasting food harder than rescuing it. ⚡
Built With
- chatgpt
- claude
- github
- google-gemini
- react
- tailwind-css
- tanstack-start
- typescript
- vercel
- vite
Log in or sign up for Devpost to join the conversation.