Tushar Lachman
Melbourne · RMIT ’27
DATA + AI TOOLRuns locally, used weekly

Kitchen OS

Know what is in your pantry, what you can cook, and what it does to your macros.

Kitchen OS — screenshot
3.5k
lines of python
66
backend functions
3
unit systems reconciled

Watch it run

02 TAKES
TRAILERThe short, edited version♪ SOUND ONTwenty-four seconds on the one idea the schema exists for: a quantity that went down because something was cooked, not because anyone typed. Built as motion rather than screen-captured — every number in it is one the walkthrough underneath shows the app actually producing.
FULL WALKTHROUGHThe unedited takeThe app driven end to end, uncut and at real speed: read the day, walk the shelf, search the global food database, tick something off the shopping list and watch it land in the pantry, open a recipe, ask the chef what tonight could be out of what is in stock, say you cooked it, correct the amounts it assumed — and then watch the pantry and the day’s total both settle up.

Every feature, step by step

05 FEATURES · 22 SCREENS · OPEN ONE

The kitchen, at a glance

03 STEPS
What the app is for, in three screens: what has been eaten today, what is on the shelf, and what this kitchen knows how to cook.

The list and the shelf are the same data

04 STEPS
A shopping list that ends in the pantry, rather than a second list to reconcile against it by hand.

A chef that has read the pantry

04 STEPS
Chat sessions that persist, and answers assembled from the quantities actually in stock rather than from a generic recipe index.

Cook it, and the shelf pays for it

05 STEPS
The feature the schema exists for: cooking a recipe works out what it used and takes it back out of the pantry.

Logging it, and the targets it is measured against

06 STEPS
Four ways into the food diary, and the body metrics the day’s numbers are actually calculated from.

The trailer at the top is a built motion piece rather than app footage — designed scenes, not screen capture — though every figure in it is one the walkthrough and the screenshots below show the app itself producing. Everything from the walkthrough down is the real app, and everything in it is invented: the cook, their body metrics, the groceries, the recipes, every meal and macro, and both halves of every conversation. Kitchen OS is Streamlit, so unlike the browser-rendered projects on this site there is no fetch to replace — Python runs the whole app server-side and only rendered deltas ever reach the browser. The harness stands in for the external services inside the Python process instead, before app.py, backend.py and ai_chef.py build their clients at import time. Supabase is replaced by an in-process implementation of the queries the app actually makes, and its rows persist across reruns, so ticking an item off the list or cooking a recipe is a real state change photographed before and after rather than two staged screens. Gemini is not called: its replies are scripted, though the chef quotes quantities read back out of the pantry context the app itself assembled. The food-database lookup returns invented results in the real response shape, and ingredient images are drawn rather than fetched. The app runs on synthetic credentials, and any connection to a host that is not the local server is refused and counted — a run that let one through would say so, and this one blocked none. Nothing was read from the real database and nothing was written to it, and the repository is not modified at all. Beyond the invented data nothing is retouched: the only thing hidden is Streamlit’s own local dev toolbar, and the decimal commas in the profile fields are the capture machine’s regional format rather than anything the app chose.

WHY IT EXISTS

A pantry, recipe and nutrition tracker built in Python on a relational schema I designed from an entity-relationship diagram. Cook a recipe and it works out what you used and takes it out of your pantry — including converting between grams, millilitres and pieces.

How it’s put together

L00
Streamlit UI, ~1,800 lines
L01
A 66-function data layer over Supabase
L02
PostgreSQL schema designed from an ERD
L03
Gemini chat with persistent sessions
L04
Gemini vision for meal photographs
L05
Unit normalisation across weight, volume and count
L06
pandas + Altair for history charts

Built with

PythonStreamlitSupabasePostgreSQLGoogle GeminipandasAltair
PERIOD
February — March 2026
ROLE
Solo — schema, build, ship
SOURCE
View on GitHub ↗

The hard parts

08 NOTES
1

Automatic pantry deduction when a recipe is cooked, with unit normalisation across weight, volume and count — a recipe asking for 200 ml of milk can be paid for out of a 1 kg entry, and a recipe asking for two eggs cannot.

2

The whole app is a Streamlit front end over a 66-function data layer, so every read and write goes through one module instead of being scattered through the pages.

3

A conversational recipe assistant on Gemini with real chat sessions — created, renamed, reopened and deleted — rather than one flat history that grows until it is useless.

4

Photograph a meal and Gemini vision estimates the macros and logs it against the day.

5

Personalised calorie and macronutrient targets calculated from body metrics and activity level, with a daily dashboard and full history charted in Altair.

6

Custom foods and reusable meal bundles, so the things you eat every week are one tap rather than four entries.

7

Cooking a recipe writes a log you can rate and review afterwards, and those ratings build a taste profile the assistant can use.

8

Shopping list that flows back into the pantry when items are marked as bought, closing the loop instead of leaving two lists to reconcile by hand.

Want the parts that aren’t on this page — the architecture arguments, the things that broke, a live walkthrough?

NEXTBets — The Vault