Dev.to AI πŸ€– Ai πŸ‘ 0 πŸ“– 5 min read

SlothList: a grocery list app for people who refuse to think about groceries

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady What I Built I open the fridge. I stare into it. I close the fridge. Five minutes later I open it again, stare some

SlothList: a grocery list app for people who refuse to think about groceries

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

What I Built

I open the fridge. I stare into it. I close the fridge. Five minutes later I open it again, stare some more, and still can't tell you if we're out of milk or just low on it. By the time I actually sit down to write a shopping list, I've forgotten half of what I saw.

This week's theme is "Slow and Steady" β€” build something that rewards laziness. So I built SlothList: a tool that looks into your fridge and pantry for you.

You snap up to three photos. A vision model checks what's full, low, or empty. A text model turns that into one clean, categorized shopping list β€” and writes a ready-to-send WhatsApp message so you don't even have to retype it for whoever's doing the actual shopping.

The laziest part: staples. You type in the things you always want restocked β€” milk, eggs, coffee, whatever β€” exactly once. Every list from then on includes them automatically, scan or no scan. And if you can't even be bothered to take a photo, there's a "Reorder last list" button that rebuilds your list from last time with zero new input.

It runs entirely on a laptop with no GPU, using open-weight models through Ollama.

Demo

Here's SlothList after scanning a shelf β€” it correctly skipped the full carton of eggs, caught the near-empty milk and butter, and folded in my staples (coffee, toilet paper) without me mentioning them:

SlothList: a categorized grocery list with a ready-to-send WhatsApp message

1. Snap and forget

Up to three photos of a fridge, freezer, or pantry shelf. No typing, no manual inventory.

2. Staples: set once, forever restocked

This is the core "reward laziness" mechanic. Staples get merged into every list, whether you scanned anything or not β€” so you never have to remember to add coffee again.

3. One-click WhatsApp message

Hey, can you grab a few things on your way home? πŸ›οΈ
β€’ Milk (1 L)
β€’ Butter (500 g)
β€’ Coffee (1 pack)
β€’ Toilet paper (2 packs)

Copy it, paste it into a chat to your partner, roommate, or an Instacart shopper, done.

4. Reorder last list β€” the laziest possible path

No camera, no typing, no thinking. One click rebuilds your last list plus your staples.

Code

πŸ¦₯ SlothList

The grocery list app for people who refuse to think about groceries.

Built for Hacktoberfest 2026 Week 3: "Slow and Steady" β€” build something with open-source AI that rewards laziness.

What it does

  1. Snap up to 3 photos of your fridge, freezer, or pantry.
  2. A vision model (gemma4:31b-cloud on Ollama Cloud, or a local model like qwen2.5vl:3b) looks at the photos and spots what's full, low, or empty β€” no manual entry.
  3. A local text model (llama3.2 via Ollama) merges that with your staples (things you always want restocked, set once) into one clean, categorized shopping list.
  4. It also writes a ready-to-send WhatsApp message so you can forward it to a partner, roommate, or shopper in one tap.
  5. Feeling extra lazy? Hit "Reorder last list" to reuse your last scan plus your staples β€” zero photos, zero thinking, one click.

Runs 100% on a laptop…




One Python file (app.py), Flask + Pillow, no API keys, no external services besides Ollama.

How I Built It

The stack:

Part What I used
Fridge/pantry vision Gemma 4 on Ollama Cloud (free plan), or local qwen2.5vl:3b for fully offline
Shopping list + WhatsApp message Llama 3.2 (3B), local, via Ollama
Structured output JSON schema enforced through Ollama's format parameter
Web app Python 3.10 + Flask, single file
Storage Local sloth_data.json for staples and history

Built and tested on a normal laptop: Ubuntu, 15 GB RAM, no GPU.

Keeping the vision model honest

The prompt explicitly tells the model: "Only list items you can actually see. Do not invent items." Small vision models can hallucinate a tidy, expected-looking fridge when the photo is blurry or doesn't show much β€” so I also made it report what it actually looked at (observed), which shows up on the result page as a sanity check.

Full vs. low vs. empty, not a yes/no

Early on I had the vision model just flag items as "present" or "missing," but that's useless β€” you don't want "milk" on your list because it saw a carton, you want it there because the carton's nearly empty. Splitting status into full/low/empty and only pulling low/empty items into the shopping list made the output actually useful.

Staples always win

The list-building prompt is explicit: include every staple "regardless of status," separate from whatever the scan found. That decouples "what's in the fridge right now" from "what I always want on hand," which is the whole point of the staples feature.

Why Does Open Innovation Matter?

  1. Your fridge is a private place. A photo of what's inside it says a lot about a household β€” diet, budget, how many people live there, whether anyone's away. Running the vision model locally or through a single Ollama Cloud call, instead of handing photos to a always-on cloud app with analytics and ad targeting baked in, keeps that where it belongs.

  2. Laziness only works if it's free. The entire pitch of this app is "set it up once, then do nothing." A per-scan API charge undercuts that β€” you'd start rationing your own laziness, which defeats the purpose. Open-weight models make "use it constantly without thinking about cost" actually true.

  3. Runs on hardware you already own. No GPU, 15 GB RAM, a laptop. The bar for "an AI app that quietly handles something for you" should be a laptop, not a subscription.

  4. No model deprecation risk for a "set and forget" tool. The whole point of SlothList is that you stop thinking about it. A tool you stop thinking about is exactly the kind of tool that breaks silently when a cloud provider retires a model or changes pricing. Open weights don't get discontinued out from under you.

Try It Out

git clone https://github.com/VIKRAM-009/sloth-list
cd sloth-list
pip install -r requirements.txt
python3 app.py

Open http://localhost:5000, or http://<laptop-ip>:5000 on your phone over the same WiFi so you can snap the photo straight from the kitchen.

πŸ‘‰ GitHub Repository: VIKRAM-009/sloth-list

Thanks for reading! This challenge launched right alongside International Sloth Day (Oct 20) β€” may your fridge be well-stocked and your effort be minimal. πŸ¦₯

πŸ“° Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.