Multi-branch · GDPR-ready · hosted in the EU

The practice system that keeps work where it is

VetCare runs a small-animal clinic end to end — the diary, the clinical record, the bill and the roster — in one screen the desk and the consulting room share. No cloud account, no per-seat surprises, no messages sent to your clients behind your back.

Loaded with a working clinic — sign in as anna@vetcare.lv / demo1234

The VetCare day calendar: status filter chips, the list of who is rostered today, and half-hour appointment slots with owner, patient and visit type.
5calendar views of one diary
1booking form in the whole app
2languages, English and Latvian
0messages sent to your clients

See it work

One visit, from the phone call to the invoice

Five steps on five real screens. It plays by itself — hover to hold it, or pick any step.

Step 1 — the day calendar, with half-hour slots showing owner, patient and visit type, and the list of who is rostered today. Step 2 — the status board, with columns for scheduled, being seen, finished and cancelled. Step 3 — a case on the patient's history tab: the episode narrative, the clinical examination and the visit blocks under it. Step 4 — the patient card with the visit's ledger of billed lines and its attached documents. Step 5 — the invoice list, showing the visit each bill belongs to, its total and whether it is paid.

It warns; it never refuses. If the vet is not rostered that day the form says so beside the picker — an absence is a fact about somebody's life, and a system that blocks the booking is a system the clinic works around.

Playing — hover or focus a step to hold it.

The working day

One diary, five ways to look at it

Day, week and month calendars, a sortable list and a status board — the same bookings, chosen server-side so a shared screen at reception can sit on the board all morning.

The board the front desk lives on

Scheduled, being seen, finished, cancelled, didn't turn up. Receiving a patient is one button, and it is the moment the visit fee lands on the bill — so nothing is charged for an animal that never arrived.

  • Roster-aware. A booking is checked against who is actually working, and the screen says plainly when a vet with appointments is not in.
  • One booking form. Every screen that books opens the same one, so there is no second version to drift.
  • Nothing moves by itself. No automatic status changes — a booking is where a person put it.
The appointment board with columns for scheduled, in progress, finished and cancelled, each card showing owner, patient, visit type and an action button.

Clinical records

An episode, not a pile of visits

A case is the illness. The history, the examination and the diagnosis belong to it and are corrected as the episode teaches you more — instead of being re-typed at every appointment and leaving six versions for whoever reads the case next.

  • Several open episodes at once. A chronic case and an unrelated injury are two stories, not one muddled ledger.
  • Measurements are a series. Weight, temperature, pulse and blood pressure per visit, with the trend under the form — one weight answers nothing.
  • A structured examination you own. Twenty properties out of the box, renamed, reordered or switched off — with per-species default wording you save from a real patient.
A patient's case on the history tab: the episode narrative in four boxes, a collapsible clinical examination, then visit blocks with vital signs and the billed lines for each visit.

Money

The bill follows the visit

Every charge names the appointment it belongs to, so writing up Monday's work on Tuesday still puts Monday's X-ray on Monday's invoice. When a case runs over a fortnight, put its visits onto one document and hand the owner one number.

  • Your prices, your words. A visit catalogue and a service price list the clinic edits — nothing about a visit is hardcoded.
  • VAT, if and when you register. Off until you switch it on, and a price stays what the owner pays at the counter — the tax comes back out of it, at a rate class you name. Each bill keeps the rate and the regime it was raised under, so a reprint says what left the building.
  • A vaccination is one act. Charging the vial records the immunisation — serial number, site, health status and next due date, in the same click.
  • Correctable where it is read. Every line, including the visit fee, is edited on the visit's own ledger.
The invoice list: invoice number, client, patient, the visit each bill belongs to, date, total and a paid or unpaid badge.

Reporting

Numbers the practice can act on

Revenue, visits, new patients and what is still outstanding — by day, week, month, quarter or year, and by branch. Narrowed to the locations you are allowed to see, never wider.

  • Seven tabs — summary, visits, workload, revenue, patients, staff and stock.
  • CSV export for the accountant, without giving anyone database access.
  • Vaccinations due and overdue as figures you can work from, on the same page.
