Index

About

Problem

Solution

Research

Define

Design

Testing

Reflection

Foodai — UX/UI Redesign of an AI-Powered Nutrition App

What started as a technically oriented MVP with the standard iOS look evolved into an app with a clear information architecture, its own visual identity, and a design system.

Company | Product

InfinityAppCraft | Foodai

My Role

Product Designer

Team

Product Manager

Developer

Developer

Timeline

10/2024 – 09/2025

Scope

UX Research

Product Strategy

UX/UI Design

Prototyping

Testing

Design System

Overview

End-to-end redesign of the Foodai consumer app. Research, restructuring of the information architecture and all core flows, new UI and design system. This case study highlights the three main flows.

Structural Impact

Moved the core action from the submenu to the main navigation

The “Generate” feature used to be hidden behind a ‘Chat’ tab and a “New Chat” button.

Now it's its own “Generate” tab, which displays the prompt and filter views directly.

Teilnehmende, spontan rekrutiert in der Münchner Innenstadt
(Guerilla Test, formativ)


Recipe Management from 2 Tabs to 1 Flow

Recipes used to appear as chat histories under “Chat” and were only converted into cards under “Recipes” after being manually saved.

Now, the recipe card is created automatically and appears exclusively in the “Recipes” tab.

Teilnehmende, spontan rekrutiert in der Münchner Innenstadt
(Guerilla Test, formativ)


Scattered Filters restructured into a Two-Level System

Previously spread across multiple menus, with allergies mixed in with diets.

Now organized as global filters in the profile and situational filters for each generation. With visible filter tags from the recipe card to the saved recipe search.

Teilnehmende, spontan rekrutiert in der Münchner Innenstadt
(Guerilla Test, formativ)


A Custom Visual Identity Instead of the Standard iOS Design

New visual design and token-based design system with documentation, ready to be handed off directly to the development team.



Teilnehmende, spontan rekrutiert in der Münchner Innenstadt
(Guerilla Test, formativ)


The release has not yet been approved by the client, so there are no performance data from actual use. The usability test shown here is formative.

BACKGROUND & PROBLEMS

The foodai app uses AI to generate personalized recipes, addressing the question we all ask ourselves every day: What should I cook today?


The basic architecture of the MVP was already in place, though it featured the standard iOS look.
I was commissioned to create a branded UI with its own visual identity. However, it became clear early on in our discussions that, in addition to the look and feel, structural work on the information architecture and user flows would also be necessary.

The Key Issues

  • Confusing navigation:

The “Chat” tab did not lead directly to the recipe generation screen, but rather to an intermediate screen with a “New Chat” button.

  • Generated recipes scattered across 2 tabs:

  • Generated recipes scattered across 2 tabs:

  • Generated recipes scattered across 2 tabs:

Generated recipes were stored as unstructured chat histories under “Chat” and, after being saved, as converted recipe cards under “Recipes.”

  • Nested Filter:

  • Nested Filter:

  • Nested Filter:

Spread across several menus, and with content that's too limited to provide a truly personalized experience.

THE OBJECTIVE

Direct access, one location per task, filters as a system

The goal was to create a smoother, more intuitive experience that simplifies day-to-day planning and delivers results quickly. This included direct access to recipe generation, centralized recipe management, more personalized filters, and a new feature for generating shopping lists. In addition, a unique visual identity and a design system were developed to ensure consistency.

The goal was to create a smoother, more intuitive experience that simplifies day-to-day planning and delivers results quickly. This included direct access to recipe generation, centralized recipe management, more personalized filters, and a new feature for generating shopping lists. In addition, a unique visual identity and a design system were developed to ensure consistency.

The goal was to create a smoother, more intuitive experience that simplifies day-to-day planning and delivers results quickly. This included direct access to recipe generation, centralized recipe management, more personalized filters, and a new feature for generating shopping lists. In addition, a unique visual identity and a design system were developed to ensure consistency.

RESEARCH

The MVP had never been tested with external users. It had been tested primarily by team members who had helped develop the app themselves, as well as a few individuals from their circle. The team reported that they had observed users struggling with navigation and prescription management, but had not documented these issues in a measurable way.


I treated these observations as hypotheses and, as the sole designer responsible, tested them using low-effort analysis methods, given that resources were limited.

