← All work

Clinic web app · 2026

Grocery Planning

A clinic companion for eating well on a real grocery budget. Enter a US ZIP, price healthy staples at nearby stores, plan a cart against maintenance calories from a SECA scale, and print a store-grouped list.

Grocery Planning home page: headline, ZIP-code search, and feature cards

Stack

React 19, TanStack Start, OpenRouter AI

Link

Live site →

Grocery Planning was built for weight-management clinic patients who shop on a weekly budget. Twenty-four staples get one tile each: the lowest nearby price, calories and protein, plus whether Dallas food pantries usually carry the item. Opening a tile shows the nutrition panel and every store's tag. If a price isn't real, the tile stays blank. Never a guess.

The cart keeps a running total against a daily and weekly budget and defaults to a single store. “Find optimal route” picks the cheapest set of stores deterministically in code — not in the model — and binds each item to a stop. Print produces a printable, downloadable list of exactly what's in the cart, grouped by store.

Ask is a nutrition chat that takes food-diary and recipe uploads, suggests healthier swaps, and builds a grocery list. Answers come from 119 clinic Physical Handouts (109 English, 10 Spanish) via keyword search and cite the file name; Spanish questions prefer Spanish handouts. Guardrails hold throughout: ten requests per device per day, a 1,200 kcal/day floor, in-scope questions only, no diagnosis. A profile with SECA printout fields — maintenance calories, fat %, visceral fat, skeletal muscle — plus goal, deficit, and allergies feeds every Ask turn. The sheets are education, not personalized medical advice.

What it does

Prices

One tile per staple food with the lowest nearby price by ZIP, calories, protein, and pantry availability. Detail view adds the nutrition panel and every store's tag.

Cart

Running total versus daily and weekly budget. Single-store default with an optimal-route finder that binds each item to its cheapest stop.

Print

A printable, downloadable list of what's in the cart — grouped by store, nothing extra.

Ask

Nutrition chat over clinic handouts with diary and recipe uploads, capped per device per day and fenced by safety guardrails.

Profile

SECA body-composition fields, goal, deficit, and allergies, applied to every Ask turn. Cart and profile persist on-device; no login.

Built with

  • React 19 with TanStack Start, Router, and Query
  • Tailwind CSS v4 with Radix UI primitives
  • Zustand — cart and profile in localStorage, no login
  • OpenRouter Nemotron, called server-side for Ask
  • Keyword search over 119 clinic Physical Handouts
  • Postgres (Neon) with Kysely, Pglite locally, Better Auth
  • Vercel deployment