Anirudha
← Work
App I BuiltReact + FirestorePersonal Project~10 min read

Sani's A-fare

Sani's A-fare

Personal meal planning app

React + Firestore · Personal Project · 2024

Meal planning is a decision fatigue problem. I don't need 10,000 recipes. I just want someone to tell me what to cook based on the dishes I like along with the ingredients I would need.

6060MINUTESevery sunday???

Before — every week

Sani's a-fare
↺ Refresh Menu
Weekly Plan
Grocery
Dishes
Mon
Paneer Bhurjiswap
Black Bean Burgersswap
Tue
Paneer Bhurji (leftover)
Mushroom Risottoswap
Wed
Palak Paneerswap
Tempeh Stir-fryswap
Thu
Palak Paneer (leftover)
Greek Saladswap
Fri
Moong Dal Cheelaswap
Chicken Fajitasswap
Sat
Choleswap
Chicken Skewersswap
Sun
Chole (leftover)
Baked Falafel Bowlswap

After — one tap, every week

From 60 minutes of Sunday stress to one tap.

14meals planned per week
<10sto generate a full plan
31grocery items auto-listed
weeklyactive since launch

Why I built this

Every Sunday, my wife Sanchi blocks an hour or two in the evening to plan the week's meals. She decides what to cook, checks the fridge, balances nutrition and protein, plans leftovers and builds a grocery list. I get exhausted just watching her.

To make some time for ourselves before our busy week starts, I decided to automate this. We know the inputs which rarely change, we know what our constraints are and we know what we want as output. Pretty straightforward and can be definitely done with one click.

So I built it. I defined the product, designed the UX, wrote the algorithm, built the frontend and the database. We've used it every single week since.


How the algorithm works

RecipeDatabaseuser + system dishesConstraintEngine5 rules applied →14-MealWeekly Plan↕ swap any slotGroceryListauto-generated
Rules applied:No dish repeated in a weekMax 3 chicken mealsIndian lunch · non-Indian dinnerLeftovers auto-slot next dayUser recipes get priority

The constraints that make the app personal.


Four decisions I'm proud of

01

14 slots, not 21

Breakfast is habitual. We eat the same 2–3 things every morning or skip breakfast. Planning it would add complexity without solving a real problem.

Narrower scope. Sharper product.

02

Deterministic rules

Rules are transparent and debuggable. For me, predictability beats novelty for a tool used weekly.

Less AI. More robust.

03

Swap one, don't regenerate

Regenerating throws away 13 meals that I was fine with. Swap preserves the mental model. Faster, and more in control.

Intuitive and flexible.

04

Grocery list = plan output

The list is auto-generated from the current plan. Pantry staples excluded via a configurable list. Swap a meal, the list updates instantly. No manual entry needed.

End to end planning.


The app

Sani's a-fare
↺ Refresh Menu
Plan
Grocery
Dishes
Mon
Paneer Bhurjiswap
Black Bean Burgersswap
Tue
Paneer Bhurji (leftover)
Mushroom Risottoswap
Wed
Palak Paneerswap
Tempeh Stir-fryswap
Thu
Palak Paneer (leftover)
Greek Saladswap
Fri
Moong Dal Cheelaswap
Chicken Fajitasswap
Sat
Choleswap
Chicken Skewersswap
Sun
Chole (leftover)
Baked Falafel Bowlswap
⊕ enlarge

Weekly plan — 7 days × 2 meals

Sani's a-fare
Plan
Grocery
Dishes
basil
bell peppers
black beans
broccoli
canned tomatoes
carrots
chicken
chickpeas
cucumber
cumin
garlic
ginger
green chilies
lemon
lettuce
mixed greens
mushrooms
onion
paneer
scallions
sesame oil
snap peas
soy sauce
tempeh
tomato
turmeric powder
+ 5 more…
⊕ enlarge

Grocery list — 31 items auto-generated

Sani's a-fare
Plan
Grocery
Dishes
All Dishes+ Add
Paneer BhurjiIndian · Veg
Palak PaneerIndian · Veg
CholeIndian · Veg
Moong Dal CheelaIndian · Veg
Dal TadkaIndian · Veg
Mushroom RisottoItalian · Veg
Black Bean BurgersAmerican · Veg
Tempeh Stir-fryAsian · Veg
Greek SaladMediterranean
Baked Falafel BowlMiddle Eastern
Chicken FajitasMexican · Chicken
Chicken SkewersGlobal · Chicken
+ more…
⊕ enlarge

Dish library — the recipe database


The Gap

Recipe apps give you infinite choice which again could be exhausting. Meal kits automate but don't personalize and are expensive. ChatGPT, Claude, etc can generates but it would take time to write the perfect prompt with no way to save the personal, local recipes that we love. Spreadsheets personalize but require maintenance and choosing the recipes for the week. There's a gap at the intersection of fully automated and constraint-aware which I wanted to fill.


What's next

The core loop works well. The next steps would be:

Phase 1

Personalization engineTrack which meals get swapped vs. kept. Use that signal to improve selections over time.

Phase 2

Multi-user householdsSupport members with different dietary needs in the same plan.

Phase 3

Grocery delivery integrationConnect the auto-generated list to Rewe or Edeka. One tap from weekly plan to delivered groceries.