Role

Product & AI Practitioner (solo)

Team

Solo · 6 research participants

Duration

5 months

Status

Assessment complete · End-to-end MVP in progress · Beta pending

Sensory Sprout / AI meal planning system

A system for designing meals that work for sensory-sensitive families

Most meal tools optimize for variety or inspiration. Sensory Sprout is designed for something simpler: whether a meal will actually be eaten. It learns what each person can tolerate, then adapts meals that can work across the household.

Most AI systems optimize for better recommendations. This one optimizes for recommendations families can act on — by making the highest-cost failures structurally impossible and keeping everything else visible enough to correct.

Sensory Sprout product preview
15/2/0
Pass / partial / fail for the strongest eval configuration
40
Synthetic test cases across 10 archetypes and 3 difficulty tiers
More improvement from prompt architecture than from model upgrade
Overview

A system for families managing sensory-sensitive eating

Dinner doesn't fail when a recipe is chosen. It fails at the table.

Sensory Sprout is designed for that moment — capturing the constraints that determine whether a meal will be accepted before it ever reaches the table.

Most tools help you choose recipes. This system evaluates whether a meal will be eaten. It captures constraints most tools ignore — texture, temperature, preparation, predictability, and context — and uses them to adapt meals that can work across a household.

I designed and built the system end to end: user research, conversation design, prompt architecture, evaluation framework, ranking logic, transformation logic, and trust architecture.

Search results matched against each family member's dietary needs, sensory preferences, and watch-outs

Search results. Evaluated against each family member's profile — not just the search term.

Problem

Recipes assume convergence. For some families, divergence is the norm.

Most meal planning tools assume a single outcome: one meal, eaten by everyone. For families managing sensory sensitivities, that assumption breaks immediately.

The problem is not choosing a meal. It is whether that meal works once it reaches the table.

What this looks like in practice

My daughter likes shredded cheese cold, straight from the refrigerator. She will eat melted cheese, but only in certain situations. She eats broccoli steamed, never roasted or raw. She will eat red bell peppers raw, but never cooked.

These rules are conditional, contradictory, and highly specific. They are not about ingredients. They are about preparation, temperature, texture, and context. There is no way to search for that level of specificity.

What tools store

"She likes chicken."

Ingredient: Chicken

What actually determines whether a meal works

"She likes chicken nuggets. They have to be Tyson dino nuggets, from the bag, air-fried. She refuses to eat chicken prepared any other way."

Ingredient: Chicken Brand: Tyson Prep: Air-fried Texture: Crispy Temp: Hot Dish: Nugget
Research

Six interviews. One assumption killed. A clearer problem.

I conducted six semi-structured interviews with parents of children with sensory sensitivities, ARFID, or autism spectrum diagnoses.

Participants were recruited through online communities and personal networks. Sessions were 45–60 minutes and focused on a typical mealtime week: what they served, what got rejected, how they adapted, and what the emotional cost was. Interviews were not designed to validate a solution — they were designed to understand the actual shape of the problem.

What parents are actually managing

Parents are not just managing logistics. They are carrying an unstable system entirely in their heads: cooking multiple meals, watching safe foods disappear, and balancing nutrition with predictability.

"I have to make 3 different meals... they liked it yesterday but not today."

Parent community post

"I microwaved her plain Alfredo pasta and the sauce at the edge turned slightly brown. She wouldn't eat it."

Parent of a child with ARFID (interview)

I initially thought the opportunity was to help families expand variety and improve nutrition. The interviews killed that assumption quickly: the real need was not better options. It was getting the child to eat at all.

UX Decision

Research redefined what "success" means.

Reframing success as acceptance rather than discovery changed what the system optimizes for, what it surfaces, and how it communicates outcomes to parents. A system designed for variety would have been built entirely differently. This is where the architecture starts.

Predictability and variation pull in opposite directions. A meal that's too familiar narrows the safe food list over time. A meal that's too new gets rejected at the table. The system has to hold both.

Synthesis

The diagram below maps what emerged: two competing needs pulling in opposite directions, three structural constraints any solution would have to respect, and a single design requirement that had to hold all of it.

