Inspiration

As an Australian on a learning abroad program in the US, the biggest culture shock for me was how little most people think about what's in their food and what it costs the planet. The gap between foods is huge. A kilogram of beef emits about 60 kg of greenhouse gases, while a kilogram of peas emits about 1 kg. And where the food comes from matters far less than what it is: even beef bought from a farm you could walk to would only shave about 0.2 kg off that 60 kg. Carbon tracking apps exist, but they ask for too much effort and give you a vague monthly number. I wanted something that feels as effortless and rewarding as a streak on a language app and suggests actionable swaps that can make a difference.

What it does

GreenGro turns your grocery receipts into a weekly carbon score and a habit.

  • Scan a receipt and GreenGro estimates the CO₂e of every food item, with an uncertainty range. Your first week sets a baseline. Stay within 10% of it and your streak grows. Beat it and you get a new personal low, and the baseline resets to that.
  • The home screen shows your status. Your weekly number sits in the centre of a lush forest when you're below baseline, calm plains when you're within it, and a smoggy sky when you're over.
  • Offset to save your streak. If you finish a week over your limit, you can offset the excess through a provider and keep your streak.
  • Swaps suggest the single change that would cut your basket the most, and leagues let you compete with friends on improvement against your own baseline, so every diet competes fairly.
  • Health-aware suggestions. Through FinchNode, gain personalised health advice and diet change suggestions tailored to your own hospital records.

How I built it

Data: two datasets are used together. Agribalyse (about 2,500 finished food products) is checked first for its granularity, and Poore & Nemecek covers anything it doesn't. I harmonised their system boundaries so the two sources are comparable in one total. Pipeline: a multimodal LLM extracts and expands item names and sizes from the receipt, then deterministic matching assigns each item to an Agribalyse product, a food group, or a Poore & Nemecek category. Weight comes from parsed pack sizes, and the emissions maths is plain code. App: React Native (Expo) with NativeWind for styling, and an Express backend that owns all the streak, baseline and offset rules. Health layer: FinchNode for patient records and health-aware suggestions, using its synthetic sandbox.

Challenges I ran into

  • Receipts are cryptic. Receipts were central to the concept, but item names are abbreviated, so "KRO BNLS CHKN BRST" has to be expanded before anything can be matched.
  • LLMs are good at language and bad at lookup. As much as I would love to wrap everything using Claude, letting a model pick from thousands of database rows gave inconsistent, unauditable results. So I used a multistage design: the LLM parses names, and deterministic matching does the categorisation.

What we learned

How to design frictionless UI/UX for a mobile app that is naturally non-motivating. Nobody wakes up wanting to log groceries, so the receipt scan, the streak and the scene-based feedback have to carry the motivation.

What's next for GreenGro

  • Add product origin so transport emissions can be included, along with geographic features like local alternatives.
  • Make baselines and streak preservation fairer through user testing.
  • Partner with grocers whose loyalty data already provides item-level purchases, removing the scanning step entirely.

Built With

Share this project:

Updates

Submission history