All work

GoodKitchen

A mobile kitchen app that tracks what's in your fridge, finds recipes to make with it, and keeps your shopping list up to date.

Three stages of the GoodKitchen fridge screen: a pencil sketch of the item grid, the Figma design with item cards for eggs, milk, carrots, and cheese, and the Figma item menu for eggs.
Original hand-drawn sketch of the fridge page, and high-fidelity mockups in Figma.

Overview

GoodKitchen is a mobile kitchen app with three tabs: an inventory of what's in your fridge, a recipe catalogue based on what you have, and a shopping list creator that automatically updates when you're running low on something.

We designed and prototyped it over a semester as a team of four, each focusing mainly on one page of the app. I created the app's design language in Figma so the whole app would stay consistent, and I designed and built the inventory (fridge) page.

My Role
UX Designer & Front-End Developer
The Team
4 students (CS and Immersive Media Design)
Our Timeline
Sep–Dec 2025
The Tools
Figma, HTML, CSS, JavaScript

Where We Started

Our original pitch was an app for roommates and anyone who regularly stays in more than one place, like a college student who lives on campus during the week and goes home on weekends. You could share multiple fridges, claim an item as yours so your roommates know not to drink your sodas, and set a "running low" quantity so items get added to the shopping list automatically.

After the first phase of the project, where we created our pitch, got early feedback, sketched low-fidelity prototypes, and created our single high-fidelity design language mockup in Figma, our professor asked us to instead focus on a single fridge and a single user. This was a major change, but we viewed it as a shift in our client's needs. We had to adapt.

Our New Focus

Perishable ingredients often end up wasted because people don't have ideas to fully use them up, or because they are simply forgotten. This leads to unnecessary trips to the store, costing the user time and money, not to mention the guilt associated with wasting food.

Our new goal was to create an app that alleviates this food waste issue by tracking what's in your fridge, automatically adding items that are running low to a shopping list, and suggesting recipes based on available ingredients.

Who We Designed For

To guide our design process, we created four task scenarios and three user personas. Here's an example of each, both written by me.

Task Scenario: Sam

Sam is a woman in her forties, working as the manager at a local department store. She has three children aged 20, 13, and 8, who all live with her. She is not a big fan of technology, but rather enjoys working with people. She would like help keeping track of groceries and planning meals, especially since her oldest son regularly uses groceries to cook for himself, and her youngest is a very picky eater. She generally enjoys cooking, but tonight she had to work late and is hoping to make a quick meal for her and her two youngest children now that she's finally home.

Analysis

  • Sam doesn't love working with technology and is in a rush, so our app should ideally be minimalist and avoid unnecessary screens or buttons.
  • Sam's oldest uses the groceries too, so it would be ideal if the app supported multiple users. (from our original pitch)
  • She should be able to see ingredients quickly, so she can rule out recipes with ingredients she knows her youngest won't eat.
  • She should be able to sort recipes by estimated time, so she can find something quick and easy.

How It Shaped the Final Product

Her scenario pushed us toward a minimal app with as few manual interactions as possible. Whenever possible, we reminded ourselves that the goal wasn't hyper-customization, just enough flexibility to be useful for a wide audience. This helped us realize that cutting down to three main pages instead of five (settings became a menu at the top right of all pages, and we cut meal planning) would make the app much less overwhelming, especially when you're already tired and just wanting to make a quick meal. Additionally, it gave us the idea of sorting recipes by estimated time, so she could more easily find that quick and easy option.

User Persona: Travis

Travis is a 36-year-old man who lives with his wife and their five children. He works a 7am-3pm shift as an accountant at a local auto repair shop, but he doesn't know much about cars himself. His wife is a stay-at-home mom and does most of the chores around the house, but Travis is responsible for grocery shopping on his way home from work, and for cooking dinner.

Travis likes to spend most of his free time with his kids and his wife, going to parks and having picnics. He also enjoys hiking and goes to the gym a few times a week. At home, he mostly enjoys reading books, and his family likes to watch a movie together every Wednesday night.

