Inspiration
This app was inspired by a conversation with a medical student friend, we were disucssing about how if one has high blood pressure, diabetes or kidney disease, your doctor gives you numbers: stay under so many milligrams of sodium, so many grams of carbohydrate. Then lunchtime comes and the menu board shows prices, not numbers. For a working adult with a 45-minute break, checking every stall is not realistic, so people either guess or stop eating out.
What it does
Personal limits: Choose your condition (high blood pressure, diabetes, kidney disease) and a sodium target. Add carb, sugar, potassium or phosphorus limits if your care team gave you them. Your profile stays in your browser.
Dishes that fit: Dishcovery checks every dish against your per-meal limits and shows the numbers, for example "Sodium ~633 mg of 767 mg per meal".
Closest options: When little or nothing fits, it shows the nearest dishes and exactly how far over each one is ("Sodium 294 mg over, about 38%"), instead of an empty page.
Halal and vegetarian.: The halal filter uses MUIS certification and shows the certificate number. Outlets that offer vegetarian options are labelled.
Map and distance: Stalls around SMU on a map, ranked by fit and distance from a starting point you pick (SMU, Raffles Place or Tanjong Pagar, or your location).
Coupons demo: Choosing a place opens its demo coupons, with a show-at-the-counter screen (code and QR code). Coupons never affect which dishes fit or the order of results.
How we built it
Front end: React, TypeScript, Vite, Tailwind CSS and shadcn/ui, with a Leaflet map on OpenStreetMap. Back end: an Express API in TypeScript, with Zod checking every input and data file. It is bundled into a single serverless function.
Hosting: GitHub and Vercel.
Data, gathered:
- Nutrient values from HPB's SG FoodID database, entered by hand into one spreadsheet that records each dish's source.
- Halal status from the official MUIS Halal Establishments service.
- Which stalls exist, and their vegetarian options, from SMU's official store directory.
- Locations from OpenStreetMap and OneMap.
Challenges we ran into
Nutritional data barely exists online, with menu descriptions of individual stalls also scarce.
Things that worked on our machine failed in production. Our API crashed on Vercel because of the way the file was packaged, and a map layer painted on top of the coupon popup.
Accomplishments that we're proud of
- A working, deployed app from data to screen
- Allowing users to key in their personal restrictions, with the data staying local on their device.
Built With
- claude
Log in or sign up for Devpost to join the conversation.