JINGYI WANG.
Freshlings original green mascotFreshlings
Working Fridge interfaceWorking Today interfaceWorking Recipes interface
01 / OVERVIEW · PRODUCT DESIGN · NATIVE IOS

Freshlings.

An iOS food management app designed to make food tracking and everyday meal decisions easier.

On a four-person USC team, I implemented the main SwiftUI screens and Firebase Authentication, then independently refined interactions through one week of hands-on use. The result is a functional iOS prototype, not a publicly launched app. Watch Working Prototype
MY ROLESwiftUI MainPages
Firebase Authentication
Interaction refinement
TEAMFour-person design & development team
PLATFORMiOS · SwiftUI · Firebase Auth
STATUSWorking iOS prototype
Not publicly launched
Freshlings sprout mascot
A LITTLE CHARACTER. A CLEARER FOOD ROUTINE.Freshlings

Use what you have. Know what to use first.

02 / PROBLEM & USER NEEDS

Tracking food isn't the same as knowing what to do next.

A food inventory is only useful when it supports a decision. Simply listing ingredients does not tell someone what needs attention, what they could cook, or how to keep their records updated without extra work.

These three challenges guided the product experience and its core interactions.

01 / VISIBILITY

Recognize what needs attention

Which ingredients should be used first?

02 / DECISION-MAKING

Turn inventory into action

What could someone make with the food they have?

03 / EFFORT

Fit into real routines

How can adding and updating food stay manageable?

Design opportunity: Move from recording food to choosing what to use, cook, or update next.

03 / PRODUCT STRATEGY

From food inventory to everyday action.

A connected product experience: capture food, understand what is available, recognize daily priorities, then take action. These describe complementary tasks—not a rigid sequence every user must follow.

01 / CAPTURE

Add — Capture

Enter food and review editable information before saving.

02 / UNDERSTAND

Fridge — Understand

Browse available ingredients and their status.

03 / PRIORITIZE

Today — Prioritize

Highlight time-sensitive food and keep progress accessible.

04 / ACT

Recipes — Act

Connect ingredients with possible meal options.

THE PRODUCT TRADE-OFF

Designing for clarity over feature quantity.

EARLY EXPLORATION

Rescue food as a game

The initial concept explored food rescue through more prominent game mechanics. That created a risk: extra rules could make a simple daily task feel like more work.

REFINED DIRECTION

Food decisions come first

Prioritization, easy next steps, and recipe options lead the experience. XP, streaks and saved-food feedback acknowledge actions after they happen.

INTERACTION ARCHITECTURE

Four tabs, one food lifecycle.

01 · Home / Fridge

Search, filter, inspect and use ingredients; urgency groups organize the inventory.

02 · Today

Review time-sensitive items, choose a next step, and access progress.

03 · Add

Enter or scan food, then review and confirm its expiration date before saving.

04 · Recipes

Explore fridge-matched suggestions, save personal recipes, and preview community content (the community feature is a demo in the documented prototype).

Built around SwiftUI TabView with a NavigationStack for each destination. A food-focused action can open Recipes with that ingredient already selected.

04 / DESIGN ITERATION

What changed—and why.

An early prototype received feedback from approximately 20 peers in a facilitated review. Faculty feedback identified overlapping Today and Impact responsibilities, prompting the team to simplify navigation. After implementing the core screens, I independently used the app for one week to identify and refine interaction friction.

01 / FRIDGE

Simplifying Fridge information hierarchy

Feedback → decision: Reviewers found the original Fridge too crowded and unclear. We simplified the layout and ordered ingredients by how urgently they need to be used.

Earlier version of FRIDGE app screen cropped from authentic project comparison
BEFOREThe early Fridge combined several content areas, making the priority of individual foods harder to identify.
Later version of FRIDGE iOS screen
AFTERThe redesigned Fridge uses simpler visual hierarchy and urgency-based ordering (Use First / This Week), with search and filters still available.
02 / TODAY

Making navigation responsibilities distinct