He and his wife are very health conscious, and keep track of everything they eat. Their kids, however, are picky eaters and don't enjoy most traditionally “healthy” foods. They spend a lot of time trying to find healthy recipes that the kids will actually eat. Their oldest child just got their first car, and they regularly go out to eat with their friends.

On the weekends, Travis likes to relax and not have to worry about cooking, so the whole family usually goes out to dinner on Saturdays, and he usually makes a simpler meal for Sundays.

Analysis

  • Travis is very busy, doing his grocery shopping on his way home from work. He needs to be able to check what he needs, without having to stop at home to actually check the fridge.
  • He cooks dinner for a family of seven, so he'll have a very different definition of what a 'low' quantity of an item remaining means than a single person.
  • His family is health conscious, but his kids are picky eaters, so finding recipes will be hard. It would be great if he could filter out ingredients his kids refuse to eat, and that he and his wife don't want them to eat.
  • He wants simple meals on weeknights and Sundays, so recipes should show how long they take and how hard they are at a glance.

How It Shaped the Final Product

This persona inspired the customizable "running low" quantity for each item, because we realized different users will have different needs. It also gave us the idea of filtering out recipes based on specific ingredients, which he could use to avoid ingredients his kids won't eat.

Low-Fidelity Prototyping

Before starting our digital design, we sketched low-fidelity prototypes on paper. For the fridge tab, I planned a grid of item cards with quantity controls, with additional settings when you tapped on an item.

Around each card, I sketched indicators for when an item is running low, already on the shopping list, or expiring soon. There were also indicators for claiming items, since these sketches were paired with our original pitch.

These sketches helped us visualize not just what the app would look like, but also the user flow and what it would feel like to use.

Pencil sketch of the fridge tab: a grid of item cards for eggs, milk, carrots, and cheese, each with minus and plus buttons, and a bottom navigation bar with Recipe, Fridge, and List.Pencil sketch of the item menu for milk, with options to change quantity, set an expiration date, add to the shopping list, and delete the item.Pencil sketch of an egg item card surrounded by indicators for running low, on the shopping list, and expiring soon, plus circles with roommates' initials showing who has claimed it.
Early paper sketches of the fridge tab, the item menu, and the item indicators.

Early Feedback

Each of us showed the paper prototypes to a few potential users: students, recent graduates, and people out of school, like a grocery store worker who cooks in her spare time. They asked for things like:

  • Notification reminders about expiring or low items
  • A dedicated tab for saved recipes
  • Filtering recipes by the foods you have
  • Tracking how long food has been in the fridge, so you can use the oldest first

Our Takeaways

Making it Recipe-Focused

A lot of feedback and ideas centered around the recipes page, so we put extra focus there throughout the design process, making sure it was both usable and customizable.

Getting Useful Feedback

Most people defaulted to suggesting new features, so we found it helpful to encourage them to be critical about the existing features instead, and we asked more specific questions.

Design Language

I turned our sketches into a design language in Figma that the whole team could follow: fonts, font sizes, colors, icons, and button styles.

GoodKitchen's design language in Figma: the fridge screen with item cards for eggs, milk, carrots, and cheese, next to the fonts, colors, indicator icons, and button styles.

My Thought Process

  • Green as the accent: it's a natural color inspired by fresh produce, and it feels healthy. In hindsight, the lighter green is a bit harsh on the eyes.
  • Two typefaces: Montserrat Black and Bold for titles and headings, and Karla at 22px for everything else. Montserrat is clean but has character, and Karla is readable at small font sizes.
  • Expanding indicators: doesn't clutter the screen too much by default, but users also never have to guess what a symbol means.
  • Claim icons: each roommate is a colored circle with the start of their name.
  • Accessible quantity controls: changing quantities is the most frequent user action, so we made sure it was a single tap.
  • Accessibility-focused: fonts are simple and readable, with 22px being the smallest font size. Color is never the only indicator for anything, so the app is color-blind friendly.

Medium-Fidelity Prototype

To test our flows with real people, we built a medium-fidelity prototype in HTML, CSS, and JavaScript. I primarily focused on the inventory page and its functionality:

  • Adding, editing, and deleting items
  • Changing quantities
  • Setting expiration dates and running-low quantities
  • Searching items
  • Filtering items by food group