DESIGN REQUIREMENT Meals must stay acceptable while allowing controlled variation CONSTRAINT Table dynamics Meals succeed or fail socially, not just nutritionally. NEED Predictability Meals must feel familiar enough to avoid immediate rejection. CONSTRAINT Parent effort The meal has to be realistic to prepare, adapt, and serve. NEED Variation The system still needs enough change to prevent safe foods from narrowing. CONSTRAINT Sensory tolerance Texture, preparation, temperature, and predictability determine viability entirely.

What a successful meal must balance. Five competing forces define what any successful meal must balance for these families — and what the system has to hold in tension at once.

Reframe

The primary goal wasn't nutrition. It was acceptance.

Parents aren't looking for new recipes. They're trying to get through the day with something that everyone will actually eat.

The question isn't "what sounds good?" It's "will this actually be eaten?" Most tools optimize for the first question. For families managing sensory sensitivities, that assumption breaks immediately.

Reframe

The problem wasn't variety. It was reliability.

Parents weren't asking for better options. They were asking for fewer failures.

For families managing sensory sensitivities, "working" isn't just preference. Texture, preparation, temperature, and predictability can determine whether a meal is accepted at all. The challenge wasn't finding a better option for one person — it was making one meal workable across the whole table.

Traditional systems Sensory Sprout
Preference and discoveryTolerance and reliability
"What sounds good?""Will this work?"
Success = meal chosenSuccess = meal accepted
Product

Designing for reliability at the table

The system is designed to answer one question: will this meal work?

To do that, it captures constraints, structures them into a usable model, evaluates meals against those constraints, and adapts outputs to fit real conditions. Each step makes implicit factors explicit — turning context-dependent behavior into something the system can reason about.

1 Input

Signals

Structured inputs plus conversational nuance around texture, preparation, and context

2 Interpret

Constraints

AI surfaces implicit rules as explicit, reviewable constraints

3 Model

Profile

Conditions are structured into a usable decision model

4 Evaluate

Viability

Meals are scored against constraints before recommendation

5 Output

Adapted meals

Results are filtered, adapted, and ranked by likelihood of success

System flow. From contextual input to evaluated, adapted meals — each step makes implicit factors explicit.

1
Signals. Structured form data combined with conversational nuance — brand specificity, preparation conditions, texture rules — that no filter would surface.
2
Constraints. AI surfaces implicit rules as explicit, reviewable constraints. "Steamed, not roasted" becomes a structured signal the system can evaluate against.
3
Profile. Human reviews before anything is recommended. The parent sees every constraint, corrects misunderstandings, and approves the model before it reaches the evaluation layer.
4
Viability. Meals are scored against constraints before they're surfaced. A recipe is only recommended if it can actually work — not just if it matches the search term.
5
Adapted meals. Results are filtered, adapted, and ranked by likelihood of success — with explanations the parent can evaluate, not just a ranked list to trust blindly.

What the system deliberately excludes

Four categories were ruled out deliberately, each for a specific reason:

  • AI recipe generation. Retrieval depends on a curated, verified database with deterministic filtering. AI-generated recipes would require validation infrastructure for allergen safety — a failure mode that's irreversible for children.
  • Behavior-change framing. The goal is accurate personalization, not expanding what children will eat. Research made clear that framing the tool around improvement misaligns it with what families actually need.
  • Exhaustive upfront profiling. Abandonment is a bigger risk than incomplete data at onboarding. Profiles start lean and deepen through use.
  • Nutrition optimization as primary. Premature before the acceptance problem is solved. Getting the child to eat anything at all is the goal.

Conversation design: three iterations

Getting parents to articulate implicit food rules required the right format — one that met them where they were rather than asking them to think abstractly. Three versions before the approach worked.

V1
Static survey
Asked direct questions about safe foods, texture preferences, serving temperature. Parents gave vague answers. Abstract texture categories overwhelmed without concrete examples. Garbage in, garbage out.
V2
Nutrition-focused survey
Added eating style categories, focus on nutritional improvement. Parents felt implicitly pressured to "fix" their child's eating — misaligned with what research surfaced as the real goal.
V3
Hybrid conversational assessment
Brief standard intake establishes basics. Conversational AI takes over, adapting depth based on eating style. Concrete food examples teach sensory vocabulary. Profile review before saving gives transparency and control.

