Founder-Led
Product Design & Development · 2026Abyte LLC

Building the Tool
I Actually Needed

Founder · Product Designer & Frontend Developer
0→1 · Research to Frontend Build
Web · iOS · MAUI
Pre-Launch
Stashwell's dashboard showing multiple storage locations (Garage deep freeze, Kitchen Freezer, Emergency Storage, Pantry) with nested shelves and an expiring-items list

A tracking problem
only I could see clearly.

Stashwell started as a personal problem: multiple freezers stocked with sale meat, leftovers portioned into mix-and-match Souper Cube components, and scraps saved for homemade stock. It was more inventory than any paper list could keep up with.

I'm the product designer on a two-person team. I own the product end-to-end: naming, brand, JTBD research, UX, UI, and the frontend build across web, iOS, and MAUI. My engineering partner owns the platform and infrastructure decisions, including choosing MAUI for cross-platform mobile.

3
Platforms: Web, iOS, MAUI
0→1
Founder-Led Product
Solo
Design + Frontend

Paper lists don't scale to real kitchens.

A paper list can't represent what's actually in a freezer: items split across multiple appliances, portions built from interchangeable components, and stock scraps that don't map to a single product name. I tried keeping up with it through regular inventory passes, but by the time I'd finished one pass, the next trip or meal had already made it wrong again.

The harder problem was capture, not storage. Any system that asked for manual data entry after the fact would get abandoned the same way the paper list did.

"The list wasn't wrong because I was lazy about updating it. It was wrong because logging inventory competes with actually cooking, and cooking always wins."

Before

Paper List

  • One paper sheet, no structure for multi-freezer storage
  • No way to represent component-based items (Souper Cube stacks)
  • Re-inventoried by hand on a regular basis, and still fell behind
  • Out of date again within days of every pass
  • No connection between what's on hand and what to cook
After

Stashwell

  • Structured inventory across multiple storage locations
  • Multiple low-friction logging paths: QR scan, manual entry, photo
  • AI photo recognition extracts item details automatically
  • Always-current single source of truth
  • AI meal plans generated from current inventory

Validating past
my own kitchen.

The starting hypothesis came from personal use, but I didn't stop there. I ran outside interviews to check whether the problem generalized beyond my own freezers, and applied a jobs-to-be-done lens to figure out which capture behaviors people would actually sustain versus abandon.

Those conversations validated the core demand and surfaced something I hadn't scoped for: interest in adjacent, non-food inventory, such as toys, books, and other component-heavy collections, as a possible white-label or multi-tenant direction beyond the initial pantry use case.

Personal Usage ResearchMulti-freezer, component-based storage patterns
JTBD InterviewsOutside users beyond personal use
Accessibility AuditPre-launch WCAG pass across the app
⟨⟩Usability Testing3 test users, in progress
Insight 01

Component-based items need their own model

A Souper Cube behaves like a mix-and-match unit that gets recombined into meals rather than a single item, so off-the-shelf inventory models built around single SKUs didn't fit how the product actually gets used.

Insight 02

The demand generalizes past pantry

Interviews beyond my own use case validated the core pain and surfaced adjacent categories, toy tracking and book collections, that share the same component-heavy, hard-to-list structure. A signal for where this could go next, not a commitment to build it.

Four decisions that
shaped the product.

Not a feature list: the reasoning behind the calls that mattered most for a tool that lives or dies on whether people keep using it.

01

Multiple capture paths instead of one "right" way to log

The call

QR-code scan, manual entry, and photo capture all feed the same inventory. Forcing one input method would have meant losing whichever moment didn't fit it: restocking calls for speed, cooking calls for hands-free, a grocery trip calls for a quick photo.

Stashwell's Add Item flow offering four capture paths: take photo, upload photo, enter manually, or scan barcode
02

AI photo recognition to remove typing from the fastest path

The call

A vision model extracts item details from a picture, so the lowest-effort capture path (snap a photo) still produces structured data instead of an unlabeled image dump.

Stashwell's home view showing structured freezer inventory: Garage Freezer with 12 items across 2 shelves, Kitchen Freezer with 4 items across 1 shelf
03

Scoped AI meal plans to current inventory only, deliberately

The call

Meal generation pulls from what's on hand today. The freshness/aging logic already exists for the inventory dashboard, but I chose not to wire it into the meal-plan prompt yet. It's a real next iteration, not a shipped claim, and I'd rather scope it honestly than ship a half-connected feature.

Stashwell's Ask AI chat generating a weekly breakfast and dinner meal plan built from the items actually in the user's inventory
04

Ran an accessibility audit before launch, not after

The call

Found and fixed color-contrast issues and missing labels ahead of launch rather than treating accessibility as a post-launch cleanup pass. Cheaper to fix in a two-person team before habits and layouts calcify around the gaps.

Stashwell's Badge component documented in Storybook, showing the Fresh, Expiring, Expired, and Category status variants with labels and color coding

One system,
three platforms.

Web, iOS, and MAUI all need to feel like the same product without duplicating design decisions three times. I built and tested Storybook components covering states, types, and variants, so the component contract stays consistent regardless of which platform is consuming it.

That documentation also functions as the handoff artifact between design and engineering on a two-person team, where there's no separate design-ops function to keep things in sync.

Stashwell's Storybook component library, showing the Atoms, Molecules, and Organisms hierarchy alongside a Location List component's documented props and controls

Storybook Component Library

Params-driven components covering every state, type, and color variant, tested and documented for reuse across web and mobile builds.

⟨⟩

Cross-Platform Design Tokens

Shared visual language across web, iOS, and MAUI, reducing the chance of the three platforms drifting apart as the product grows.

Current Status
Launch-Ready
JTBD analysis, App Store copy, and a six-week launch plan are done. The real gate is finishing user testing, not a technical or external dependency.
3
Test Users So Far
6-wk
Launch Plan Prepared
2
Person Team

This is an honest in-progress status, not a revenue claim. Update this section with real usage and outcome data post-launch.

What I'd do
differently.

I'd start user testing earlier and run it alongside the build instead of treating it as a gate that comes after. Three test users this late in the process means I'm validating decisions that would have been cheaper to change three months ago.

Owning design and frontend end-to-end kept the product coherent, but it also means testing is the thing that gets deprioritized when I'm heads-down building. On the next thing, testing gets a fixed slot on the calendar from week one, not a milestone I get to after the build feels done.

"Building solo across three platforms taught me more about where I actually add value than any single client project could. It's also where I found the gap I'm most likely to repeat if I don't fix it deliberately."

Michaela Hoffman, Product Designer & Frontend Developer
You’ve reached the end

Thanks for reading. If you’d like to discuss this project or explore working together, I’d love to hear from you.

Get in TouchAll Work
Next Case Study
Big City vs. Small City JTBD Framework ·
Context Travel