Project · Veterinary emergency care

Tino 24/7

Designing trust into a 24/7 emergency platform for veterinarians, connecting clinics and practices with animal owners around the clock, and managing the shifts that keep local cover honest.

One cluster, one dayIllustrative
A 24 hour cover ring for one cluster Three practices share the day in eight hour shifts, 08 to 16, 16 to 24 and 00 to 08, meeting at three handovers so the ring has no gap. The practice on the night shift is highlighted as on duty tonight. 00 06 12 18 PRACTICE A PRACTICE B PRACTICE C · TONIGHT 24/7 NO GAP AT HANDOVER

Three practices share one day. Dots are the handovers.

User adoption
+67%
vets and centres active on the platform
Client satisfaction
+85%
reported by participating practices
Coverage
24/7
continuous, with shifts allocated locally
Role
Senior Product Designer
Duration
2025 to present
Industry
Veterinary emergency care
Deliverables
System · Product · Motion
Mahdi Fazel · @mafazeluxui

Software for the veterinary emergency service in Germany

The shipped vet dashboard: Tino Points, shift plan, call history and statistics in one view.

Screens from the shipped product: the dashboard, the call history table, the login, the year planner and the availability settings.
The Tino 24/7 design system in Figma: typography, icons, colour, motion, layout, tokens and photography, and the token pipeline from one source to web, iOS and Android.
Wireframes in Figma: the shift planner, its filter modals and dialogs, with prototype links between the frames.

Product screens

The problem

Emergency cover exists. Reaching it does not.

In cases of animal emergencies, not every response centre operates around the clock.

Day-and-night clinics are few, often far from the patient, and easily overwhelmed by cases routed to them by default. The owner searching at 3am has no way to know which centre is actually staffed, and the centre that answers most often is the one closest to burning out.

The brief was not "build a directory". It was to keep continuous cover running across a whole country while making sure no single practice carries it.

The core constraint

Three variables, and no permission to drop one

Distance from patient, request volume, and centre capacity. Any two can be optimised in isolation. Holding all three at once is the actual job.

Allocation constraint3 variables
Distance from patient Volume of requests Capacity of the centre Nearest centre, swamped by default Idle centres while a spike goes unserved Fair load, two-hour drive Fair locally

Optimise distance and volume, and the nearest centre becomes the default destination for everything, the exact overload the product exists to prevent. Optimise distance and capacity, and quiet centres sit idle while a spike goes unanswered somewhere else. Optimise volume and capacity, and the maths is fair but the owner is driving two hours with an animal in the back seat.

So the allocation logic could not be a routing rule. It had to be a scoring model with a geography, one that resolves locally first, and only widens when a cluster genuinely cannot cover its own night.

Who it serves

Two people with opposite fears

One is afraid of being overwhelmed. The other is afraid of not being seen at all.

John David

38
Veterinary centre operator

Wants to extend the services his centre offers without burning out his staff or blowing the budget. He will join a shared rota only if he can see that the load is being distributed fairly, and see it before he commits, not after.

What he needs from the interfaceProof of fairness he can check himself, and a shift plan he can staff against.

Sophia Müller

46
Dog owner

Needs emergency care without geographic or timing barriers. At the moment she needs the product she is frightened, probably at night, and will not read anything. The answer has to be a place, a time, and a route.

What she needs from the interfaceOne answer, immediately, that is true.
Solution 01

A geography the fairness maths can actually run on

Germany divided into 17 chambers, each holding clusters of veterinarians. Allocation resolves inside a cluster before it is published to devices.

Sixteen federal states, with one split into two, gives 17 chambers, the same lines the profession already organises itself along, which means the model needed no explaining to the people inside it. Within a chamber, vets sit in clusters small enough that a night's cover is a local arrangement rather than a national lottery.

Fair allocation runs inside the cluster first. Only the resolved plan is published out to devices, so a vet's phone never shows a provisional rota that might change under them, the single biggest source of distrust in a shared-duty system.

Segmentation model17 chambers
Chambers
17
Clusters
within one
NordMitteSüdWest
Vets
on rota

Resolved locally, then published. Lime marks the vet on duty tonight.

Solution 02

Two ways in, because there are two jobs

A vet checking a rota on a phone and an administrator running a chamber on a desktop should not be handed the same login.

Authentication pathsone entry point
Mobile · vet
Enter email
Passwordless
Magic link
Resolves to
Vet dashboard
Desktop · admin
Enter email
Credentialed
Password
Resolves to
Admin dashboard

One form. The path is chosen by who is typing, and the destination follows automatically.

A vet opening the app at 2am to confirm a shift should not be recalling a password. A magic link sent to a known address is faster and, on a shared clinic device, safer, because nothing is stored to be found later.

An administrator managing a chamber all day needs the opposite: a durable session, a password manager, and a desktop dashboard. Both paths start at the same field and resolve to the right dashboard without the user choosing a role. Asking someone to classify themselves at a login screen is asking them to guess.

Solution 03

A greenfield system with one source of truth

Tokens defined once, emitted to web, iOS and Android, so a change to a colour is a change everywhere, not three tickets.

The product ships as a web app for centres and native apps for vets in the field. Without a token pipeline that split turns into three drifting interpretations of the same brand within a quarter.

Defining tokens once and generating platform formats from them kept the three surfaces honest, and made the design system something engineering pulled from rather than something design asked for.

Token pipeline1 source · 3 targets
Source of truth
Token definitions
Build step
Transform
Emitted formats
Web · CSS variablesiOS · SwiftAndroid · XML

One definition, three platform outputs. No hand-copied hex values.

Scope

Ten modules, one mental model

Everything a chamber, a centre and a vet need to run continuous cover between them.

01

Dashboard

The state of cover right now, per role.

02

Scheduler

Shift planning across a cluster.

03

Messages

Coordination attached to a case or a shift.

04

Change Request

Swapping a duty without breaking cover.

05

Call History

What came in, where it went, when.

06

Statistics

Load and distribution over time.

07

Tino Point Statement

The fairness ledger, made checkable.

08

Plan Generator

Producing a rota from the model.

09

Widgets

Cover status surfaced outside the app.

10

Tino Guide

Onboarding and reference in context.

Outcomes

What the platform changed

Measured across participating centres since launch.

01

Round-the-clock emergency access for pet owners, with a real answer at any hour.

02

Geographic reach that bridges rural and remote areas rather than concentrating cover in cities.

03

Reduced wait times at centres that were previously absorbing everything by default.

04

Staffing costs that can be planned rationally instead of absorbed as emergency overtime.

05

Clean case transfers between shifts, so nothing is lost at handover.

+67% user adoption and +85% client satisfaction followed from one thing more than any other: practices could verify that the rota was fair before they agreed to be on it.

The fairness ledger, Tino Point Statement, turned an algorithm people were asked to trust into an account they could audit. That is what moved the numbers.

Trust compounds fastest on day one. Next time I'd embed the scoring algorithm's transparency directly into onboarding, not just the weekly view.

Mahdi FazelSenior Product Designer · Tino 24/7

Got a product with three variables and no slack?