On 1 October we sent 28 test photos to two vision models on Cloudflare Workers AI and asked each to name the species. The better one named 10 correctly. The other named 9, and reported total confidence in every answer it gave, right or wrong.
So photo recognition is built, and it is switched off. That is the first of three things ZooLog will not do. All three come from the same place: a keeper’s log is a welfare record, and anything that makes it less true is a bad feature, however clever it looks in a demo.
1. Guess which animal is in the photo
Keepers take a lot of photos, and the app lets them capture now and file later. Suggesting which animal is in each picture would save taps at the end of a long day, so on 30 September we built it, behind a flag that shipped set to off.
The design was careful. The photo goes to Workers AI rather than an outside vision service, because a picture of an enclosure can include a person, and that should not go to a new company we would have to add to the privacy notice. The model may only name a species from the collection’s own list. Individual animals are then ranked from the keeper’s recent logs and who shares the enclosure. Nothing is ever assigned automatically: the keeper sees a suggestion and decides.
Then we ran it live, using each photo’s recorded species as the answer and one photo per species. With only Latin names in the prompt, Llama got none of the first seven. With common names beside the Latin ones it managed 9 of 28. Mistral did slightly better on hits and was wrong less often, mainly because it declined to answer more.
28 test photos, two vision models
One square per photo, grouped by outcome. Each model chose from the collection's own list of 42 species.
The photos were hard. A small cat half hidden in a planted enclosure. A goat in mid-leap on a fence. That is the point: those are the photos keepers take, between jobs. A model that only works on a clean, centred shot is no use to them.
Cost was not the problem. Each call cost well under a tenth of a penny. The problem is what a confident wrong answer does to the person reading it. The design says “suggestion, you decide”, but a keeper shown a wrong guess marked high confidence has been misled, and on most photos the guess would be wrong or missing. So the flag stays off. On 2 October we decided the inbox will suggest from context instead: the time, the round and feeding plan, what has not been logged yet today, and any animal names spoken in a voice note. Vision can come back later as one input among those, if a model ever earns it.
2. Take a drug dose by dictation
Keepers write a lot. When we analysed existing log records, 96.5% had a note, averaging 148 characters, and 72 to 78% of that text was written fresh rather than picked from a template. It is the bulk of the work, and typing it one-handed in gloves is slow. Voice is the obvious help.
But the same analysis found drug names and doses sitting inside those notes. A transcription engine that hears “fourteen” when the keeper said “forty” has nearly tripled a dose, and the safety net people assume (the keeper reads the transcript back) gets weaker as the engine gets better, because the better it is, the less anyone checks.
So the rule is to split by log type. A routine note (fed, observed, cleaned) may be dictated and then edited, because a transcription slip there is cosmetic. A dose never goes through dictation. The drug is picked from a list and the amount goes into a number field with its unit. Voice can help a keeper reach the right screen; it never types the number. Safety comes from the shape of the form, not from how accurate the transcription is.


Voice notes were built on 2 October on exactly those terms: hold to talk, audio recorded on the phone, transcribed by Whisper large-v3-turbo on Workers AI, nothing stored on our servers, and the local recording deleted once the keeper confirms the text or after 14 days. Typing always works, with or without signal.
3. Rank keepers against each other
The third refusal is the oldest. On 20 September we wrote it down as a rule: no leaderboards and no comparison between keepers, ever. A count of logs per keeper turns a welfare record into a performance-management tool, and that changes what people are willing to write. The honest, unflattering entries, an animal off its food or a mistake owned up to, are the ones with the most welfare value, and they are the first to go when someone is being scored.
The product already worked that way. Since June the keepers’ “still to log today” count has been for the whole team, never per person, because tracking individuals turns the app into employee monitoring. The admin dashboard shows when each keeper was last seen, not how many logs they wrote. When we drafted ZooLog’s own success measures in September, every one was set at the level of the collection. We refused even time spent on a screen, because it is a per-keeper performance measure by another name.
That costs us something. A manager might reasonably want to know who is logging and who is not. Our answer is that the record exists to protect the animals, and a record people are wary of writing in does not protect anything.
Update, 7 November 2026
On 14 October we settled the provider question for photo recognition: it stays on Workers AI, and the flag stays off. If it is ever turned on, the model’s own confidence will be capped so nothing reaches “high”, common names go in the prompt, keepers see a shortlist of three, and it is only switched on if a test on more than 100 real photos clears the bar first.



