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.
What it does
Three things, done well.
No dashboard. No social feed. Just menus, filtered.
Preference-aware filtering
Saved dietary preferences narrow every menu in one tap — vegan, halal, gluten-free, peanut-free.
Local-first reads
Browsing is instant and resilient. The app keeps working between dining halls when the network doesn't.
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.
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.