Zoo Rounds
Turn “we have 45 minutes at the zoo” — or two hours, or a half day — into a timed walking route and a printable observation checklist. Tap a quick time box or type your own minutes; the planner keeps each zone together, so your group walks an area once instead of criss-crossing the park.
Plan the visit
Once a route is on screen these boxes update it by themselves: change the minutes, the group size, the start time or the group name, then click away from the box — the route follows about a third of a second later, with no second press of Build, and the page stays where you are. A value that is out of range still gets an error line and a Build press is needed after you fix it.
Tap one to set the time box and rebuild — a 45-minute dash, a half day or anything in between. Typing your own minutes still works.
In a hurry? The tight visit sets 45 minutes and ticks only the first two zones in the walking order — the ones the group reaches first — so a short visit is not spent marching to the far side of the park and back. Every other zone is unticked and is one tap to put back. It builds the route straight away, and it overwrites whatever you had ticked.
How keeper talks are fitted into the route
Put in one or two talk times and the route becomes a fixed clock: the group waits nearby if it arrives early, spends the length you set at the talk (15 minutes by default — feeding slots are often 10, talks up to 30), then carries on to the next stop. Two talks are always handled in time order, whichever box you filled in first; if the route would reach one late, that is said under “Your route”. A talk time that needs more minutes than your time box has is reported instead of being forced in — a 45-minute dash rarely fits a talk. Leave both talk times empty for a plain route — each length box is only used when its own time is set. Talks are read when you press Build, so change a talk time and build again.
Set your minutes and group size, pick the zones and stops, then build the route. A 15-minute box and the 45 min quick box are both fine.
About
Zoo Rounds is a static page built by an AI agent. Nothing is sent anywhere and nothing is saved between visits: every plan is worked out in your browser from the list of animals built into the page. Stop times are estimates, not a real zoo map — check your own park’s opening times and keeper talks before you go.
Assumptions used in the timing: 4 minutes to walk to the next zone along the walking order, plus 2 minutes for every zone you walk past (so a zone you skip still costs walking time), capped at 14 minutes for one hop — a hop of 10 minutes or more is flagged as a long haul. Then 2 minutes to settle between stops, the viewing minutes in each animal’s own small minutes box (the built-in number, 5 to 12 minutes, is only a starting guess; you can type any whole number from 1 to 45, and the route uses that box), up to two pinned keeper talks, each a fixed slot of the length you set (15 minutes by default) and always handled in time order, and extra minutes at every stop for a bigger group — nothing up to 10 people, then +1 minute per stop up to 20, +2 up to 35, +3 up to 60, +4 beyond that.
The walking order starts as the built-in list (Wetlands first) and the ▲ / ▼ buttons on a zone move it along that order; like everything else here, the order and the viewing times are not saved between visits. Nothing in the timing changes with the length of the visit, so a 45-minute dash uses exactly the same rules as a half day: it simply fits fewer stops.
The Tight visit button under the quick time boxes is a shortcut for those same rules, not a different set: it types 45 into the minutes box and ticks only the first two zones in the walking order, unticking the rest, then presses the same Build button you would and says in the status line which zones it ticked and which it left out.
Each zone header carries a live total — how many stops you have ticked there and the minutes in their small viewing boxes, for example “3 stops · 34 min viewing”. That total is worked out by a separate small file (zonetime.js) that only reads the zone blocks on the page: it counts ticked animals and the numbers in their viewing-minute boxes, so it leaves out the settling minutes, the group extra and all walking, and it is a way to see where the time box is going rather than a second timetable.
The finish line under “Your route” is read straight off the last time in the route list, and the last row of every route is the walk back to the gate: the same 4/2/14 rule applied from your last stop, which sits at a known place in the walking order, back to the entrance one place before the first zone. So the finish time is when the group is through the gate, and it is the same number in the route list, the plain-text plan and on paper. The first row of every route is the matching walk in from the gate: the same rule from the entrance to the first zone you keep, shown as minutes that end at your start time, so the timed box itself still begins at the first enclosure and that row is the one that tells you when to be at the entrance. Both of those rows are added by separate small files (gate.js and startwalk.js) which read the route rows and the zone order on the page, so they can never disagree with the planner above them.
The plain-text box is a copy of what is on screen, headed by your group name when you typed one; the printed sheet carries the route, the checklist and these notes, and another small file (printhead.js) puts one line at the top of the paper naming your group, your start time and the finish time — the first two read from the boxes on the form, the finish time read from the finish line under “Your route”, so a helper holding the sheet knows which visit it is and when it ends. Printing reads the same elements the screen shows, so the paper cannot disagree with the page, except in the checklist-only view below, where a stylesheet leaves the route, its summary line, the finish line, the two warning notes and the plain-text box off the paper on purpose.
The copy and print buttons are switched off until a route is on screen by one more small file (emptyguard.js), which watches the route panel and reads nothing else, so on a fresh page there is no press that does nothing.
The checklist-only view is one more small file (checklistonly.js) with its own stylesheet: it reads the route panel to know whether a route is on screen, adds a single class to the page body to hide the route, its summary line, the finish line, the two warning notes, the plain-text box, the form and these notes, and hides the note and the button again when you leave the view. The row holding the two buttons stays on screen there, but the copy button is hidden with the text box it copies from, while the print button stays, since printing the sheet is the point of the view. A blank name-and-date line, which that same stylesheet keeps off the page in every other view, appears with the questions in this view, both on screen as a preview and on paper, so a class sheet can be handed to one child. It prints nothing itself and touches no timing — it only changes what is on the page at the moment you press Print.
Pressing Build the route also moves the reader to the top of the route panel (one more small file, focusplan.js), so a keyboard or screen-reader user lands on the plan instead of having to hunt down the page for it, and the page scrolls there too. A build that is refused, or a tick change that rebuilds on its own, does not move focus: you stay on the form next to the error line or the box you just touched. Neither does a setting that rebuilds the route for you: when the minutes, the group size, the start time or the group name update a route that is already on screen, the page stays where you are, so nothing pulls you away from the form while you are still filling it in. The Tight visit button, which presses Build for you from the form, still lands you on the route.
A single-animal tick rebuilds the route, but the planner’s own status line only says how big the route is now, never which stop changed. One more small file (tickstatus.js) puts the name in: it waits a little longer than the planner’s own rebuild, then writes one short sentence in front of the planner’s message, for example “Humboldt penguin: taken off the route. Plan built: 12 stops in 5 zones.” It stays silent for zone ticks, viewing-minute changes and errors, where the planner already says what happened, so it never overwrites the planner.
The longest notes on the setup panel — how talks are fitted in, and how the zone totals, the walking order and the two gate walks work — sit behind a short summary line you can open, so the form stays short on a phone. The words are all still on the page; only their display changes (collapse.css), and the setup panel is left off the printed sheet either way.