All posts
February 18, 20267 min read

3-day, 1-day, day-of: the science of food-waste reminders

Why FreshCheck fires three notifications per item — and why the timing matters more than the count.

One reminder is not enough

We tested single-shot reminders early on. Day-of only: "Your milk expires today." It works once. Then your brain learns to mute the notification because by the time you read it, the milk is already at the door of "use it or lose it" — usually past dinner.

Two reminders is better. Three is the sweet spot.

The ladder

FreshCheck schedules every item on a three-step ladder, all at 9 AM local:

1. 3 days out — *"Plan for it."* Soft tone. The job is to put the item on tonight's or tomorrow's menu. 2. 1 day out — *"Use it."* Slightly firmer. Recipe suggestions surface inline. 3. Day of — *"Cook it now."* Action buttons appear: Mark Used · Snooze 1 Day · Discard.

The numbers came out of three rounds of beta testing. Earlier than 3 days, users dismissed without acting. Later than day-of, the food was usually past it.

Action buttons matter

The day-of notification on iOS is interactive — you can dismiss it three ways, and the app updates without ever opening. Mark Used logs the save (and updates your savings dashboard). Snooze 1 Day rescues borderline items. Discard logs the loss honestly so the trend graph stays accurate.

We get more interactions on the action buttons than on the app icon itself. That's the design winning.

Offline, too

Local notifications fire from the device, even on airplane mode. For server-driven nudges (digest summaries, household hand-offs), we use Supabase `pg_cron` to fire push notifications on a schedule. Either way, you don't need to be in the app for the system to work.

The point isn't to nag. It's to give you the right information at exactly the right time, three times — and let the design do the rest.

Try it free

Start tracking your fridge in 60 seconds

The Free plan covers 10 AI scans a month. No card required.