Back to work

2026

Operation: Get Jacked

A birthday present for my girlfriend, Thaolam. The app plans our meals, workouts and vitamins. The real gift is the promise behind it: she picks the food she loves, and I cook it, for as long as we're doing this.

WebFamilythree.js
Operation: Get Jacked
Goal
Help us eat well and get strong without giving up the food she loves
Role
Designer, developer, and the cook
Tools
Next.js, three.js, Upstash Redis, Vercel
Timeline
October 2026, for her birthday

The present isn't the app

Thaolam wanted a real plan for eating well and working out. I could have handed her a calorie app and wished her luck. That's the version where food turns into a fight, she white-knuckles her way through bland chicken and broccoli, and we both quit by November.

So the app is the wrapping paper. The present is the deal inside it: she picks the food she likes, the way she likes it, and I cook it. Every lunch box, every dinner, for as long as we're doing this. The software just makes sure I keep my end of the bargain.

Today on a phone: the day rail, today's CrossFit workout, and breakfast opened to her exact portion, macros and the vitamins to take with it
She opens it and sees one thing: what to eat now, how much, and what to take with it.
The Exercise tab on a phone: today's CrossFit WOD pulled from the gym's site, with a score and walk log
Workouts too: our gym's weekly WODs pull in on their own.

Not starving her of her culture

Thaolam is Vietnamese. Food is a big part of who she is, and a lot of diets would have quietly asked her to give that up. I didn't want to be the guy who "fixed" her by taking away cơm, phở and nước chấm.

So the menu is built from the food she grew up with, made a little leaner. Lemongrass chicken rice bowls, gà kho gừng, bò lá lốt, chả cá, cháo gà when it's cold out, and her own bok choy soup that she taught me. It even swaps toast for rice at breakfast, because that's how we actually eat.

Building it taught me more than the code did. I learned what đồ chua is for, why the betel leaves come from T&T and not Safeway, and that "if it's not good I just won't eat" isn't pickiness. It's a whole food culture saying flavor matters. Now that's a rule the app is built around.

How it works

The whole thing is one loop that runs every week, and the point of it is that nobody has to think very hard.

1. She picks. Friday afternoon, her phone asks four questions: what do you want for breakfast this week, for lunch, for snacks, for dinner. She taps one or two of each from the dishes she actually likes. That's her whole job.

2. It portions. Every recipe is sized twice, once for her and once for me, so we eat the same food on different plates. The app fills in all seven days, works out the macros, and tells each of us what goes on our plate at every meal, down to "½ cup of rice."

3. I shop. The shopping list builds itself from her picks, grouped by aisle, with the T&T items tagged so I know what to grab at the Asian market. I buy exactly what the week needs. No guessing, no "do we have fish sauce," no half a cabbage rotting in the drawer.

4. I prep. On the weekend I cook the lunches into boxes, three for her and three for me per recipe, and dinners get cooked fresh. I still measure everything, but the thinking is already done.

Prep, Plan the week: this week's two lunches and two dinners with both portions, above a seven-day grid of meals
Her picks become a whole week, portioned for both of us.
Prep, Shop: the week's shopping list grouped by aisle with shared checkmarks and T&T tags
The list is exactly what the week needs, grouped by aisle.

That loop is the real win. Meal prep usually means eating the same chicken and rice every day for a month, because planning anything else is exhausting. Here the planning costs nothing, so we get a LOT more variety, and I can meal prep for her without taking away the meals she wants. And because the menu is Vietnamese, every week I learn to cook something new from her food: shaking beef, ginger braised chicken, the right way to do the rice.

Prep, Cook on a phone: the lunch prep plan with Thaolam's and Morgan's box portions and step-by-step instructions
Cook day: both boxes, measured, with the steps.
Prep, Vitamins on a phone: this week's supplements for Thaolam, each one tappable to explain what it's for
Vitamins on a schedule, each with a note on what it's for.
  • Same table, different plates. We eat the same meal. Her portion and mine are calculated separately, so neither of us is eating "diet food" while the other eats real food.
  • Nothing is forbidden. Happy Lemon is on the menu. Restaurant night is on the menu. Dinner at her parents' is on the menu.
  • We walk together after dinner, every day. It's on the schedule like a meal, because it's where the extra progress comes from, not eating less.
  • Extras, not failures. If a work snack happens, one tap logs it. There's no red X and no guilt, just information for next week.

The fun part

I'm a 3D and XR designer, so of course the app got a little extra. It's dressed like a 2000s Frutiger Aero desktop: sky gradients, chrome-rimmed glossy pills, white porcelain rails. Every button and tab bubble is real three.js glass lit by a photographed studio, and the room is locked to the world, so when she tilts her phone the softbox reflections slide across the chrome and glass like a real object in her hand.

The bubbles have physics. Pick a day and the bubble's front edge snaps over, the back edge catches up late, and it bunches and wobbles into place like a drop of jelly. Slide it hard into the end of the rail and it squashes against the wall and springs back out. It took a lot of tries to get that feeling right, and it's the detail she plays with most.

What I took from it

The best software I've built this year isn't for a client. It's for one person, and it works because it's shaped around her instead of around a spreadsheet of macros.

Writing it rewired how I think about food too. I used to see a diet as a list of things you're not allowed to have. This one is a list of things she loves, cooked by someone who loves her, in portions that get us where we're going.

Happy birthday, Thaolam. I'll start the rice.

Role and stack

Designer, developer and cook. Next.js and React, Upstash Redis for shared state between our phones, three.js glass rendered once and copied into each element, deployed on Vercel. Built with Claude Code as my pair programmer.