A gout-safe dining heatmap for Magic Kingdom.
An interactive React app that visualizes every Magic Kingdom eatery on a risk heatmap for patients managing recurring gouty arthritis. Toggle three independent gout risk factors — purines, alcohol, and fructose/SSBs — and watch each venue's risk rating update in real time, on both a hub-and-spoke park map and a sortable list view.
Built for patients, caregivers, and clinicians planning a park visit around dietary triggers.
⚠️ Medical disclaimer: This tool is for informational purposes only and does not replace clinical dietary counseling. Consult your physician or a registered dietitian for personalized guidance.
- Toggle risk factors — turn purines, alcohol, and/or fructose/SSBs on or off. Only active factors count toward each venue's score.
- Pick a strictness mode — Strict weighs all three factors equally; Moderate and Flexible progressively de-emphasize alcohol and fructose for patients with well-controlled gout.
- Browse the abstract map, GPS map, or list — venues are color-coded
green (lower risk), yellow (moderate risk), or red (higher risk), with
✅
⚠️ ❌ icons for colorblind accessibility. The GPS Map tab plots venues on a real OpenStreetMap base layer. - Tap a venue for a score breakdown, higher/lower-risk menu highlights, and a link to the official Disney menu page.
- Check the Menu tab for the 10 highest- and 10 lowest-risk individual menu items across the entire park, each with its venue/land and a score — useful for spotting an extreme order regardless of which venue you're visiting.
Two extra indicators appear across the map and list views:
- ⚡ High on one factor — a venue's composite score is an average, which can mask a single factor that's severe on its own (e.g. a venue centered on alcohol). Any active factor in the Higher Risk range (7+) is called out separately — but only when the composite tier isn't already Higher Risk — with a ⚡ badge, a dashed red ring on the map, or an icon next to the Risk Tier in the list.
⚠️ Closed / limited / seasonal — venues that are temporarily closed, on a seasonal pause, or offering limited service are marked with a⚠️ icon; open the venue card for details before planning around it.
See docs/scoring_methodology.md for the
full clinical rationale and citations behind the scoring model.
⚠️ GPS Map note: Thegps_coordsinsrc/data/venues.jsonhave been cross-checked against OpenStreetMap node positions and Google Maps (seedata_sources/gps_verification_report.md), but have not been validated against on-site GPS readings inside the park. Treat the GPS Map as a close approximation, not a surveyed in-park navigation aid.
Requires Node.js 20+.
npm install
npm run devThen open the printed local URL (e.g. http://localhost:5173/Its-A-Gouty-World/).
To build a production bundle:
npm run build
npm run preview- Purine content: Kaneko K, et al. Handbook of Purine Content in Food
(2014) — digitized in
data_sources/kaneko_purines.csv. - Dietary risk evidence: Choi HK, et al. Purine-rich foods, dairy and protein intake, and the risk of gout in men. N Engl J Med. 2004; Choi HK, Curhan G. Alcohol intake and risk of incident gout in men. Lancet. 2004; Choi JW, et al. Sugar-sweetened soft drinks, diet soft drinks, and serum uric acid level. Arthritis Rheum. 2008.
- Clinical guidelines: Neogi T, et al. 2020 American College of Rheumatology Guideline for the Management of Gout.
- Menu data: Publicly available Magic Kingdom dining menus
(
disney_urlon each venue). Currentsrc/data/venues.jsonandsrc/data/menu_items.jsonentries are manually estimated and marked"estimated": true— seedocs/scoring_methodology.mdfor details and limitations.
The scripts/ directory contains the data pipeline:
pip install -r scripts/requirements.txt
python3 scripts/scrape_disney_menus.py # scrape live Disney dining pages
python3 scripts/enrich_usda.py # enrich with USDA FoodData Central
python3 scripts/build_dataset.py # rebuild venues.json / menu_items.jsonscripts/enrich_usda.py has been run via the periodic
.github/workflows/data-refresh.yml job — usda_fdc_id, usda_sodium_mg,
and usda_protein_g in src/data/menu_items.json come from that USDA
FoodData Central enrichment (181/200 items). scrape_disney_menus.py and
build_dataset.py have not been run against live Disney pages;
venues.json and menu_items.json are otherwise manually estimated, as
noted in docs/scoring_methodology.md. If
Disney's site blocks scraping, fall back to manually updating those files.
Disney's menus change seasonally. If you spot an outdated last_verified
date, a discontinued item, or a venue that's missing, please
open an issue with:
- The venue name and
idfromsrc/data/venues.json - What changed (new/removed item, alcohol availability, etc.)
- A link to the current official menu page, if available
- React 19 + Vite
- Tailwind CSS v4
- Recharts for the score breakdown chart
- No external map library — the park map is an original SVG (no Disney artwork is used)
- Fully static, no backend — all data is baked into the build
MIT — see LICENSE.
