
BowlWise
A dog food recommendation engine that scores 260 products against veterinary nutrition standards, live on tablets in two Pet Valu stores.
Problem
Dog food labels can’t be compared to each other. A raw food that’s 70% moisture prints 11% protein on the bag; a kibble prints 26%. Normalized to a dry-matter basis the raw is actually 37%, the higher of the two. Nothing on the shelf tells an owner that, and the comparison tools that exist are either brand-sponsored or blind to format. I spent three years at Pet Valu watching people make a several-hundred-dollar-a-year decision with no way to see what they were actually buying.
How it works
A deterministic scoring engine, not a model. Every product is normalized to dry-matter basis at import, so the engine compares like with like, then scored 0–100 across six weighted factors drawn from AAFCO, NRC and WSAVA guidance (activity and weight goal, nutritional quality, life stage, formulation integrity, format suitability, and price value), with additive penalties for diagnosed conditions applied last. Allergens and breed/kibble-size mismatches are hard filters that return zero before scoring runs. Owners answer an eight-step profile, with no account required.
Describe your dog
An eight-step profile: life stage, activity, weight goal, allergies and any diagnosed conditions. No account needed.
Compare like with like
Every product is normalized to a dry-matter basis at import, so a raw food and a kibble are finally measured on the same scale.
Score and explain
Allergens and size mismatches are filtered out first. The rest score 0–100 on six weighted factors from AAFCO, NRC and WSAVA guidance, each explainable line by line.
The product




Decisions
- A deterministic scoring engine instead of a modelRule-based scoring is the cold start: a model needs behavioural data that a launch-day product doesn’t have yet. It also means every score can be explained to the owner line by line, which matters when you’re asking someone to trust a recommendation about their dog’s health. ML is gated behind 500+ tracked purchases, and until then calling this “AI-powered” would be false.
- Normalize to dry-matter basis at import, not per requestThe conversion is the whole point of the product, and doing it once at import lets the scoring engine read protein_dmb and fat_dmb directly instead of repeating the maths on every request.
- Never impute missing nutrition dataIf moisture is missing, the converter returns null rather than assuming a default. Fabricating a plausible number would produce a confident score built on an invented input, the failure mode most likely to make the whole engine untrustworthy. Unpublished values score neutral, so brands that are transparent about gaps aren’t punished for it.
- Strip health conditions from the recommendations responseThat endpoint is public and unauthenticated: anyone with a pet’s share link can curl it. Health conditions are PIPEDA-classified health data, so the profile is split into an internal object the engine scores against and a public object the API returns, and the health fields never make the round trip.
- Magic-link auth, with the token stored only as a SHA-256 hashNo passwords to manage or leak, and if the database were breached the stored tokens would be unusable. The raw token exists only in the email.
- No login wall anywhere in the recommendation flowRequiring an account before showing any value kills conversion. Guests get a per-pet session token and full results; the account prompt comes after they’ve seen something worth saving.
- A frozen regression baseline for the scoring engineScoring changes are easy to make and hard to evaluate: a tweak that helps one profile can quietly wreck another. Fifty frozen (profile, product, score) tuples across five representative dogs get re-scored on demand and the run exits pass, yellow, or red on how many drifted.
Where it is now
Launched publicly on April 4, 2026 and running on customer tablets in Pet Valu Oak Ridges and Aurora. In its first measured month it drew 224 visitors and 707 page views, 54% from Canada, with 9% of sessions on tablets. Built and shipped solo (133 commits across backend, frontend, catalog, CI, and the legal pages) and incorporated as BowlWise Inc.
- 260Products scored, 15 brands
- 121Automated tests, all passing
- 20API endpoints, 14 rate-limited
- 224Visitors in first measured month
- 2Pet Valu stores running it
- 100%Of commits written solo
Next project