The reports dashboard: period selector, revenue, visits, new patients and outstanding totals as cards, with revenue and visits charted by day.

The platform

Built for a real clinic, not a data centre

One application on one server, inside the EU. Nothing phones home to a third party, nothing is rented per seat, and there is no background daemon a small practice has to keep alive.

Multi-branch by design

Every list, report and roster knows which locations you may count. The system also knows where you are standing today, and fills the branch in for you.

Privileges, not job titles

What somebody may do is a set of privileges the clinic grants, copied onto the account when a role is assigned. A role never decides access at runtime.

GDPR built in, not bolted on

A subject access request exports in one click. Erasure anonymises the client in place — invoices and clinical history are kept as the law requires, and it refuses while a bill is outstanding.

Staff talk in one place

Direct threads and groups, with files, in a modal that opens over whatever you were doing — so answering a colleague never loses a half-typed note.

A roster that means something

One person, one branch, one day — generated a month at a time from a pattern, with leave requested and reviewed in the same place.

Documents where they belong

X-rays, lab reports and consent forms attach to the patient, the case, the visit or the billed line — and print with the case report.

Feature inventory

Module by module, in full

Twelve areas, one licence — no editions, no locked modules, no per-feature upgrades. Everything below is in every install.

Appointments

  • Day, week and month calendars, a sortable list and a status board
  • One booking form, opened from every screen that books
  • Visit types from your own catalogue, with colour and price
  • Roster checks: a vet's absence is flagged on every view
  • Five statuses, all moved by a person — nothing changes itself
  • A nudge 30 minutes after a booking nobody has marked

Clients & patients

  • Owners with several animals; animals with several owners
  • Microchip, passport, insurance, breed, colour, gender
  • A client status the desk can flag, and the full visit history
  • Species, breeds and colours typed in as you work
  • One search box for clients, animals and screens alike
  • Soft delete and restore — nothing is lost to a misclick

Clinical records

  • Episodes, not loose visits — several open at once per animal
  • Anamnesis, examination, suspicion and diagnosis on the case
  • Vital signs per visit, with the patient's trend beneath
  • A structured examination of twenty properties you control
  • Per-species default wording, saved from a real patient
  • Confidential visits, visible only to those allowed

Vaccinations

  • One act: charging the vial records the immunisation
  • Serial number, injection site, health status, next due date
  • The revaccination interval carried by the vaccine itself
  • A passport page per animal — date, age, temperature, vet
  • Due and overdue counted on the reports page
  • Rows that colour as a date nears and once it passes

Billing

  • Every charge names its visit, so a late write-up still bills right
  • Services, products, vaccines and the visit fee on one ledger
  • Combine a case's visits onto one document for the owner
  • Any line corrected or removed where it is read
  • Printable invoices on your letterhead, marked paid at the desk
  • VAT when you are registered — one switch, rate classes you name
  • Outstanding totals on the dashboard and in the reports

Catalogue

  • Products and vaccines with unit, price, expiry and supplier
  • A service price list, and a visit catalogue behind admin only
  • Expiry alerts on the dashboard and in the reports
  • Discount windows on a product's selling price
  • Manufacturer, supplier and active ingredient as you type them
  • Every value list renamed, merged or archived in one screen

Staff & roster

  • One person, one branch, one day — generated a month at a time
  • Work patterns per employee, corrected by hand afterwards
  • Leave requested and reviewed in the same place
  • Removing a shift names the bookings it would strand
  • "Who is in today", with each person's live booking count
  • Branch opening hours drive what can be booked

Access & security

  • 44 privilege keys, granted as sets the clinic defines
  • Roles order the screen; privileges decide access
  • Branch visibility applied to every list, report and roster
  • Session length, idle logout and "remember me" set in Settings
  • Shared terminals as an account type of their own
  • Password resets asked in-app and handed over by a colleague

