Subject: Shoro RoyStatus: acceptingLast observed: New York
build 0024 · 2026

SnackSage

Quick snacks from what you have, before the delivery app

Built with
React, Postgres, gpt-6-luna, Claude Design, Claude Code
Live
SnackSage, image on file
Summary of findings

SnackSage began as a class intervention on sustainable lifestyles: three quick, unprocessed snacks from what's already in your kitchen, at the moment a craving would turn into a delivery order. The April 2025 prototype tested well with peers, but on 24 fixed test requests it showed 17 recipes that broke the user's own filters. The October 2026 rebuild checks every recipe twice and shows none.

One tap from delivery.

Impulse snacking comes from too little time, a hard day and processed food a delivery app away, at a cost in carbon, health and waste. Hirth and colleagues (2023) count habits like it among the structural barriers to 1.5°C lifestyles. For Raz Godelnik's Sustainable Business Models class at Parsons, I set out to put a quick, unprocessed alternative in front of that craving, made from what you already have.

Ten testers, two rounds. I built it on Replit with GPT-4 in April 2025: type what you have, swipe through three snack ideas, save the ones you like. Two rounds of testing with 10 classmates and peers found typing tedious, the images pointless and the diet controls unclear, so suggestion chips and pasting a list came in and the images went.

I called it a qualified success. But an alternative only works if you can actually eat it, and that's where it fell short.

Three screens of the April 2025 prototype: the ingredient form with apple, peanut butter and oats added and Vegan and Nut-Free selected; the end of the deck; and the Saved Recipes page (1 of 3)Three screens of the April 2025 prototype: the ingredient form with apple, peanut butter and oats added and Vegan and Nut-Free selected; the end of the deck; and the Saved Recipes page (2 of 3)Three screens of the April 2025 prototype: the ingredient form with apple, peanut butter and oats added and Vegan and Nut-Free selected; the end of the deck; and the Saved Recipes page (3 of 3)
The April 2025 prototype, Vegan and Nut-Free on. Its first card is below.

The filters didn't filter.

In October 2026 I had it reviewed and tested by hand. Pick Nut-Free and it handed you peanut butter bites labelled Contains Nuts. The server never read the filters, and the badges were guesses made in the browser: eggplant set off the egg warning.

The same pantry of apple, peanut butter and oats in both versions. April 2025, with Vegan and Nut-Free on: Apple Peanut Butter Bites, tagged Vegan, Vegetarian and Contains Nuts. October 2026, with the No peanuts filter on: a notice that peanut butter was left out, and an Apple Cinnamon Oat Porridge card stamped CHECKED., october 2026The same pantry of apple, peanut butter and oats in both versions. April 2025, with Vegan and Nut-Free on: Apple Peanut Butter Bites, tagged Vegan, Vegetarian and Contains Nuts. October 2026, with the No peanuts filter on: a notice that peanut butter was left out, and an Apple Cinnamon Oat Porridge card stamped CHECKED., april 2025

The model writes, the server decides. The model is asked for unprocessed snacks, with your filters as hard rules, and returns each recipe with its diets and allergens. Then the server checks every ingredient line against sourced term lists for 9 allergens and 4 diets. A recipe that fails is never shown. An ingredient you listed that breaks a filter is left out, and the deck says so.

The pass rule was fixed before any run was read and never moved. It carries the original bet: a passing recipe uses something from your kitchen, in 3 steps or fewer.

17 of 72 recipes broke a filter

  1. No filtersapple, peanut butter, oats
  2. Veganapple, peanut butter, oats
  3. No peanutsapple, peanut butter, oats
  4. Veganbanana, honey, yogurtVegan: 2 tablespoons honey
  5. Vegetarianbread, cheese, eggs
  6. No gluten, No dairybread, cheese, eggs
  7. Ketoavocado, eggs, bacon
  8. Paleoavocado, eggs, baconPaleo: 4 slices bacon
  9. No tree nutsrice, chocolate, nuts
  10. No dairycrackers, cheese, apple
  11. No gluten, No tree nutsoats, banana, almond milkNo tree nuts: 1 cup almond milk
  12. Vegan, No tree nutscoconut milk, mango, chia seeds
  13. No eggseggplant, tomato, olive oil
  14. No tree nuts, No dairybutternut squash, cinnamon, maple syrup
  15. Veganchickpeas, tahini, lemon
  16. Vegetarian, No dairycereal, milk, strawberries
  17. No tree nutspopcorn kernels, butter, nutmeg
  18. Vegetarian, No glutenbuckwheat groats, berries, honey
  19. No tree nuts, No glutenwater chestnuts, carrots, soy sauceNo gluten: 2 tablespoons soy sauce
  20. Keto, No eggscottage cheese, peachesKeto: 1 fresh peach, sliced
  21. Paleo, Vegansweet potato, cinnamon, coconut oilPaleo: pinch of sea salt
  22. No peanuts, No tree nutspeanut butter, celery, raisins
  23. Vegetarian, Keto, No gluteneggs, spinach, feta
  24. No filtersbanana
