aaomzin
← All works
0→1 product · Mobile app & web landing

Toonn: know what's home before you buy it again

Toonn, a round coral hamster mascot
{{ m.k }} · {{ m.v }}
toonn.app
Toonn home screen
Toonn add-item sheet

IN SHORTToonn keeps track of what’s at home, from the fridge to the bathroom cabinet. People don’t throw food away on purpose; they forget it’s there, and buy it again. Working solo from research to UI, I designed Toonn around the moment right after shopping, so adding what you bought takes a few taps and no barcode. It’s designed and pre-launch; the number I’d watch is whether people still add stock after 30 days.

It starts with a fridge door.

You come home with a bag of groceries, open the fridge to put them away, and there it is: the exact thing you just bought. Already there. Half gone off.

I kept hearing this story from friends, and nobody told it as a problem. It was just a slightly annoying thing that happens every week. When something goes wrong every week and everyone shrugs, there's usually a design problem hiding underneath. This is the story of chasing it.

The problem wasn't what I thought

My first guess was simple: people waste food. The numbers were bigger than I expected. But nobody throws food away on purpose. They throw it away because they forgot it was there, and the same forgetting is why they buy soap they already have.

{{ s.n }} {{ s.l }}
The question I started with

How do I stop people wasting food?

The question that mattered

Why don't people know what's already at home?

So I looked at what already existed. I found more than twelve apps trying to fix this, and almost all of them asked for the same thing.

What the apps expect

A barcode on every item

What Pui brings home

A plastic bag from the market, no labels at all

Finding Pui

A gap isn't a person, though. Before I drew a single screen, I needed someone to design for.

Pui, a young woman smiling and holding a tablet
Pui, 29
Office worker · Bangkok
{{ x }}

She's tried this before. She downloaded a pantry app once, spent an evening typing things in, and never opened it again.

After work, tired, standing in her kitchen

"What do I need to deal with?"

She doesn't want a dashboard. She wants one answer. Every time I got stuck later, I came back to this picture.

{{ pw.k }}

{{ pw.v }}

The moment everything depends on

So I followed Pui through an ordinary week. The obvious place to step in was when she finds the spoiled food. But by then it's too late. The loop has to break much earlier.

Pui's week today
{{ s.t }}{{ s.arrow }} ↺ every week
The week I was aiming for
{{ s.t }}{{ s.note }}{{ s.arrow }}

The earliest point turned out to be the riskiest one: right after shopping, when she has to tell the app what she bought. That's exactly where her last pantry app lost her. If this step feels like homework even once, she's gone, and nothing else I design will matter.

Small enough to survive

It was tempting to design everything: scanning, recipes, meal plans, shared households. But Pui had already quit one app that asked too much. So I wrote down five things Toonn had to be good at, and every screen had to serve at least one.

{{ d.n }} {{ d.t }} {{ d.b }}

Every way it can go

A flow that only works on a good day isn't finished. For each core flow I drew the happy path first, then the other ways in, then every decision point where it can go wrong — and made sure each branch ends on a real screen, never a dead end.

StartEndScreenUser actionSystemDecisionError stateHappy pathOther waysError / recovery

Getting things in

After shopping, record what came home in seconds.
Back from shopping
Home
Add sheet
How to add?
Add form: name, category, place, qty
Guess expiry from category + place
Name filled in?
Online?
"Added" · Toonn hugs the bag
Tick what was bought
"Put away 3 items"
Tap a weekly-item chip
Added in one tap
"Add a name before saving"
"Your home still works offline"
Syncs when back online
Tap +
Type it
From shopping list
Yes
Yes
No
Fix it
No
Weekly item
  • Every add shows a toast with undo, so a wrong tap is never permanent.

Checking before buying

In the shop, find out in seconds whether it's already at home.
In the shop, not sure
Search
Type "fish sauce"
Results
Found at home?
Enough left?
Don't buy · logged as saved
฿35 saved
Tap a status shortcut
Add to shopping list
Buy it, on purpose
"No 'soap' at home yet"
Add to home · or · put on list
Home or list updated
Shortcut
Yes
Yes
Low
No
Typo? try again

Closing the loop

