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
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.
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.
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.
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.
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 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.
| Runtime | PHP 8.2 or newer, with OPcache |
|---|---|
| Database | MySQL 8.0 |
| Web server | Nginx or Apache, with HTTPS |
| Scheduled work | One cron entry — schedule:run each minute |
| Background daemons | None. No queue worker, no WebSocket server, no Redis |
| Starting size | 2 vCPU, 4 GB RAM, 40 GB disk for a single-branch clinic |
| Disk growth | Records are small; X-rays and scans are what fills a disk |
| Backups | Nightly database dump plus uploaded files, kept 14 days |
| Languages | English and Latvian, switchable per user |
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.
Single clinic
One practice at one address, however many people work there.
Billed annually. No setup fee.
- Unlimited staff accounts and shared terminals
- All twelve modules — nothing is an upgrade
- Updates for as long as the licence runs
- Support answered by the people who built it
- Installation, your letterhead and your price list loaded
- Training for the desk and the consulting room
Each additional branch
A second site on the same system, not a second system.
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
Managed hosting
Your own instance, run by us — no server for the clinic to keep alive.
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
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.