The MVP had never been tested with external users. It had been tested primarily by team members who had helped develop the app themselves, as well as a few individuals from their circle. The team reported that they had observed users struggling with navigation and prescription management, but had not documented these issues in a measurable way.


I treated these observations as hypotheses and, as the sole designer responsible, tested them using low-effort analysis methods, given that resources were limited.

The MVP had never been tested with external users. It had been tested primarily by team members who had helped develop the app themselves, as well as a few individuals from their circle. The team reported that they had observed users struggling with navigation and prescription management, but had not documented these issues in a measurable way.


I treated these observations as hypotheses and, as the sole designer responsible, tested them using low-effort analysis methods, given that resources were limited.

01 · Competitive Analysis

Question:

What functional advantages does foodai offer compared to other recipe planners?

Method:

A Comparison of Five Apps Based on Positioning, Personalization, Features, Monetization, Ratings, and UI

Findings:

Curated recipe catalogs and databases become repetitive after just a few weeks, and users see the same dishes over and over again. Users in 4 out of 5 apps report that ads and upselling, before any real value is even created, are a common problem.

View Competitive Analysis

02 · Online survey, 47 responses (not representative)

Question:

What is everyday life really like when it comes to planning, shopping, and cooking?

Method:

Quantitative and qualitative questions, analyzed using charts and affinity mapping.

Findings:

No one consistently plans ahead; about 64% cook based on the ingredients they have on hand, and for more than half, daily life is spontaneous. 43% have specific dietary needs, and 30 out of 39 don't know how to substitute the necessary ingredients.

View survey

03 · Heuristic UX Audit According to Nielsen

Question:

Where are the problems in the current MVP?

Method:

All core screens were systematically checked for friction points and heuristic violations.

Findings:

The audit confirmed the team's hypotheses and provided concrete evidence to support them. The main issues were the unclear process for initiating data generation, recipe management spread across two screens, a lack of transparency regarding token usage, and an underdeveloped filtering system.

View selected screenshots from the audit:

Additional Research Findings

Competitive Analysis

Recipe fatigue

Curated recipe catalogs run dry after a few weeks, and users keep seeing the same dishes.


Kuratierte Rezept-Kataloge erschöpfen sich nach Wochen, Nutzer*innen sehen immer dieselben Gerichte.

Competitive Analysis

Monetization

Ads come up as a recurring complaint, as does being pushed to upgrade before the app has delivered any real value.

Werbung wird wiederkehrend kritisiert, ebenso Upselling Zwang, bevor überhaupt Mehrwert entsteht.

UX Audit

Transparency

The token counter isn't visible throughout, so consumption stays opaque.


Survey

Spontaneous, not planned

Nobody plans ahead consistently. About 64% of respondents cook with whatever ingredients they have on hand, and 40 out of 47 name availability as a criterion when choosing a recipe.

Niemand plant konsequent voraus. Ca. 64% der Befragten kochen nach vorhanden Zutaten, 40 von 47 nennen Verfügbarkeit als Kriterium bei der Rezeptwahl.

Survey

Specific dietary needs

About 43% of respondents have specific needs (lactose, gluten, histamine, etc.). Of the 39 respondents with specific dietary needs, 30 often don't know how to substitute ingredients.

Ca. 43% der Befragten haben spezifische Bedürfnisse (Laktose, Gluten, Histamin u.a.), doch 38 von 47 wissen oft nicht, wie sie Zutaten ersetzen können.





Conclusion

Since the structural problems surfaced in the audit underpinned every decision that followed, the work started with the information architecture rather than the visual design I had originally been briefed for.

DEFINE

One location per task: the new navigation structure

I visualized the MVP’s information architecture as a sitemap and a simplified user flow to highlight dependencies and navigation logic. This allowed me to reorder the flows until a coherent picture emerged.


Each core flow was given its own spot in the tab bar:

Discovery — Inspiration and Suggestions
Generate — the central action, now directly accessible instead of hidden behind a chat tab
Recipes — one storage location instead of two
Shopping — the new shopping list feature, in the former location of the settings

The profile settings were moved to the header, closer to the token display, which can now also be accessed directly from the balance.

The image shows the sitemap and the core user flow for generating recipes, each with a “before” and “after” view.

Filters as a continuous system instead of a hidden menu

