View

The work, at a glance.

AI-native

They asked me to redesign a meal page. I built the machine underneath it.

Livin is a personal chef platform run by a small team. Nobody owned product, so I took the seat: product lead, designer, and design engineer in one. They brought me problems. I wrote the PRDs and built what came out of them.

ROLE · Product Design, Design Engineering, GrowthCLIENT · LivinYEAR · 2026

Role and team

I was embedded with Livin as product lead and design engineer. I worked directly with the founder, lead engineer, and customer-service lead, and brought a product designer from my studio into Q1. I owned the product direction and built across the catalog, marketing site, onboarding, customer experience, and AI surfaces.

How it started

The service worked. The product had to catch up.

Livin’s in-person experience already worked: chefs cooked in members’ homes and people loved it. The digital product had not caught up. The founder came from marketing, one engineer held the codebase, and nobody owned product. I joined in Q1 2026 to take that seat, brought a product designer from my studio, and started by looking at everything a customer touched.

The prototype hub, where each brief became something clickable.

Q1 to Q2

The menu PRD became the platform decision

In Q1, I wrote the menu PRD around both sides of the problem: what customers needed to find and trust a dish, and the operational work required to keep the catalog current. When I presented it, the next question was how the team would actually run it. I proposed moving the catalog into Sanity and building the marketing site on top of the same headless system.

One content model

Dish catalog
630 dishes
Ingredient graph
1,073 ingredients, macros derive
Label vocabulary
45 computed labels
One query layer
buildDishQuery(labels[], operator)
  • Local/[city]/[neighborhood]86 liveSomeone searching their own zip.
  • Search/meals/[slug]36 liveA stranger finds it on Google, months from now.
  • Identity/for/[slug]24 liveSomeone who already knows what they need.
  • Comparison/alternatives/[slug]10 liveSomeone weighing us against someone else.
  • Partner/with/[slug]3 liveA partner's audience, attributed.
Onboarding
the door you came through picks the flow
One menu model, used by the catalog, marketing site, and onboarding.

The menu

630 dishes, modeled once, reused everywhere

It started with a basic customer question: what are the macros? Livin was already describing dishes as metabolic-health or GLP-1 friendly, while customers still had to message the team for nutrition information. I set out to put the macros on the menu. That became the work of giving 630 chef-written recipes a nutritional foundation we could stand behind.

Filter down, then expand a dish. The nutrition is computed, not typed.

Demand

The onboarding was a system, not a quiz

A relevant landing page only works if the next step remembers why someone came. I built the onboarding system in Sanity so a person arriving for fertility, metabolic health, or fitness could move through an experience shaped around that need, instead of starting over in a generic form.

Fitness, cancer, fertility. One shared system that starts in the right place.

01 / 03

Fitness lander into its onboarding.

One vocabulary. Two surfaces. A new persona is a query, not a build.

Supply

Keeping the menu fresh was the real bottleneck

As the catalog grew, keeping it fresh became a long manual process. The team needed to research new ideas, understand what the current menu was missing, create dishes, and review them before anything went live. I built a menu builder that brought that work into one system.

doesn't ship
Brief
plain language
Generate
recipe + nutrition + copy
Verify
checked against the goal
Publish
chef-ready

Marathon training, mostly plant-based, kid only eats mild food.

Charred Lamb Kebabs
Lamb kebabs · Whipped hummus · Cucumber salad & rice
44g proteinGluten-freeHigh-protein
Charred lamb kebabs with whipped hummus, roasted butternut squash, and herbed quinoa.High-protein
Charred Lamb Kebabs
Whipped hummus, rice & cucumber salad.
From menu gap to reviewed dish.
The same menu builder, available through Claude. Research and drafting started in conversation; review still happened in the system.

The foundation

I built each surface where it belonged

By Q2, I was shipping Livin's external menu in Next.js. The existing-customer menu needed to stay in Rails, so I built a working HTML prototype with the full add-to-cart flow. That gave the Rails developer something concrete to implement and kicked off the rest of the product work.

The React design system, compiled into their Rails app.

Design to production, in one pass

The Livin design token sheet.
01 / 04

150+ tokens, one source of truth.

Later, when we built the customer AI chat, we kept that surface in Next.js. I handled the interface and the behavior: it carried customer context, pulled relevant menu items, and could take a custom order. The referral flow used the same product language to turn a member’s share into something personal.

01 / 02

The customer-plan chat, from context to custom order.

Measurement

The homepage number was not a homepage number

Every week, the same question came up: how's the homepage doing? I had been building and reshaping dashboards in PostHog since the beginning, trying to get the team a read we could trust. I could see conversion move, but I could not tell whether the page had changed or the audience had. When I dug in, the answer was channel mix. A cheap channel could bring in more people and lower the blended rate while the homepage behaved exactly the same.

Reading a blended rate apart

In numbers

630
dishes
modeled once, reusable across the product
1,073
ingredients
mapped to nutrition data
45
health labels
computed from recipe data
159
landing pages
generated from the same catalog
150+
design tokens
shared across product surfaces

Numbers as of July 2026.

The receipts

Everything that shipped

  • August 20261 shipped
  • July 202612 shipped
  • June 20267 shipped
  • April 20264 shipped

+ 210 smaller fixes & improvements

Switch to Details for every entry.