This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
The app is here: foodpivot.ashwintemkar.com
Kiranraj Chintada (@kiranrajchintada302) was on this with me.
What I Built
I got tired of scrolling for dinner, so the app only has to answer one question. What should I eat next?
Not which restaurant is trending. Not who has the better rating. The food.
You tell it where you are. Big cities first: Pune, Hyderabad, Mumbai, Bengaluru, Delhi. It looks at places nearby whose menus are already known, from the map and from what those kitchens publish. Then it looks at you. How you eat. What today or tomorrow looks like. A tag if you have one: healthy, Chinese, light, something you can finish before a gym session. And what you already ate.
Gemma names the dish. The nearby places show up only because they already serve that dish.
You can type things like this.
- Gym tomorrow, keep it light.
- Chinese, not too heavy. I'm in Kothrud.
- Rainy evening in Jubilee Hills. I had biryani yesterday.
- Something healthy before a long meeting.
- Office lunch, vegetarian, Baner.
The answer is a plate. Hakka noodles. A grilled bowl. Misal. Dosa. Whatever sits closest to the day you just described. The kitchen is where you go to get it, not the thing you had to choose.
Demo
1. Where you are, and what you feel like.
2. The food. One dish, one reason, from your tags and your last meals.
3. Places nearby that already have it on the menu.
Code
Food Pivot
You are tired and do not want to decide dinner. Food Pivot reads the mood, keeps the diet and allergy rules, and asks Gemma 4 to pick one plate that is already on the menu.
The menu, the distance, and the allergies are code. Gemma only chooses among dishes those rules already allowed. Backboard sends that request. If BACKBOARD_API_KEY is missing, the same ranker decides.
Local
docker compose up -d
copy .env.example .env
pnpm install
pnpm db:push
pnpm dev
DATABASE_URL for the local Tiger (Timescale) container:
postgresql://foodpilot:foodpilot@127.0.0.1:55432/foodpilot
Set BACKBOARD_API_KEY. The model defaults to gemma-4-26b-a4b-it through Backboard's google provider. Change BACKBOARD_LLM_PROVIDER and BACKBOARD_MODEL_NAME if your Backboard account lists Gemma under a different pair.
Deploy
Tiger Data. Create a Tiger service, copy the Postgres connection string into DATABASE_URL, then pnpm db:push. The local compose file is the same Postgres shape.
Render. New Blueprint from this repo. Itβ¦
https://github.com/ashwintemkar/foodpivot
How I Built It
The city comes first. The address you give, or the area you pick, decides which known menus we even look at. A rainy night in Pune should not be answered with a kitchen in Hyderabad.
Those menus are the foods we already know are served nearby. Maps tell us the place is close. The published menu tells us the dish is real. We are not asking the model to invent a restaurant.
Your side of it is small. Diet. Allergies. Tags. What the day is for. The last few things you ate. That history stays with the app, in Tiger Data, so "not again" and "something like last time" are about your meals, not about a rating chart.
Gemma 4, gemma-4-26b-a4b-it, reads that and names the food. The call goes through Backboard, one key, so the app is not tied to a single model vendor. Gemma only sees foods that already fit the diet and the area. It returns one dish and one sentence. If the name is not on that list, we keep the closest match from your own preferences.
The app itself sits on DigitalOcean, at foodpivot.ashwintemkar.com, so it is awake when you are hungry. Gemma is not running on a GPU we manage. DigitalOcean serves the page. Backboard serves the model. Tiger keeps what you have eaten.
flowchart LR
A[Where you are] --> B[Nearby places with a known menu]
C[Diet, tags, the day, past meals] --> D[Gemma through Backboard]
B --> D
D --> E[The dish]
E --> F[Places nearby that already serve it]
Why Does Open Innovation Matter?
The hard part was never writing a prettier menu. It was refusing to let a model invent dinner.
Gemma is open-weight, so the model behind the suggestion can change without changing the question. Backboard is the door in front of it: one key, and the food decision is not glued to one company's login. What you ate last is ours to keep, in a database we can read, not a memory we have to trust a closed chat to recall. The nearby food comes from places and menus that are already public.
A closed assistant will happily name a famous restaurant. This one names the food, then shows you who nearby already cooks it.
The Lazy Payoff
You stop doing the app's job. You say the day. You get the dish. The places come after, and only the ones that already have it.
Prize Categories
- Best Use of Gemma. Gemma 4 names what to eat.
- Best Use of Backboard. That call goes through a Backboard key.
- Best Use of DigitalOcean. The app is on App Platform at foodpivot.ashwintemkar.com.
- Best Use of Tiger Data. What you have eaten stays there, and the next suggestion starts from it.
Top comments (0)