Four conversation flows, deterministically routed

The biggest single improvement to the assessment wasn't a prompt change. It was a product decision: ask one question before the conversation starts.

"Which describes how [name] eats?"

Eats most thingsFlow A (3 turns max)
Has a set list of foodsFlow B (5 turns max)
Eats very few foodsFlow C (6 turns max)
I don't know them wellFlow D (1 turn)

Routing is deterministic — an If-Else based on the user's selection, not LLM inference. This eliminated the biggest failure mode in multi-turn testing: a single overloaded prompt trying to manage four different conversation strategies simultaneously.

UX Decision

Deterministic routing over probabilistic inference.

Because wrong flow means wrong questions means a useless profile. Early versions let the AI infer eater type mid-conversation — it guessed wrong, asked misaligned questions, and conversations ran twice as long. Moving classification to a single pre-conversation UI choice made routing 100% reliable.

Flow strategies

FlowEater typeWhat the turns are for
AFew avoidancesWhat makes meals work — textures, flavors, cooking styles. Avoidances surface in Turn 2, not Turn 1.
BSelective with rulesWhat makes meals fail — cross-cutting patterns filter better than food-by-food rules
CVery restrictiveWhat's been lost — dropped foods, avoidance categories, rejection patterns
DLimited knowledgeWhatever they have. Profile improves through recipe feedback.

Each agent sees only its own flow's instructions (~1,200–1,600 words) instead of all four simultaneously (~11,730 words). Cross-flow contamination is structurally impossible — Flow B literally cannot ask Flow A's exception question because it's not in Flow B's prompt.

Conversational assessment showing three turns of dialogue 1 2 3
1
Opens broad, not specific. "A good day of eating" invites the parent to describe normal before surfacing what's hard — avoiding the blank-slate problem of a structured form.
2
One response, six constraint types. Food identity, preparation method, cooking state, sauce tolerance, texture context, and hard rules — all unprompted. A form would have missed most of them.
3
Cross-cutting follow-up. Instead of probing each food individually, the system asks about preparation rules — surfacing patterns across foods faster than food-by-food follow-up.
Structured profile showing sensory constraints 4 5
4
Constraints, not preferences. Watch-outs capture cross-cutting rejection patterns — not just disliked foods. These are what the ranking layer evaluates against before surfacing any recipe.
5
Explicit and correctable before it shapes anything. Every constraint is reviewable before it reaches the recommendation layer — the parent can correct a misunderstanding here rather than discovering it at the table.
System Design

The architecture follows the cost of getting it wrong.

Not all failures are equal. A weak recommendation is recoverable. A missed allergen is not.

That distinction shaped the architecture. Instead of treating the product as one continuous AI workflow, I separated it into layers based on the cost of failure and the kind of judgment each layer required.

Architecture by failure cost

LayerIf it failsCostDesign
Recipe retrieval Suggests an allergen Irreversible Deterministic
Ranking + transformation Suggests a bad meal Recoverable AI + rules
Assessment Asks the wrong question Adaptive AI + routing
UX Decision

Choosing not to use AI in the safety-critical layer is itself a design decision.

The recipe retrieval layer is deliberately non-generative. A missed allergen is irreversible — no later layer can undo it. The design question wasn't "how do we make AI safe here?" It was "should AI be involved at all?" Deterministic filtering enforces safety structurally, not through model instruction.

Layer rationale

Why the safety-critical layer is deterministic

Retrieval is the highest-risk layer because it determines what enters the candidate set in the first place. If the system surfaces a recipe containing a known allergen, no later layer can make that safe. For that reason, retrieval is deliberately non-generative. Safety constraints are enforced structurally, not probabilistically.

Where AI is useful