Reporting

  • Seven tabs — summary, visits, workload, revenue, patients, staff, stock
  • By day, week, month, quarter or year, and by branch
  • Revenue, visit counts, new patients and what is outstanding
  • Vaccinations due and overdue as workable figures
  • CSV export, without giving anyone database access
  • Never wider than the branches you are allowed to see

Documents & print

  • Files attach to the patient, the case, the visit or a billed line
  • X-rays, lab reports, consent forms and scanned paperwork
  • A full case report, a referral version and a discharge sheet
  • Invoices and reports as PDF on your own letterhead
  • One upload limit and one accepted file list, everywhere
  • Stored on your disk and swept into the nightly backup

Internal messaging

  • Direct threads and groups between staff, with attachments
  • A modal over your work — a reply never loses a half-typed note
  • A green dot when a colleague is actually at a screen
  • In-app notifications for bookings, leave and resets
  • A notice an admin writes to the clinic, a branch or named people
  • Staff to staff only — nothing here ever reaches a client

Data & GDPR

  • Subject access export in one click, behind its own privilege
  • Erasure anonymises in place — history kept as the law requires
  • Refused while the client still owes money
  • An activity log of who changed what, pruned after 90 days
  • Nightly database and file backup, fourteen kept by default
  • A health check that notices when the scheduler has stopped

Screens

A look around

Real screens from the running application, with the demo clinic loaded.

Scope

What it does, and what it deliberately doesn't

VetCare is built for fast day-to-day clinic work. The right-hand column is not a roadmap — those are decisions, and each one keeps the system smaller and quicker to work in.

In the box

  • Appointments across five views, with roster checks
  • Episode-based clinical records and structured examinations
  • Per-visit invoicing, combining, and printable documents
  • VAT you switch on, with rate categories you name yourself
  • Vaccinations recorded by the act that charges them
  • Products, price list, expiry alerts and value lists
  • Staff, privileges, roster, leave and in-app notifications
  • Reports, CSV export, activity log and nightly backups
  • GDPR export and anonymisation behind their own privilege

Out of scope, on purpose

  • Outbound email, SMS and reminders to clients — the clinic writes nothing to owners
  • A client-facing portal or online booking
  • Online payment gateways
  • Estimates and quotes — billing is direct invoice only
  • Stock counts and cost prices, without the receiving workflow to keep them true
  • Prescriptions, credit notes and a payment ledger
  • Supplier portals, EDI and accounting integrations
  • Lab and imaging integrations — an examination is a service, and its films attach to the visit

Under the bonnet

What it runs on, and what happens as you grow

A current Laravel application on PHP and MySQL. No message broker, no search cluster, no background worker to keep alive — a small practice should not need a systems administrator to keep its diary open.

It scales by adding requests, not by adding services

Pages are rendered on the server and updated in place, so a busy morning costs CPU and nothing else. Sessions and the cache live in MySQL rather than in a process's memory, which is what lets a second application server go behind a load balancer without sticky sessions or any change to the code.

  • Vertical first, and it goes a long way. More cores and more MySQL buffer pool is the whole tuning story for a practice of a few branches.
  • Then horizontal, when it is worth it. Add app servers behind a balancer; point them at the same database and the same document store.
  • Live updates by polling, deliberately. The badge every 15 seconds, an open chat every 5, throttled 95% in a background tab — no WebSocket daemon to die overnight.
  • Branch data is one database. Two sites or six read the same rows, scoped per user — there is no per-branch install to reconcile.
Server requirements
RuntimePHP 8.2 or newer, with OPcache
DatabaseMySQL 8.0
Web serverNginx or Apache, with HTTPS
Scheduled workOne cron entry — schedule:run each minute
Background daemonsNone. No queue worker, no WebSocket server, no Redis
Starting size2 vCPU, 4 GB RAM, 40 GB disk for a single-branch clinic
Disk growthRecords are small; X-rays and scans are what fills a disk
BackupsNightly database dump plus uploaded files, kept 14 days
LanguagesEnglish and Latvian, switchable per user
812automated tests
44privilege keys
12modules, all included
0background daemons
1cron entry to install