This prototype focused on user flow rather than looks, so not all of my design decisions carried over. One major decision that came from this prototype was changing from the grid of items to a list. Our professor and one of the TAs pointed out that the grid was too cluttered and overwhelming in our official feedback, so we switched to a list.

One side-effect of the change was that each page looked quite similar now, so we gave each page its own controls and icons to tell them apart. In the end, I still think we could have done more, so that's one thing I would continue to iterate on in the future.

The prototyped inventory page.
The inventory page: a search bar, filter and profile buttons, cards for eggs and milk with minus and plus buttons and an edit button, a red clock icon on the milk, and a green plus button to add an item.

Inventory

The three primary screens of the medium-fidelity prototype.

Testing and Feedback

Think-Aloud User Study

Our prototype was given to another team, who ran a heuristic evaluation and a think-aloud user study. We were also given feedback by our professor and TAs.

The user study went well overall, with the participant adding milk with an expiration date and a "running low" quantity without any issues, and they said everything seemed well labeled.

The biggest problem was with our shopping list page. Our prototype confusingly started with a pre-made "Starter Groceries" list, and when the participant was asked to create a new list, they instead just added items to the existing one. The reviewers rated it a usability catastrophe.

Reviewing Another Team

We did the same study on another team's budgeting app, SpendSense. We each did our own heuristic evaluation, then we combined them all and removed duplicate entries. During the user study, we all took notes.

Afterward we combined our notes into common themes/topics, like unclear tab names, data being reset on refresh, and easy-to-make user input mistakes. It was really valuable to do this on an app we had never seen before, because it opened our eyes to potential issues with our own prototype.

Redesigning Based on Feedback

We proposed eight design changes to improve the app based on the heuristic evaluation and user study. Here are a couple of examples:

1. Start the shopping list on an overview

Instead of opening on a starter list, the shopping tab would open on an overview of all your lists, like "For Home" and "For Dorm," with a clear "Create New List" button. This addresses the mode confusion from the study, where the participant thought they were in one place when they were in another.

Before: the shopping tab opens on a Starter Groceries list with eggs, canned tuna, rigatoni pasta, and chicken breast, and a small list menu button near the bottom.

Before

2. Add units to quantities

We missed a pretty big ambiguity in our original design: "2" milk could mean two cartons, two cups, or two ounces. We proposed a units dropdown next to the quantity, which would then show up on the fridge page and in the edit menu. (In hindsight, we could have added some kind of percentage option, because most people don't measure every time they pour a bowl of cereal.)

Before: the Add Item form with fields for item name, quantity, food group, expiry date, and a running-low quantity.

Before

Other changes included:

  • Fixing the search bar that said "Search for a recipe" on the inventory page
  • Letting people edit recipes they created
  • Renaming "Saved" recipes to "Favorites"
  • Optimizing how you enter recipe ingredients

Reflecting on the Project

Realizing Our Initial Design

Looking back, the prototype doesn't fully live up to the Figma design. Part of that came from narrowing our scope after our professor's feedback, but part of it was also caused by our implementation of HTML/CSS/JS. The medium-fidelity prototype we made was still super useful for improving user flow, but some UI elements were implemented inconsistently because different people made them.

In the future, I would start the medium-fidelity prototype by building a more robust shared component library that the whole team could pull from. They still wouldn't be completely refined aesthetically, but the functionality and appearance would be consistent across the whole app, which makes it less confusing.

Who We Left Out

As part of reflecting on the project and our process, we thought about what assumptions we had made and what user groups were left out by our design. Most obviously, we didn't consider users who might have difficulty using a touchscreen or who have limited vision.

In households where multiple people use ingredients from the fridge, it is unlikely they will all properly track what they used all the time. To help households where people forget to log what they use, a future version could add reminders, streaks, or store discounts.

Closing Thoughts

One of the biggest things that stuck with me from this project was the importance of testing with real users and getting frequent feedback. There were times when I thought our design was solid, but feedback suggested otherwise, and I had to make changes that I personally disagreed with, like switching from the grid to a list. I think it's really important to be able to do that, and I believe we ended up with a better final product because of it.