HungryTerp

A React Native mobile app for University of Maryland students to explore dining hall hours, track meals, scan food for nutrition info, and chat with an AI dining assistant.


Features

  • HungryTerp — AI chat agent powered by UMD's TerpAI, embedded via WebView with quick-prompt chips
  • Dining Hours — Interactive calendar showing open/closed status, crowding levels, and live "Open Now" detection for 251 North, South Campus, and Yahentamitsi
  • Food Scanner — Demo food scanner with hardcoded dining hall items showing full macro/micronutrient breakdowns and allergen warnings
  • Meal Log — Daily calorie tracker with weekly stats, expandable meal cards, and a modal to log custom meals
  • Profile — Dietary preferences, allergen settings, fitness goals, and app preferences

Tech Stack


Project Structure

hungry-terp/
├── app/
│   ├── _layout.js           # Root stack + dark status bar
│   └── (tabs)/
│       ├── _layout.js       # Tab bar (TerpBot / Hours / Scan / Meals / Me)
│       ├── index.js         # TerpBot — WebView AI agent
│       ├── calendar.js      # Dining hours with live open/closed detection
│       ├── history.js       # Meal log + weekly stats + Add Meal modal
│       ├── profile.js       # Profile, dietary prefs, allergens, settings
│       └── scanner.js       # Food scanner with nutrition breakdown
├── constants/
│   └── theme.js             # UMD color system, typography, spacing, radius
├── assets/                  # App icons and splash screen
├── app.json                 # Expo config (name: HungryTerp, scheme: hungryterp)
├── babel.config.js          # babel-preset-expo + reanimated plugin
└── package.json

Getting Started

Prerequisites

  • Node.js v18+
  • Xcode (for iOS simulator / device)
  • CocoaPods (brew install cocoapods)
  • An Apple Developer account (free tier works for device testing)

Install

git clone <repo-url>
cd hungry-claude
npm install --legacy-peer-deps

Run on iOS Simulator

npx expo run:ios

If you see a Metro cache error on first launch:

rm -rf .expo node_modules/.cache
npx expo run:ios --no-build-cache

Run on Physical iPhone (USB)

Plug in your iPhone via USB, trust the computer on the device, then:

npx expo run:ios --device --configuration Debug

Expo will detect your phone, build the app, and inject the Metro dev server URL automatically. If the app opens to a red error screen, wait for Metro to finish starting and tap Reload JS.

In Xcode: select the HungryTerp target → Signing & Capabilities → enable Automatically manage signing → select your Apple ID as the team → set a unique Bundle Identifier (e.g. edu.umd.hungryterp.yourname).


Agent

The TerpBot tab loads the UMD TerpAI agent via WebView:

https://terpai.umd.edu/chat/7f223670-26c1-4466-9af7-4e63c82cd173

All other data (dining hours, meal history, food scanner items) is either pull from online sources or hardcoded for demo purposes.


Colors

Token Hex Usage
umdRed #E03A3E Primary actions, scan button, tags
umdGold #FFD200 Active tabs, highlights, UMD badge
bg #0C0C0E App background
bgCard #161618 Cards, modals
success #22C55E Open Now, protein
warning #F59E0B Moderate crowding, allergens

Known Limitations

  • Food scanner is demo-only — no real camera or image recognition
  • Dining hours are pulled from UMD's online sources, but availability is hardcoded based on existing trends
  • Meal log resets on app restart (no persistence layer)
Share this project:

Updates