We size the server with you before installing, against your own branch count, staff and document volume — rather than quoting a concurrency figure your clinic will never test.

Pricing

One licence per clinic. Everyone in it, included.

You are not charged per seat, so nobody has to decide whether the new nurse is worth a login. The price follows the thing that actually grows — the number of branches.

Add-on

Each additional branch

A second site on the same system, not a second system.

€480/ year

Per branch, added or removed at renewal.

  • Its own diary, roster and opening hours
  • Staff see their own branches; managers see across
  • Reporting per branch and for the group
  • One client and patient register across all sites
  • The system knows where each person is working today
Ask about a group
Included

Managed hosting

Your own instance, run by us — no server for the clinic to keep alive.

€35/ month

Per clinic, whatever the branch count. Cancel at renewal.

  • Hosted in the EU, on your own isolated instance
  • Daily off-site backups, thirty days retained
  • TLS certificate, your own domain, monitoring
  • Updates applied for you, outside opening hours
  • A restore performed on request, not a file handed over
Ask for hosting

All prices in EUR, excluding VAT.

We run it, you own it

  • Your own isolated instance and database, inside the EU
  • Backups taken off the machine every night
  • Certificates, upgrades and monitoring handled
  • Updates applied outside your opening hours
  • A restore performed on request, not a file handed over

The data is yours, and that is not a slogan

  • A plain MySQL database and a folder of files — no format only we can read
  • Ask at any time and you are given both, in full
  • Nothing about your clinic is mixed with anybody else’s
  • No client portal, so nothing of yours faces the public
  • Running it on your own machine is on the roadmap, not shipped yet

What support covers

Questions from your staff, faults in the software, help with the catalogue and the privilege sets, and a hand when an upgrade needs planning. Answered on working days.

Getting your data in

Clients, patients and your price list are imported from a spreadsheet or an export from the system you use now — quoted once we have seen the file.

Getting your data out

It is a plain MySQL database and a folder of files. Ask at any time and you get both. The licence does not hold your records hostage.

Trying it before you commit

The demo below is the whole application with a working clinic loaded. Beyond that, we stand up your own instance with your real price list in it.

Where we are

VetCare is new. Here is exactly what that means.

It is a finished, working system rather than a prototype — but it is early, it is under active development, and we would rather say so than have you find out. What follows is the honest version.

Built, not assembled

Written from scratch on a current framework, in the open — not a decade-old product with a new skin. Every rule in it was decided for a reason somebody can still tell you.

Guarded by its tests

812 automated tests cover the rules that matter — who may see what, how a bill is raised, what erasure keeps. An upgrade that broke a rule would not get as far as your clinic.

Still being built, every week

Development is continuous, not a release every eighteen months. Every change runs the whole test suite before it can be merged at all, and reaches your clinic only after it has been used on ours. Updates are applied outside your opening hours.

Founding clinics set the roadmap

The practices installing it now are few enough that what they ask for gets built, and what they say is in the way gets removed. That access does not survive a customer list of two hundred.

Onboarding is done by a person

We install it, load your price list and your letterhead, import what you have, and sit with the desk and the consulting room until both are working in it.

What it is not

No client portal, no online booking, no reminders sent to owners, no stock counts, no prescriptions. Those are decisions, listed above — but if one of them is what you need, it is not the system for you yet.

Priced like what it is

Early pricing for an early product, and the figure you sign at is the figure you renew at while you stay a customer. You are not funding a sales department.

Tell us about your practice

How many branches, how many people, and what you are running now. We will tell you honestly whether VetCare fits — including when it does not.

Open the demo clinic

Two branches, a month of finished episodes, today's diary in every status, invoices paid and unpaid, a roster and a stocked shelf. Nothing to install — just sign in and use it.

Veterinariananna@vetcare.lv
Receptionistmartha@vetcare.lv
Managercharles@vetcare.lv
Passworddemo1234