Case study · Founder & Lead Engineer · 2025 – Now

Optimal
Shopping

A grocery price comparison app that tracks prices across 1,000+ store branches and finds the cheapest way to split your list across up to four stores. I built all of it.

1,000+store branches
1–4stores per trip
3platforms
Prelaunch, waitlist open

The problem

Grocery prices vary a lot from store to store, but nobody has time to check four websites before a shopping trip. And the cheapest store for eggs is rarely the cheapest for chicken.

Optimal Shopping answers one question: given your list and where you live, which stores should you go to, and what should you buy at each?

My role

I'm the founder of Optimal Data Inc. and the only engineer. I designed and built the data pipeline, the search, the database, the web app, the mobile app and the billing. I also manage one hire on the product and marketing side.

The code is private. I'm happy to walk through any of it in an interview.

How it fits together

Retailer sites1,000+ branchesData pipelinePython · FastAPI · DockerResumable batch jobsSupabase PostgresMulti-schema · RLSRate limitingSearchOpenAI embeddingsBasket optimizer1–4 stores + routeWeb appNext.jsMobile appsReact Native · ExpoBilling: Stripe (web) + RevenueCat (mobile) → one subscription profile

What I built

  • Data pipelinePython and FastAPI orchestration in Docker. Checkpoint-resumable batch jobs, so a crash never means starting over, and automatic detection of stores that stop returning data.
  • Basket optimizerFor every allowed set of up to four stores, buy each item where it's cheapest, then add the cost of the shortest trip. Keep the best total. Distance and trip time are part of the price.
  • SearchSemantic product search with OpenAI embeddings, query expansion, a brand lexicon and 15+ category filters, so “oat milk” finds what you meant.
  • AppsA Next.js web app, plus an iOS and Android app in React Native and Expo with Apple Sign-In, GPS, push notifications and camera.
  • BillingFreemium. Stripe on the web and RevenueCat on mobile, merged into one subscription profile with webhooks.
  • DatabaseMulti-schema Supabase Postgres with row-level security across many migrations. User data stays in-house; nothing is sent to third-party monitoring.
  • Social featuresCollaborative lists, friends, a savings leaderboard, referrals and a usage-metered free tier.

The hardest part

Collecting retailer data responsibly: staying within each store's rules, and building the pipeline so it doesn't get blocked in the first place, instead of fighting blocks after the fact.

The second hardest part is presentation. People shop for very different reasons. Some want the lowest total, some want one quick trip, some want a specific brand. The interface has to make the tradeoffs obvious without burying anyone in numbers.

Try the idea

Try it · Basket split demoMade-up stores and prices. Driving counted at $0.70/mile.
Your list
Fresh CornerValue GrocerBulk BarnMarket HallHome
$43.22Total, with driving
14.4 miRound trip
$1.17Saved vs. best single store
  1. Bulk BarnMilk, Eggs, Chicken, Coffee, Rice
  2. Market HallSalmon

Also built: the company workspace

Optimal Data runs on a workspace I built instead of paying for Asana, Buffer and QuickBooks.

  • AccessMulti-tenant, role-based access for 5 roles, audit logging, admin impersonation
  • FinanceIncome and expense ledger by project, payroll (hourly, salary, commission), partner payments
  • MarketingCampaign link tracking with click analytics, content calendar, Instagram OAuth, hashtag presets
  • LaunchEarly-access waitlist with approve/reject and invite-token gating