Feedback → team change: Today repeated Fridge priorities, while Impact overlapped with daily progress. Faculty feedback prompted the team to consolidate Today and Impact. The team integrated progress within Today and clarified each destination’s purpose.

Earlier version of TODAY app screen cropped from authentic project comparison
BEFOREThe earlier Today view emphasized a food-priority list that overlapped with the Fridge experience.
Later version of TODAY iOS screen
AFTERThe later Today view uses a more compact daily overview and provides a path to progress details, reducing repetition across destinations.
05 / FINAL PRODUCT EXPERIENCE

Built for the everyday moment.

Four task-focused experiences in the working prototype: Fridge, Today, Add Food, and Recipes. The following screens and the three-state Add Food flow show what the product does, while implementation details appear later.

The next section shows task-level screens and the detailed Add Food flow.

05 / FINAL PRODUCT EXPERIENCE

Fridge surfaces urgency; Today highlights the day’s next steps; Add Food keeps item details editable; Recipes turns available ingredients into meal options.

FEATURE / 01 — FRIDGE

Make urgency visible.

Rather than presenting all ingredients as equally important, the Home / Fridge screen separates “Use first” from “This week.” Category filters remain available without competing with the primary priority signal.

Design decision

Make priority a visual grouping, not a calculation users have to perform mentally.

Enlarged Freshlings Fridge screen
FEATURE / 02 — ADD FOOD

Start with a food item, not a spreadsheet.

Adding food uses two main phases: select or scan an item, then review the suggested expiration date before saving. The date stays editable; the code lookup is a convenience, not a substitute for user confirmation.

Interaction decision

A date suggestion is a convenience, not an authoritative freshness judgment. Explicit date review keeps the user in control; the documented save flow also includes Undo.

Real Add Food empty-entry screen with name, category, amount, estimated price, and purchase date inputs
01 / Start with food detailsName and category, quantity, value and purchase date; scan or browse a food list.
Real Add Food screen filled with MILK, category menu expanded, and Next: Expiration Date button
02 / Confirm the itemChoose the correct category and review details before continuing.
Real expiration date confirmation screen with milk item, editable calendar, and Add to Fridge button
03 / Confirm expiration dateThe suggested date is editable. Users can check the package date before saving.

Actual iOS interface captures. Three visible states across the two-step Add Food flow.

FEATURE / 03 — TODAY

Make the next action easy.

Today brings the items needing attention into a compact list with direct actions. The interface also connects the everyday task with small rewards, keeping motivation secondary to utility.

Design decision

Reduce information density so users can act without scanning an oversized dashboard.

Enlarged Freshlings Today screen
FEATURE / 04 — RECIPES

Connect ingredients to meals.

The Recipes view extends the journey beyond tracking and prioritizing. It provides a path from the food users already have to meal choices they can explore.

Recipe relevance and real-world behavioral effects have not been independently evaluated.

Enlarged Freshlings Recipes screen
06 / TECHNICAL IMPLEMENTATION

From interface design to a working iOS prototype.

I implemented the initial Fridge, Today, and Recipes experiences in SwiftUI and developed the MainPages interfaces, along with Firebase Authentication. After teammates integrated their modules, we each iterated on the full app. My subsequent work included Settings, language switching, navigation, swipe behavior, haptic feedback, and a week of personal hands-on refinement. The final prototype reflects the whole team’s work.

01 / CORE SCREENS

Fridge · Today · Recipes

Developed the initial layouts, core interactions, and navigation for three task-facing pages in SwiftUI.

02 / AUTHENTICATION

Firebase login

Implemented Firebase Authentication for user login. Food inventory, recipes, and history are stored locally in the current prototype.

03 / FEATURE ENHANCEMENTS

Settings & language switching

Added Settings access within Fridge and implemented language-switching functionality.

04 / INTERACTION REFINEMENT

Transitions & swipe gestures

Standardized page transitions, refined horizontal swipe gestures, and implemented haptic feedback to provide tactile confirmation during key interactions.

Testing in practice