Once the candidate set is safe, the problem changes. The question is no longer whether a recipe is allowed — it is whether it can work. Ranking and transformation require interpretation: whether a meal can branch cleanly, whether components can stay separate, whether steps should change before serving. These layers benefit from model judgment because the failure cost is lower and the task is more contextual.

Why assessment is its own layer

Assessment sits upstream of everything else. If the system misunderstands what a person can tolerate, every downstream decision degrades. I treated it as a separate layer with its own routing logic, stop conditions, and evaluation criteria. The goal was not to generate a smooth conversation — it was to produce a usable decision model for the rest of the system.

Trust Architecture

Trust isn't a feature. It's a set of decisions made across every layer.

For families whose child has severe allergies or ARFID, the cost of a wrong recommendation isn't inconvenience — it's a failed meal, a lost safe food, or a medical risk.

Trust has to be earned structurally, not promised in copy. Three mechanisms work together across the system to do that.

UX Decision

One human-in-the-loop moment, placed deliberately.

Profile review happens before any recommendation is generated — the only moment of structured oversight in the flow. This placement was intentional: where the cost of a misunderstanding is lowest and the parent's ability to correct it is highest. The parent approves the model, not just the output.

Trust mechanisms — each addressing a different failure risk

Trust does not come from saying the system is careful. It comes from making the highest-cost failures structurally harder to make, and keeping the rest visible enough to correct.

Structural
Deterministic retrieval

The recipe layer is non-generative by design. Safety constraints run before any model judgment occurs — if a family member has a dairy allergy, no recipe containing dairy enters the candidate set. Because a missed allergen is irreversible, the architecture doesn't ask AI to be careful here. It removes AI from this layer entirely.

Human-in-loop
Profile review before recommendation

Every constraint the system surfaces is reviewable and correctable at the profile step, before it shapes any result. This is the only human-in-the-loop moment before recommendations are generated. The parent approves the model — not just the output.

Transparent
Reasoning visible in results

The search results screen shows exactly what the system is evaluating against for each family member — before the parent commits to a recipe. A parent can disagree with the reasoning and adjust the profile, not just accept or reject the output.

Evaluation

Evaluating reliability under real conditions

Standard single-response testing was not sufficient. The assessment is multi-turn and stateful — errors compound across interactions and often appear acceptable in isolation.

Pass / partial / fail
15/2/0
The strongest configuration after 25+ prompt iterations
Turns per conversation
3–5
Reduced from 8–11 in early multi-turn testing
Synthetic test cases
40
Across 10 archetypes and 3 difficulty tiers

Before running a single test, I designed a three-tier framework. Tier 1: 40 single-turn synthetic queries to validate first-response behavior. Tier 2: three multi-turn scenarios plus four edge cases. Tier 3: planned automated runs at scale using Langfuse observability.

The 40 test cases were built from 10 archetypes grounded in interview data — brand-locked, texture-selective, shrinking safe list, smell-reactive — difficulty-stratified across easy, medium, and hard. Hard cases meant emotional content, near-zero input, or a diagnosis mention where the wrong response could damage trust.

UX Decision

The evaluation framework was a design artifact.

It defined what "good" looked like before any prompt was written. 40 synthetic test cases built from research archetypes, difficulty-stratified across easy, medium, and hard. This wasn't QA — it was a specification. The framework had to exist before the prompt, because without it there was no way to know what the prompt was supposed to do.

What single-turn testing missed

Running isolated single-turn tests made individual responses look acceptable. Multi-turn testing revealed a different picture — failures that only became visible across a full conversation.

  • 01 The system did not know when to stop. Conversations ran for 8–11 turns when they should have completed in 3–5, adding friction without improving the profile.
  • 02 Logic leaked across eater types. Rules designed for one flow appeared in another, producing incorrect questions and weaker models.
  • 03 The system kept probing after it had enough signal. Even after identifying a useful pattern, the conversation often continued instead of exiting cleanly.

Model comparison and what drove the biggest gains

What drove the biggest gains

The most significant finding wasn't about model selection. It was about prompt architecture. I tested the variables separately — same prompt on a stronger model first, then restructured prompt on the stronger model.