Use it up, or admit it went bad — without feeling judged.
"4 things to use today"
Item
What happened?
Logged as used in time
"Saved ฿20" · undo
Log the part that's left
Stays in stock
Pick: all · half · a little
See "฿21 lost" before confirming
Auto-add to shopping list
"I'll remind you sooner"
Item went overdue
Toonn: still OK?
Move the date
Back on track
Used it all
Used some
Went bad
Yes
No
  • Added by mistake? Delete asks why first — a mistake is removed, a spoiled item is routed to "went bad" so the money stays honest.

Making it feel like home

With the structure in place, I had to decide what Toonn should feel like. A clean, clinical look felt like a spreadsheet for your fridge; a loud, playful one shouted over the things that mattered. Warm is the one that stuck.

Like a tidy, cheerful kitchen.

Warm off-white instead of clinical white. One coral that's hard to miss, saved for the thing to do next. Soft rounded cards and friendly, round numbers, so ฿320 reads as good news rather than a bank statement.

It should feel like your home, not an inventory system.

Why coral?

It wasn't a mood-board pick. Every colour has one job, and coral had to stand out without ever looking like a warning.

{{ c.name }}{{ c.role }} {{ c.hex }}
{{ cw.k }}{{ cw.v }}
Type that works in Thai and English
Aa กข
มีอะไรตุนไว้ ก็รู้หมด
Plus Jakarta Sans for Latin and numbers — round, friendly figures make ฿320 feel like good news, not a bank statement. It has no Thai, so it's paired with Noto Sans Thai, whose open, even strokes sit at the same weight.

It needed a voice

The screens were warm now, but every reminder still sounded like a system: "3 items expiring." And the hardest messages, like "you threw this away", sounded like a telling-off.

So Toonn got a character: a coral hamster with full cheeks, because nothing says "stocking up" like a hamster. The housemate who remembers everything and never nags.

3 items expiring.
Toonn, the coral hamster
"No worries, I'll remind you sooner next time."

Why a hamster?

I also sketched a living storage jar and a soft round blob. Only the hamster says "ตุน" from its silhouette alone: it literally stuffs its cheeks to store food for later, so full cheeks became its signature.

{{ ch.k }}

{{ ch.v }}

14 moods, each tied to a real moment in the app — eight of them here
Toonn — {{ md.t }} {{ md.t }}
Never cries or scolds Readable at 24 px No leaves, no earth, no guilt

The first draft

Grey wireframe
An early colour draft

I started in grey: boxes, lines and labels, no colour at all. I only wanted to know whether the structure held up. Could Pui get from "I just got home" to "everything's put away" without thinking?

Then came colour, and a few rounds of drafts. Money cards sat near the top. Adding lived in two places at once, as a tab and as a floating button. Later versions tried a "fridge health" score and a little sentence on every storage card. Custom storage places were planned as a paid feature.

On paper, it ticked every box. Then I looked at it the way Pui would.

Seeing it through Pui's eyes

I pictured her in the kitchen at seven in the evening, phone in one hand, and went through every screen asking one thing: would Pui, tired after work, actually get this?

Final Toonn home screen
Home

One number she can act on beats a dashboard she has to read.

The score looked nice but told Pui nothing she could act on. Now Home opens on the things to deal with today, and money moved to its own tab.

{{ fx.k }}
BEFORE{{ fx.before }} AFTER{{ fx.after }}

A week with Pui

So what does all this feel like in real life? Let's follow Pui through one week with Toonn.

{{ w.alt }}
{{ w.when }}
{{ w.t }}

{{ w.b }}

79%
of expiring food used in time
฿320
saved
฿85
lost

Remember the fridge door? This is what it looks like when it stops being a surprise.

Back to the fridge door

Looking back, I started out thinking the problem was remembering expiry dates. It turned out to be one small moment: getting the shopping in when you're tired and your hands are full. Almost every screen in this project bends around that moment.

How I'd know it worked

Success isn't downloads.

It's whether people are still adding stock after 30 days, because if adding feels easy, everything else in this story works.

Toonn celebrating money saved

What I'm taking with me

Small beats complete

The first draft had everything. The better version said no to a health score, sentences on every card and a paid feature. Each cut made Pui's evening a little easier.

Let the character carry the hard news

"You wasted ฿21" stings. From a hamster that never scolds, it's a nudge instead of a guilt trip, so opening the app never feels like being told off.

Design for one person on one tired evening

Asking "would Pui get this at 7 pm?" settled arguments that a feature list never could.

The fridge door will still hold surprises. I just want them to be the good kind.

Next project
Help & Support, rebuilt around intent →
All works Get in touch