I used the working app for a week, identified interaction friction, and refined the experience. Separately, feedback from a facilitated review with approximately 20 peers and faculty guidance informed the team’s navigation revision.

FEATURE / SCANNING DECISION

When recognition was unreliable, we changed the input.

After photo-based AI identification proved unreliable, the team shifted toward code-based lookup and matching food records—a more predictable approach to identifying items.

EARLIER APPROACH

Guessing from a photo

Photo-based AI recognition was not reliable enough for identifying the correct ingredient.

Problem: an incorrect food match undermines the next steps.
DOCUMENTED DIRECTION

Scanning a code

Read a packaged-food barcode or a produce-sticker PLU; match the result to food information and let users review it.

Fallback: type the food name when a code is not found.
01 · READApple VisionKit

On-device reading of barcode and sticker numbers.

02 · LOOK UPBarcode / PLU

Open Food Facts for packaged goods; a built-in list for 56 produce codes.

03 · MATCHIngredient dataset

Link the food to local shelf-life, price and CO₂ reference information.

04 · CONFIRMUser review

Review the suggested expiration date, adjust it if needed, then save.

BEHIND THE EXPERIENCE / DATA & LOGIC

Several data sources. One food decision.

The app combines local reference information, free lookups and what users log themselves. Each source has a different job.

01 / LOCAL JSON

175 ingredients

Reference shelf life, estimated price, CO₂ information and storage tips.

Local reference dataset
02 / ONLINE LOOKUP

Open Food Facts

Looks up packaged products from scanned barcodes, including names and categories.

Free external API
03 / RECIPE DISCOVERY

Built-in + TheMealDB

Provides recipe suggestions that can connect to ingredients in the fridge.

Local recipes + free API
04 / USER RECORDS

Stored on device

Fridge items, food history, goals and personal recipes remain local in the documented prototype.

Firebase Authentication handles login, not inventory synchronization.
FRESHNESS LOGIC

A date-based visual cue—not a food-safety test.

Days remaining determine the documented freshness state. In the Fridge, those rules become priority groups and small HP bars so users can scan which items need attention.

Fresh7+ days
Use soon3–6 days
Urgent0–2 days
Past dateBelow 0
07 / WORKING PROTOTYPE

From interface to interaction.

Watch the working iOS prototype in action. This shortened excerpt comes from a real iPhone Simulator recording of the team-built app—not a Figma animation.

My work included the initial Fridge, Today, and Recipes pages, Firebase Authentication, and later Settings, language-switching, navigation, swipe, and haptic refinements. Haptic feedback adds tactile confirmation on a physical device and cannot be felt through this screen recording. The walkthrough also shows features developed or revised by teammates.

REAL SIMULATOR CAPTURESWIFTUINATIVE HAPTICSMUTED LOOP
Scroll into view to play · Scroll away to pause · Use controls to replay
08 / VISUAL DESIGN SYSTEM

Friendly by design. Clear in use.

Freshlings uses expressive, rounded forms for a friendly identity, with functional colors and reusable UI patterns to clarify freshness and next actions. This is the team's app design system, shown here alongside my SwiftUI implementation work.

Original Freshlings green mascot
BRAND CHARACTER

Every food is a Freshling.

A small, playful character connects the identity to the food-rescue and progress mechanics.

01 / COLOR

Brand palette

Leaf#7BA531
Sprout#B2E680
Citrus#F3AE3D
Lime#C0FA63
Mint#E1F2BB
Bark#735543
Tomato#E46B54
Functional colors
Primary action
Use soon
Urgent
Canvas
02 / TYPOGRAPHY

Expression meets legibility.

My Fridge
$32.40Display numbers · Anek Latin Bold
Use FirstSection headings · Anek Latin Bold

Bagel Fat One for playful display titles, Anek Latin for body copy, controls and numbers.

03 / FRESHNESS STATES

Urgency has a consistent language.

Fresh7+ days
Use Soon3–6 days
Urgent0–2 days
ExpiredPast date