I've rethought filters and divided them into two levels:

Global — filters that are always active are part of the personal profile and are located in the settings
Situational — optional filters for each recipe, in addition to or instead of the prompt

The key is that the filters are attached to the recipe as tags, creating consistent brand recognition. This ranges from setting visible feature tags on the recipe card to searching saved recipes by tag. In the “Discover” section, these tag themes generate random quick-start suggestions.

DESIGN

Wireframing

Based on the new structure, I developed module-based wireframes.
The most important decision was made regarding the generation screen. In the MVP, the filter and prompt input were on two separate screens, and when switching to the chat window, the selected filters were no longer visible, even though they influenced which recipe was generated. Now both are on a single screen. You can see at a glance what you can enter and which filters are active.

Before and after the three main workflows:

Top Design Decisions

01 Straight into generating

→ from the UX audit: the entry point is vaguely labeled and hidden behind an intermediate screen

The tab bar clearly highlights the main “Generate” action. Generated recipes are automatically saved as structured cards under “Recipes.” Each core function thus has its own distinct location.



02 One place per task

→ from the UX audit: recipes scattered across 2 tabs, recipe card only after saving manually

Der Einstieg erfolgt sofort über den Generieren-Tab, statt hinter einem „Neuer Chat"-Button versteckt. Filter und Prompt liegen dort auf einen Blick auf einem Screen.



03 Filters as a system throughout

→ UX audit: nested inside the settings, allergies mixed in with diets → Survey: 43% with specific dietary needs (not accounted for so far)


04 Generated shopping lists

→ Survey: 70% use a shopping list, but 0% plan ahead regularly → Survey: 57% spend under 15 min/week on meal planning

If desired, a shopping list can be generated from any recipe, and multiple lists can be combined into a single one. This eliminates the need for manual planning.

If desired, a shopping list can be generated from any recipe, and multiple lists can be combined into a single one. This eliminates the need for manual planning.






New feature: generated shopping lists

Every recipe can be turned into a shopping list, and several can be bundled together. The idea came straight out of the survey, and out of the potential to connect a delivery service later on. The shopping list is already an established tool, but the planning work behind it barely happens, and that's exactly what generating takes off people's hands.

A visual language between AI, chat and healthy food

The visual language had to bring together three things: technological intelligence, the chat-based way of interacting, and healthy food. Fresh, food-related colors form the basis for that.

(Leaf) green — primary color for interactions
(Carrot) orange — tokens and special notices
Deep orange — error messages and delete states
(Ceramic) white — whitespace
(Charcoal) black — text

The same color logic carries through into the filter tag system: every tag carries its own emoji, intolerances sit on an orange background so they stand out as critical markers, and diets are green. Typography, iconography and layout follow familiar chat and messenger patterns, which keeps interacting with AI accessible even for users who have little experience with AI tools.

Color scheme used: Primary green for actions, orange for tokens and incompatibilities.

Screens: Settings, Profile Filter, Discover Tab, Random Recipe, Generate Message History, Generated Recipe, Generated Shopping List

Screens: Settings, Profile Filter, Discover Tab, Random Recipe, Generate Message History, Generated Recipe, Generated Shopping List

Screens: Settings, Profile Filter, Discover Tab, Random Recipe, Generate Message History, Generated Recipe, Generated Shopping List

To that end, I developed a new brand logo for foodai that incorporates the color scheme and also functions as a loading animation.

Design System as Single Point of Truth

A component-based design system was developed in parallel with the UI. The goal was to create a non-destructive design foundation. Changes to a variable or component take effect globally, without requiring manual maintenance and without breaking existing screens.

All color and size values are tokenized. Semantic and component-related tokens were developed in collaboration with the developers and are stored in Figma’s variable library, along with documentation serving as a guide for their structure and correct usage.

This approach yielded two key benefits: screen designs could be adapted via components and tokens during reviews and iterations, rather than manually. And the handoff to the development team went more smoothly because the component names could be adopted almost exactly as-is.

TESTING

Test: Does the new structure work in practice?

Development of the new UI began, resulting in a TestFlight functional prototype. I used this to conduct a moderated, formative usability test with 8 task scenarios aligned with the core interaction flows.

