Inspiration

Every time I walked into North Servery and saw chili dogs, I would frantically text Adhitya. But we realized two things: I wasn't always there to text him, and neither of us had the time to manually check the Rice Dining website every single day. The tragedy of missing your favorite meal (Food FOMO) is a real campus problem. We decided to automate the solution so nobody ever misses out on chili dog day again.

What it does

DishWish is a smart campus dining dashboard and notification engine that tracks your favorite meals across all Rice University serveries. Instead of manually clicking through dining menus, you tell the app what you want and where you are. DishWish scans the day's menus, calculates the walking time from your current location, uses AI to recommend the optimal dining plan, and crucially, pushes a real-time Telegram notification straight to your phone the second your favorite dish is being served.

How we built it

We built a full-stack TypeScript application within an npm monorepo.

The Backend: Runs on Node.js and Express. We used axios and cheerio to build a custom web scraper that pulls and parses the server-rendered HTML blocks directly from dining.rice.edu, normalizing dietary tags and meal periods.

The Notifications: We integrated the Telegram Bot API into our backend to handle real-time user subscriptions and push alerts, bridging our web app directly to students' pockets.

The AI: We process the scraped menu data and user location, then feed it to the Google Gemini API to generate smart, personalized dining recommendations and reasoning.

The Frontend: Built with React 18 and Vite. We integrated react-leaflet and OpenStreetMap to render an interactive campus map that utilizes navigator.geolocation to pinpoint the user.

The Math: Instead of relying on expensive external routing APIs (like Mapbox or Google Maps), we wrote custom Haversine distance algorithms to calculate walk-time estimates locally from GPS coordinates.

Challenges we ran into

While we’d love to just say "None, we are expert coders," the reality of web scraping is always messy. Extracting clean data from server-rendered HTML required careful Cheerio parsing to ensure we didn't break the app if the dining website changed its layout. Additionally, calculating accurate walking times across campus without a dedicated routing API meant we had to implement and tune our own local math to make the map useful, all while ensuring our Telegram bot fired perfectly without spamming the user.

Accomplishments that we're proud of

Developing a fully functional, AI-integrated geospatial web app—complete with live mobile push notifications—in record time without relying on heavy databases or bloated frameworks. We proved that with a clean architecture and a bit of work ethic, you can take a funny, everyday campus problem and rapidly deploy a robust software solution to the public.

What we learned

The most important thing we learned is to focus on how a product actually works for the end-user in reality, rather than over-engineering it. Sometimes a simple, locally-calculated solution (like our Haversine math for walking distances) is much better, faster, and cheaper than trying to integrate a massive external routing API.

What's next for DishWish

We've successfully conquered the dining halls, but Rice students eat elsewhere too! Our next big step is breaking out of the serveries. We want to expand DishWish's scraping and notification engine to include non-servery campus spots and beloved local food options nearby, such as Local Foods and Dandelion Cafe, creating the ultimate unified food-radar for Rice students.

Built With

Share this project:

Updates