4o-mini, originalGPT-5.2, originalGPT-5.2, restructured
Pass6915
Partial872
Fail310

Prompt architecture drove 2× more improvement than the model upgrade.

Model selection

ModelQualityLatencyCost / 1M tokens
GPT-4o-miniGeneric questions8–16s$0.15 / $0.60
GPT-4.1-miniConfidently wrong7–10s$0.40 / $1.60
GPT-5-miniBest quality46–59s$0.25 / $2.00
GPT-5.2 ✓Strong17–28s$1.75 / $14.00

At ~$0.04/profile, 20 beta families (80 profiles) = ~$3.50 total. Cost was never the constraint — but understanding why required actually testing it.

Safety-critical failure modes caught in evaluation

The model reliably invented sensory data — hallucinating texture preferences never mentioned — until the tracking schema made invention structurally detectable. Every constraint required a source label. Unsourced claims failed the eval.

Allergens also dropped between turns. A dairy allergy mentioned in turn one would be gone by turn three. The fix was carry-forward enforcement: allergies were required in every tracking block. The model is not trusted to remember what it cannot afford to forget.

Reflection

Three things I learned about designing AI systems — not just about this one.

Structure upstream is more valuable than flexibility mid-conversation.

In high-specificity, trust-sensitive domains, abstract questions produce abstract answers. The harder problem isn't getting AI to ask better questions — it's removing the ambiguity that makes good questions impossible in the first place. Every time I moved a decision upstream and made it structural, the AI's performance in the remaining space improved. Reducing the model's responsibility in one place consistently freed it to do better work everywhere else.

The systems question

Midway through the project I was ready to move to beta. The assessment was working — 25+ prompt iterations, a structured eval framework, passing test cases. Then I stopped and asked a question I hadn't asked rigorously enough: was the assessment capturing what the rest of the system actually needed?

Instead of moving forward, I took a full household profile — multiple people, different constraints — and worked through what adapting a real recipe for that family would require. Then I worked backwards: what data would make that adaptation possible? The gaps were immediate and specific. The conversation design got better as a consequence — because I finally understood what the assessment was for, not just whether it was producing smooth conversations.

Catching that before beta, not after, was the right call. On a real engagement I'd ask that question earlier — before building evaluation infrastructure, not after.

What's still open

Recipe search, ranking, and transformation logic are designed but not yet built. The project is paused while I complete other portfolio work. I stopped here intentionally: I wanted feedback on whether the core system holds up, not noise from a half-finished product.

What I'd do differently

On a real engagement, the sequence would be different. I approached this primarily as an AI designer and builder — going deep on prototyping and evaluation before validating the core hypothesis with real families. A moderated session with two or three families and a rough prototype would have answered the market question faster and cheaper than a working system. The building came before the market question, and I know it.

What's Next

The data the system already collects is the data food therapy needs.

The sensory dimensions the assessment captures — texture, temperature, preparation method, brand specificity, predictability — are exactly the dimensions food chaining uses to identify safe next steps toward new foods.

Food chaining is a clinically-established therapeutic approach: start with a food a child already accepts, then introduce small sensory variations to bridge toward a new food. McDonald's fries → homemade fries → different-shaped fries → roast potato. The SOS (Sequential Oral Sensory) Approach breaks food introduction into 32 gradual steps, starting with tolerating a food in the same room and progressing toward tasting and eating. Both depend on knowing a child's sensory profile at the level the assessment already captures.

Now
Daily operations
In progress
  • Sensory assessment
  • Profile building
  • Recipe search
  • Ranking + adaptation
  • Trust architecture
Next
Longitudinal tracking
Designed
  • Meal outcome logging
  • Safe food history
  • Profile refinement
  • Food introduction log
  • Child meal involvement
Future
Clinical integration
Concept
  • Therapist access
  • Food chaining plans
  • SOS exposure tracking
  • Progress sharing
  • Therapist revenue model
The through line

The assessment wasn't just built to find tonight's dinner. The data it captures is the same data a food therapist would use to plan a therapeutic progression. Solving the daily operations problem first wasn't a detour — it was the foundation the clinical layer needs to exist.