Inspiration Quick health tasks are annoying: “What’s in this meal?”, “Should I worry about this symptom?”, “Where’s the nearest place to get help?” I built HealthStack AI to bundle three tiny, practical tools into one simple page that works in a demo without logins or paid APIs.
What it does Calorie Estimator (photo → nutrition): Detects the dish, splits into items, estimates grams + kcal/100g, totals kcals, and shows sources. Symptom Checker (guided Q&A): Asks targeted follow-ups and returns a plain-English summary with self-care tips and red-flag guidance. Medical Map (postcode → nearby care): Finds pharmacies/clinics/hospitals/blood banks around a UK postcode—no API keys.
Fast examples Example 1 — Food (worked): Upload a pic of chicken caesar salad. Output table (abridged): Chicken (120 g × ~165 kcal/100g) → ~198 kcal Romaine (80 g × ~17) → ~14 kcal Caesar dressing (30 g × ~480) → ~144 kcal Croutons (25 g × ~407) → ~102 kcal Total ≈ 458 kcal + source links.
Example 2 — Symptom (worked): Input “throbbing headache after long screen time.” Q&A covers duration, hydration, light/noise sensitivity. Output: “Likely tension headache vs dehydration. Try water, breaks, OTC analgesic if suitable. Seek help if sudden ‘worst ever’, neuro deficits, fever, head injury.”
Example 3 — Map (worked): Search BR6 9EG, Pharmacy → pins within ~3 km with names on click.
How I built it Frontend: Single-file Flask templates with a minimal dark glassmorphism theme. No JS build tools. Backend: Python Flask. File upload for food photos. Session state for symptom flows. AI/NLP: Pluggable LLM via health.py (detect_food_description, estimate_calories_from_desc, Q&A engine). I strip code fences and parse JSON into tables. Data/Maps: OpenStreetMap: Nominatim (geocoding) + Overpass (POIs). folium renders the interactive map. UX: No sign-ups, no keys, fast demo path. Results include sources and a medical disclaimer. Challenges I ran into LLM JSON drift: Sometimes prose instead of JSON → added a fence stripper and schema checks. Calorie realism: Mapping free-text dishes to grams per item → added transparent “assumed_mass_g”. Open data limits: Overpass/Nominatim throttling → user-agent, timeouts, small result sets. Multi-turn state: Keeping symptom questions consistent → simple session state machine.
Accomplishments that I’m proud of Three useful mini-apps in one file that anyone can run. Clear, source-linked nutrition breakdowns (not just one kcal number). A guided symptom flow that stays compassionate and safe with red-flag messaging. A no-keys Medical Map using open data that looks clean on first load.
What I learned Small, focused tools beat one giant app for hackathons. “Explainable outputs” (tables, sources, assumptions) build trust fast. Open data stacks (OSM + folium) are perfect for demos and judges.
What's next for HealthStack AI Export & share: One-click PDF/CSV for calorie tables and symptom summaries. Personalization: Local storage of dietary prefs/allergies and symptom history (opt-in).
Built With
- css3
- flask
- folium
- html5
- jinja
- leaflet.js
- llm-(openai-compatible)
- nominatim
- openstreetmap
- overpass-api
- python
- requests
Log in or sign up for Devpost to join the conversation.