6 participants — approached spontaneously in downtown Munich on their way home
8 tasks — target paths defined in advance, evaluated on a four-point scale
Formative, not comparative — the MVP had never been systematically tested, so a before-and-after comparison was not possible

View test design

The new structure held up; the problems were visual in nature

Navigation, as well as recipe and shopping list management, functioned in their basic structure and were easy to find. The problems lay almost exclusively with individual elements, not with the information architecture. These included, among other things, elements that were misplaced or not clearly recognizable as interactive.

Usability test results

Iterations

Task 2 - Enter Prompt

P2 started in the “Discover” tab,

P3 and P5 missed the prompt entry because the filter drop-down menus were open.


(3 out of 6 correct)

The prompt input was placed as a floating, fixed element above the tab bar. “Generate” moved from position 3 to position 2 in the tab bar, making it fit more logically into the flow.



(See before-and-after visualization)

Task 5 - Top Up Token Balance

Almost no one recognized the token display in the header as an interactive element; 5 out of 6 took the detour through the settings.


(1 out of 6 correct)

A plus icon in the token display now clearly indicates that tokens can be added.





(See before-and-after visualization)

Task 7 - Generate Shopping List

The button was too inconspicuous; P3 and P6 searched through tabs and headers before they found it.


(3 out of 6 correct)

The button was given a text label, highlighted in the primary color, and moved from the header to the recipe card.




(See before-and-after visualization)

Der Button erhielt zusätzlich zum Icon ein Textlabel, wurde in Primärfarbe hervorgehoben und vom Header in die Rezeptkarte verlegt.


(Siehe vorher / nachher Visualisierung)

Additional Optimizations (Not Derived from the Test)

Token Usage Before Generation

Actions that consume tokens are now clearly marked with a usage indicator on the respective action button.


(See before/after visualization)

Higher text contrasts

Text contrast ratios have been increased overall.

In addition, the focus on the recipe card is now specifically on the numerical values for nutritional information and ingredients, and on the shopping list, on the ingredient names. When cooking and reviewing the recipe, the quantities are most important; when shopping, the ingredient names are most important.

Servings Removed as a Filter

Servings have been removed as a standalone recipe filter.

As was originally the case in the MVP, this setting is configured exclusively via the stepper on the recipe card.

This saves resources during recipe generation, since the quantity can be calculated after the recipe is generated.

Deferred Optimizations

The following findings were intentionally set aside as having medium to low priority and will be optimized based on further test runs.

Global vs. Situational Filters

This distinction should be explained during onboarding and, if necessary, given a different name.

“Bundle” Shopping Lists Promotion

The placement and explanation may need improvement; the solution should be determined after further testing.

Mixed Diets

Further testing should determine whether detailed combinations are necessary or whether the categories Omnivore / Vegetarian / Vegan / Pescatarian / Flexitarian / Keto cover most cases.

For first-time users, a note may be needed explaining which foods are included in each category and which are not.

Kitchen Appliances and Cooking Methods

In addition, the idea arose to include appliances as a separate filter category in order to find recipes for specific appliances, such as air fryers, or to exclude appliances like the oven.

The priority for now is a fully functional release.

Only real-world usage data will reveal which of these points should be given higher priority.

In addition to the test iterations, I refined token transparency, text contrast, and the filter logic. I deliberately set aside other findings with medium to low priority; the priority at first was to deliver a functional release.

Reflections & Open Questions

Thinking beyond the scope of the project paid off
I was hired for the visual design; the less-than-perfect UX was mentioned in passing, apparently with the hope of a quick fix. The UX audit then revealed structural issues and showed that the MVP had never been tested with external users. Taking the initiative to get to the bottom of the problems was challenging, but it built mutual trust.


If you think it’s too early to test, it’s usually not early enough
In hindsight, I would have liked to have tested the MVP right at the start with a usability test to have real data points instead of assumptions. I had argued for this early on, but I wasn’t able to convince them until I had results from the audit and survey. With fixed-price quotes, an initial test can be firmly scheduled; with hourly billing, the client ultimately decides how their hours are used.


Open Questions
Does a permanently visible token status create subjective pressure, thereby pitting profit motives against user goals? How reliably does the AI estimate nutritional values and suggest substitute ingredients for food intolerances? And does generative AI truly solve the recipe fatigue problem in database-driven apps, or does a pattern of repetition eventually set in there as well?