Skip to content

DC Menu App UC Davis Dining Commons

Know what's serving before heading out.

DC Menu App home screen showing the four UC Davis dining commons and their open or closed status

01 · Context

Bring the meal decision onto one screen.

Choosing a meal at UC Davis meant checking four separate dining sites for a location, the current menu, and food that fit a student's needs. That search could still fail at the last step: a dish might look right, but its station might stop serving before the student arrived.

The team combined student interviews and surveys with a review of other dining apps. Location and meal period gave us the basic structure, while students with irregular schedules made exact service times part of the decision. I joined as an application developer and focused mostly on the data and APIs that carried those choices into the mobile app.

02 · Feature set

Put availability ahead of menu detail.

We put all four dining commons and their open-or-closed status on the home screen. From there, a student could choose a meal period and see the actual station service window beside the menu, making timing part of the choice rather than a detail to discover later.

Dietary filters narrow the list before someone opens an item. The expanded record then shows ingredients, allergens, serving size, and nutrition without crowding the first scan. That sequence only works if the scraper and API preserve the fields the interface needs to answer each question.

Favorites and macro tracking extend the same menu records beyond a single visit. A student can save a food for later or add it to an itemized daily nutrition total instead of rebuilding that information in another tool.

DC Menu App dining menu with meal tabs, dietary filters, time windows, nutrition facts, allergens, ingredients, and favorite controls
Menu details join availability, dietary fit, ingredients, and nutrition in the same decision surface.

03 · What we built

Keep the menu record intact from source to screen.

The team turned dining-site menus into structured records and served them to the React Native app through an API. That made station times, dietary flags, and nutrition available to the phone as fields it could filter and display, rather than leaving each screen to interpret the source pages.

Those records supported location navigation, search, dietary filters, favorites, and daily macro tracking. We added Google sign-in and iterated on the screens as the data and interface came together. Working mostly on the data and API side taught me how an omitted field upstream could leave a polished mobile screen unable to answer the student's question.

Track a day

DC Menu App macro tracker with calories remaining and item-level nutrition totals
The macro view turns dining records into a daily, itemized nutrition total.

Inspect the data

MongoDB dining menu record showing date, meal period, station, dietary flags, nutrition values, allergens, and ingredients
The stored record preserves the fields needed for filtering and detailed menu inspection.
Engineering notePreserve the fields behind each meal decision

A menu item is useful only when the app can connect it to its station, service window, dietary flags, ingredients, and nutrition. The team separated collection, storage, API, and presentation so those fields could travel together into filtering and detail views.

  • BeautifulSoup collected dining-site data into structured records stored in MongoDB.
  • Express exposed the menu fields through API routes used by the mobile interface.
  • React Native reused those fields across menus, dietary filters, item details, and macro tracking.

04 · Reflection

A useful menu depends on the whole path staying reliable.

My first React Native project made the distance between a working screen and a dependable mobile product concrete. Late in the build, an accidental Expo upgrade from SDK 49 to SDK 51 deprecated components and disrupted screens the team had already built. Recovering from it showed why dependency changes need review across the app, even when the visible feature seems small.

The same lesson runs through the menu data. Combining four sources only helps when service windows, dietary flags, and item details reach the phone together. The team built a shorter path from a student's question to a meal they could actually choose, and I learned that keeping that path trustworthy depends as much on integration discipline as on the interface.

Continue with the project

Explore DC Menu App in context.