Each row is a test request, each square a recipe. Sea salt fails Paleo because Harvard's paleo review excludes salt.
Attached · decisionFilter claims
Attached · decisionFilter claims

TakenThe card lists the filters it checked and asks you to read product labels.

RejectedAny promise about what a recipe means for an allergy.

WhyA model can miss an ingredient and a term list can miss a name. The card says what it checked and leaves the label to you.

TakenThe server's check decides.

RejectedTrusting the model's own tags.

WhyThe model gets the filters as hard rules and still breaks them. In testing, Claude Haiku added sea salt under Paleo and soy sauce with gluten avoided, and the check caught every one.
0024.04[A]

Typing was the friction. The 2025 testers found it tedious, so the rebuild gives you three ways around it: one-tap Quick add, a sentence the model reads ("some PB and oats"), and a photo of your fridge that becomes a list you fix before generating.

On 10 public-domain photos, gpt-6-luna found 81% of the visible items to Claude Haiku 4.5's 51%. The photo is used once and never stored.

Three phone screens in order: a fridge photo being scanned, with Used once for this scan, never stored; the 17 ingredients found, with 7 more marked as not sure; and the deck of recipes that follows. (1 of 3)Three phone screens in order: a fridge photo being scanned, with Used once for this scan, never stored; the 17 ingredients found, with 7 more marked as not sure; and the deck of recipes that follows. (2 of 3)Three phone screens in order: a fridge photo being scanned, with Used once for this scan, never stored; the 17 ingredients found, with 7 more marked as not sure; and the deck of recipes that follows. (3 of 3)
The test set's first photo, a USDA fridge. 17 items found, 7 marked not sure.

Short screens, no pictures. Using the app on my iPhone showed the first layout assumed more height than a phone browser leaves. Now each screen pins one action bar, and a card gets denser only when it would run under it.

There are no food pictures. The 2025 testers saw nothing in them, and the illustrations tried in the rebuild weren't worth their cost.

The same card, Honey Yogurt Apple Dip, at two heights. At 844px each ingredient has its own row. At 600px they fold into one line under the allergen warning, and a Full recipe bar takes the steps. (1 of 2)The same card, Honey Yogurt Apple Dip, at two heights. At 844px each ingredient has its own row. At 600px they fold into one line under the allergen warning, and a Full recipe bar takes the steps. (2 of 2)
The same card at 844 and 600px tall. Short, the ingredients fold into one line.
Attached · mechanismThe deck card
Attached · mechanismThe deck card
A recipe card, Honey Yogurt Apple Dip, with a green CHECKED stamp on its corner, a Fresh tag and 5 minutes, a Contains dairy warning, three ingredients and a line telling you to check product labels.01 · Flavor and timeSweet, Savory, Crunchy, Spicy, Fresh or Cold, and the minutes it takes.02 · CHECKED stampOpens the list of filters this recipe was checked against.03 · Allergen warningNames what the recipe contains before you read the ingredients.04 · From your kitchen, to getA filled dot is something you have. An empty one you'd need to get.05 · Labels lineEvery card says "Generated by AI. Check product labels."
Each pin holds a note. Point at one, or tap it.0024.06[B]
0024.06[B]
Attached · detailsSix themes6 plates
Attached · detailsSix themes6 plates

Lemonade, Bubblegum, Salad bowl, Orange soda, Midnight snack and Popcorn. Lemonade is the default on a light device, Midnight snack on a dark one.

  1. Plate 1 of 6
  2. Plate 2 of 6
  3. Plate 3 of 6
  4. Plate 4 of 6
  5. Plate 5 of 6
  6. Plate 6 of 6
Plate 1–3 of 60024.06[C]
0024.06[C]
Attached · decisionRecipe images
Attached · decisionRecipe images
Six toy-dish illustrations from the third round, each a white board of three to five flat, outlined pieces

TakenNo images. Type, chips and tags carry each recipe.

RejectedA toy-dish illustration on every recipe.

WhyAt about $0.015 an image, three pictures cost about 50 times the three recipes they sat on and took about 10 seconds each. Output is not worth the squeeze.
0024.06[D]
Ownership

Mine, start to finish.

Looking back

A snack app doesn't change what people eat. At best it nudges. The 2025 testing showed the barrier isn't information. It's decision fatigue, emotional eating and convenience in a tired moment, and even typing ingredients was enough friction to lose someone.

The check is only partly mine to give. I can build the scaffolding around the model, the server's check and its term lists, but not what the model writes, so every card still says to check product labels.

The short screens were my miss. I made the screens in Claude Design and assumed the code would handle a short phone. Drawing them by hand, I'd have planned for it.

What the rebuild does for anyone's snacking I can't say yet. When I wrote this there was no usage data, and accounts wait until it shows people coming back.

Establish contact

· approach with care
Status
Subject accepting new roles.
Last observed
New York.
Set in Syne Mono; the subject in Pirata One ·built in Next.jsFile maintained by subject.Last amended 2026-10-11© 2026