Inspiration

Sports and fitness is where health misinformation is thickest. Ice baths build muscle. You have to slam a shake within 30 minutes. Creatine wrecks your kidneys. Five minutes of running adds three years to your life. Every athlete you follow swears by something, and the headlines never disagree with each other.

Most people, athletes included, can't tell a strong study from a weak one, and a headline strips away every caveat the researchers were careful to include. We didn't want to build another fact-checker that hands down a verdict — those are overconfident and often wrong. We wanted something that shows you the trust signals and lets you make the call yourself.

What it does

Paste a study, an article, or a link, and NutriCut breaks it into three things:

  • What it claims — the finding the study actually measured, not the headline.
  • What it hasn't proven — the limits of the design (observational isn't causal, a mouse isn't a human, n=24 isn't everyone).
  • What contradicts it — known counter-evidence. If there isn't any, it says so instead of inventing a citation.

On top of that it shows how strong the evidence is, where the study design sits on the evidence hierarchy (from a single case report up to a meta-analysis), and a "headline vs. what it measured" panel when the source oversells. It tells you how much weight a study carries. It does not tell you what's true.

Drop in a real link — a Harvard Health article, a supplement blog — and it fetches the page and reads it for you.

How we built it

  • Python + Flask, one service, plain HTML/CSS/JS front end. No database, no accounts.
  • Gemini with structured output. An enum-locked schema forces the model into fixed fields (claim, study type, sample size, gaps, contradictions) instead of free text, which makes the output far more consistent than a chat prompt.
  • Deterministic where it counts. The evidence-strength read and the hierarchy ladder are computed in code from the extracted study type, not generated by the model. They can't hallucinate because the model never writes them.
  • Anti-fabrication guards. Contradictions come back as an empty array when there's genuinely nothing to cite, and that's treated as a valid answer. A surfaced headline is only shown if it appears word-for-word in the input; a substring check blanks anything the model paraphrased or made up.
  • Link input, hardened. Paste a URL and the server fetches the article. Because a public endpoint that fetches arbitrary URLs is a security risk, it's locked down: http(s) only, every resolved IP checked (private, loopback, and the cloud metadata address are all blocked), redirects re-validated each hop, decimal/hex/octal IP and DNS-rebinding tricks rejected, plus timeout, size, and per-IP rate limits.
  • Deployed on Google Cloud Run.

Challenges we ran into

The whole point is trust, so the tool hallucinating even once kills the premise. Getting an AI product to say "I found nothing" instead of confidently making something up took most of our effort — which is why so much of it runs in plain deterministic code and why an empty result is a first-class answer.

The headline guard was a good example: the model kept "improving" a plain headline into a punchier one, which is exactly the hype we're trying to flag. A verbatim substring check fixed it.

Opening the URL feature safely was the other hard part. A naive fetch would let someone point it at the cloud metadata server and leak credentials, so we validate IPs after DNS resolution and re-check every redirect.

Accomplishments that we're proud of

  • It works on the real, messy web — not just clean abstracts. Paste a link to a Harvard Health article or a supplement blog and it fetches the page, finds the actual claim, and breaks it down. That's what someone with a headline (and no PDF in hand) actually needs.
  • It refuses to make things up. Building an AI tool that says "I found nothing" instead of inventing a citation to look smart is harder than it sounds — and it's the one thing a trust tool can't get wrong. An empty result is a first-class, honest answer here.
  • The parts that matter can't hallucinate. The evidence-strength read and the hierarchy ladder are computed in plain code from the extracted study type. The model never writes them, so they're deterministic by design.
  • We shipped it live and locked it down. A public endpoint that fetches arbitrary URLs is a real security risk. Ours blocks private and cloud-metadata IPs, re-checks every redirect, defeats IP-encoding and DNS-rebinding tricks, and rate-limits — tested, not hand-waved.
  • It looks like a product, not a chat box. The evidence ladder and the headline-vs-reality panel are custom pieces built for this problem, so the tool has its own visual language instead of a generic AI wrapper's.

What we learned

  • A strict schema beats free-text prompting for reliability by a wide margin.
  • People read star-rating-style scores as "higher is always better," so we show a labeled position on a hierarchy with a "correlation isn't causation" caption instead of a single score.
  • Evidence hierarchies are genuinely contested in nutrition — a well-run cohort study can beat a weak trial — so we frame the ladder as a guide to study design, not a ruling on truth.

What's next for NutriCut

  • Situate a single study inside the wider body of evidence. Right now it reads one paper's account of itself; the real product knows the other studies in the field.
  • Resolve the sources it names into real, clickable citations.
  • A browser extension or share-sheet so it meets you at the headline instead of on a separate site.

NutriCut shows the evidence and its strength. You make the call. Not medical advice.

Built With

Share this project:

Updates