← Back to projectsNibble · UCLA dining, simplified

Eat what fits
your diet.

Nibble is a Bruin dining companion that filters every dining hall menu by what you actually eat — vegan, halal, gluten‑free, allergy‑aware — in one tap. Built local‑first so it keeps working between halls.

Available on iPhoneFreeMade by a Bruin
Tuesday · lunch
Hey, Huntington
H
VeganHalalGFNuts
Matches at BPlate
Tofu Banh Mi Bowl
Brown rice · pickled veg
vegan
Charred Broccolini
Lemon · chili oil · sesame
vegan
Coconut Curry Lentils
Basmati · cilantro · lime
vegan
Today
Halls
Saved
You
Halls
All 4
Filters
7 diets
Cold start
< 1.2s
Offline reads
Yes

What it does

Three things, done well.

No dashboard. No social feed. Just menus, filtered.

01

Preference-aware filtering

Saved dietary preferences narrow every menu in one tap — vegan, halal, gluten-free, peanut-free.

02

Local-first reads

Browsing is instant and resilient. The app keeps working between dining halls when the network doesn't.

03

Privacy-aware accounts

Authentication routes are scoped to what the app actually needs. Account deletion is a first-class flow, not a buried link.

Screens

A walk through the app.

Tuesday · lunch
Today, 38 matches
Tofu Banh Mi
BPlate · vegan
Lentil Curry
BPlate · vegan
Charred Broccolini
BPlate · vegan
Mushroom Pho
BPlate · vegan
01 · Today
Diet
Vegan
Vegetarian
Halal
Gluten free
Peanut free
Dairy free
02 · Filters
Dining hall
Epicuria
Open · until 9 pm
Pasta Bar — fresh
Contains gluten
Pizza al Forno
Vegetarian
Antipasto
Contains gluten
Tiramisu
Vegetarian
03 · Hall

Case study

How it was built.

Stack

React Native + Expo · TypeScript · Supabase auth & data · React Query for cache · Sentry & Expo OTA for ops.

Highlights

Preference-aware filtering · resilient menu reads · privacy-aware account flows.

Problem

Bruins were checking three different menu sources, parsing inconsistent ingredient labels, and re-applying their dietary constraints every meal. Decision fatigue, three times a day.

Solution

Nibble consolidates every hall's menu into one mobile-first flow. Saved preferences narrow the list automatically. Local-first reads keep menus visible even when the network drops between buildings.

Architecture

The client is React Native + Expo with typed API boundaries. Supabase backs auth and the menu cache. A scheduled job normalizes incoming menu feeds before they hit users — so unfamiliar ingredient strings never break a filter.