Urgency states reflect the expiration dates recorded in the app.

04 / REUSABLE COMPONENTS

One visual grammar, across tasks.

Soft rounded cards, pill buttons, legible status labels and compact progress feedback keep everyday actions easy to scan.

🥕
Carrot2 days left
Add to FridgeI Used It
Money saved$32.40
CO₂ avoided4.2kg
This week+6
05 / ICONOGRAPHY

Food and feature icons

Our design system includes 36 illustrated food Freshlings and 10 functional icons. The original artwork shown here connects the product’s playful identity with everyday food-management tasks.

Original Freshlings illustrated food characters and functional app icons from the team design system
PERSONAL DESIGN EXPLORATION · FROM HANDS-ON USE

Let people cook first. Ask later.

During a week of using the working Freshlings prototype, I noticed a disconnect between the physical and digital experience: cooking and eating happen away from the screen, but the inventory only stays useful when someone remembers to update it afterward. That repeated follow-up became the interaction problem I wanted to explore.

THE DESIGN QUESTION

How might Freshlings help people keep their fridge accurate without interrupting the moment they cook?

My direction: replace the expectation of immediate manual updates with a brief, optional check-in at a more natural moment. Keep the person—not an automated assumption—in control of what changes in their inventory.

THE DECISION

Why a check-in instead of automatic tracking?

I considered when the app should ask for an update and how much it can safely infer from a person's activity.

01 · Manual update every time

Accurate when maintained, but depends on remembering to reopen the app after cooking.

02 · Automatically mark food as used

Fewer taps, but viewing a recipe or receiving an alert does not prove an ingredient was consumed.

03 · Optional, delayed check-in

Asks at a more suitable moment and allows Still here / Used some / Used up instead of guessing.

EXPLORED DIRECTION
SCENARIO 01 / NATURAL USE

Review on your next visit

After cooking, someone may forget to update the inventory. On their next visit, a dismissible check-in surfaces a short list of relevant ingredients. They can confirm what changed, record partial use, or skip the prompt.

Cook normally→Reopen app→Quick check-in
9:41●●● ▰
My Fridge ⌕
Use first
This week
✦Quick fridge check×

Still in your fridge?

Tomatoes2 days left
Still hereUsed someUsed up
LaterConfirm
Check-in interaction concept
SCENARIO 02 / AFTER A REMINDER

Follow up, without rushing

An expiry alert is useful before cooking, but asking whether food was used at that exact moment is premature. This concept separates the initial reminder from a later, optional inventory check.

Expiry alert→Time to cook→Later check-in
9:41●●● ▰
Tuesday
6:30
✦ FRESHLINGSEarlier
Tomatoes need attention

They are getting close to their date.

Later, at a suitable local time ↓
✦ FRESHLINGSNow
Did you use your tomatoes?

Tap to review or update your fridge.

Delayed notification concept · not part of the implemented prototype
RIGHT MOMENT

Let the real-world task happen first. A reminder should not demand an immediate inventory update.

USER CONTROL

Never infer consumption from a recipe view or alert. Distinguish “still here,” partial use, and “used up.”

LOW PRESSURE

Make the prompt dismissible and infrequent enough to support a routine rather than become another chore.

NEXT: WHAT I WOULD VALIDATE

Does the check-in help—or become another interruption?

The two scenarios above are my interaction concepts, not shipped features. My next step would be to test them with people using their own grocery routines: compare the effort of updating food manually versus confirming a check-in, and learn when prompts feel helpful or intrusive.

09 / REFLECTION & NEXT STEPS

What building taught me—and what still needs testing.

Building a native prototype changed how I evaluate design: navigation, data handling, and feedback had to work beyond static screens. Working through implementation and everyday use helped me refine how the app supports real food-management routines.

The next opportunity is to evaluate core tasks with new participants and learn how the experience fits into longer-term routines.

Next steps: Test adding food, finding urgent ingredients, and choosing recipes with new participants; then prototype the optional post-cooking check-in and evaluate whether it reduces repeated inventory entry.