DEV Community

Cover image for PawGuard — AI-Powered Breed Health Risk Reports for Dogs
Andrew Raieta
Andrew Raieta

Posted on

PawGuard — AI-Powered Breed Health Risk Reports for Dogs

DEV Weekend Challenge: Dog Days Edition Submission 🐕

What I Built

PawGuard — you punch in your dog's breed, age, weight, sex, and it tells you which hereditary conditions that breed actually gets, with real screening recommendations and a timeline from puppy to senior. Built entirely around Google AI/Gemini.

You can also just upload a photo instead of typing anything: Gemini Vision looks at it and guesses the breed, body condition, and rough age, then pre-fills the form for you.

PawGuard dog profile form after uploading a photo, with breed, name, and body condition auto-filled by Gemini Vision

🔗 Live demo: https://pawguard-v45n.onrender.com

💻 Source code: https://github.com/araieta/PawGuard

(The app supports both Italian and English via a toggle in the header — screenshots below are in English.)

Why I Built This

By day I'm a software engineer doing cybersecurity/SOC work with Splunk, and lately I've been sliding over into AI/LLM security. When the weekend theme turned out to be International Dog Day, I didn't want to just ship another "here's a cute breed identifier" demo — I wanted something an actual dog owner would open more than once.

Also, honest disclosure: I don't have a dog. Don't have the space, don't have the budget right now. But a good chunk of my friends do, and this is the kind of thing I'd genuinely send them, not just something I built to check a box for the challenge.

Here's the actual problem I was trying to solve: most first-time owners have zero idea their breed comes with specific, well-documented risks until something already went wrong. Nobody tells a new Basset Hound owner that the breed's whole body shape makes disc disease a real thing to watch for. Nobody tells a Boxer owner they should be thinking about cardiac screening (ARVC) starting pretty young. PawGuard is my attempt at surfacing that stuff before it turns into an emergency vet bill.

How It Works

  1. Profile step — name, breed, age, weight, sex (or just drop in a photo and let Gemini fill most of it in)
  2. Risk engine — the backend checks the breed against a knowledge base I curated by hand (prevalence, severity, typical age of onset for each condition), then bumps the risk score based on stuff specific to this dog — like weight sitting outside the ideal range for that breed/age
  3. Report generation — Gemini takes the structured risk output and turns it into an actual explanation per condition, plus a screening timeline (puppy → adult → senior) PawGuard condition card showing a specific hereditary risk with a color-coded risk bar and breed-specific explanation

PawGuard condition card continued, showing the personalized screening recommendation and priority level

  1. PDF export — a proper document, formatted like something a vet clinic would actually print, not a screenshot of the webpage stuffed into a PDF

PawGuard preventive care timeline broken down into puppy and adult life stages

PawGuard preventive care timeline continued, showing senior stage recommendations

PawGuard report page with a Download PDF button below the preventive timeline

PawGuard completed report showing patient data and executive summary, with all three flow steps marked done

Tech Stack & Google AI Usage

Google AI (Gemini) does the heavy lifting here:

  • Vision: breed guess, body condition, apparent age, straight from a photo
  • Structured generation: every report comes back as validated JSON, not free text — the risk engine's output gets turned into breed-specific explanations, not generic filler
  • Ollama Cloud is in there too, as a vision fallback for when I blew through Gemini's free tier mid-testing (which happened more than once, ask me how I know) Backend: Python (FastAPI), a breed condition knowledge base I built from actual public veterinary references — not something the model hallucinated — deployed on Render.

Frontend: Vue 3 straight from a CDN, no build step, because it's a weekend project and I didn't need the overhead. Custom visual identity, and the PDF export is styled completely separately from the web UI — it reads like an actual document, not a printout of a webpage.

A Bug I'm Actually Kind of Proud Of

While stress-testing with weird inputs, I entered a Dogue de Bordeaux puppy at 7.8kg / 6 months old — real breed average at that age is closer to 35kg. The report just said the weight "deviated from the ideal range," no direction given, which is basically useless and could read as a false alarm to a real user. Fixed it by adding a plausibility check in the risk engine and forcing the generated text to say which direction (underweight vs. overweight), because clinically those two things mean completely different stuff for the same condition.

What's Next

If I keep poking at this after the weekend: more breeds in the knowledge base (right now it covers the ~30-40 most common ones), a side-by-side breed comparison for people deciding between two, maybe a lightweight way to log actual vet visits against the recommended timeline.


Built solo this weekend for the DEV Weekend Challenge: Dog Days Edition. Ask me anything about the risk engine or the Gemini structured-output setup in the comments.

Top comments (2)

Collapse
 
varshithvhegde profile image
Varshith V Hegde

Wow nice

Collapse
 
miwaty profile image
Andrew Raieta

Thank you!! I’d be grateful if you could share this article with your friends. I’m really keen to improve my web app to help those with four-legged friends.