The situation before the platform
Why veterinary practices needed one connected EHR rather than records in one place and scheduling, billing and imaging in others.
| The business |
Veterinary care providers ranging from single-location clinics to multi-site healthcare networks, along with the practitioners and clinic staff who record consultations, log prescriptions and manage appointments every day. |
| The starting point |
Clinical records, appointment scheduling, prescription management, diagnostic imaging and patient history sat apart from one another, leaving no single place to move a patient from intake through to post-care management. |
| The trigger |
Practitioners work in low-connectivity and field-based settings. Records had to be created and updated with no internet connection at all, then synchronise accurately on reconnection without duplication, loss or race conditions. |
| What they wanted |
One cross-platform EHR ecosystem covering patient history, prescriptions, SOAP notes, diagnostic imaging, scheduling and in-clinic billing, consistent across iOS, Android and web, online or offline. |
| Constraints |
Complex, varied clinical workflows had to fit structured yet flexible database schemas · data had to stay consistent between a Flutter mobile app and a React/Node.js web platform · continuous background sync could not degrade app performance or device battery life · sensitive veterinary records demanded encryption, role-based access and audit trails from the outset. |
What it runs at today
The platform as delivered, live across mobile and web in everyday clinical use.
Five gaps that shaped the build from day one
Not vague pain points — the specific reasons spoken clinical detail was being lost, each paired with what we did about it.
Veterinarians had to create and update medical records with no internet connection. The hard part was what happens next: data synchronising accurately after reconnection without duplication or loss, across users and devices that may have edited the same record while apart.
A hybrid bidirectional sync engine with timestamp-based conflict resolution. Each reconnection triggers a reconciliation pass, and extensive conflict-resolution logic plus real-world testing covered the edge cases — conflicting updates and partial sync failures included.
SOAP notes, prescriptions, diagnostic imaging and patient histories carry complex and varied data. Those workflows had to become structured but flexible database schemas that support diverse clinical requirements and stay maintainable over years, not months.
A dual-database strategy: PostgreSQL for structured clinical records where relational integrity matters, MongoDB for flexible diagnostic metadata such as imaging reports and diagnostic notes whose formats keep evolving.
The Flutter mobile application and the React/Node.js web platform had to agree at all times. Without that, duplicate records, race conditions and synchronisation inconsistencies would surface in exactly the clinical data that has to be trusted.
A shared API contract with a schema validation layer inside the Node.js backend, so both clients send the same shapes and inconsistencies are caught before they reach the database, backed by robust conflict-resolution mechanisms.
Background synchronisation had to run continuously without hurting application performance or battery life. Timely updates and efficient API usage pull in opposite directions, and clinical information still had to stay current on a phone carried through a full day of visits.
An event-driven background sync system that batches API requests by priority instead of polling. Critical clinical updates go immediately, lower-priority metadata is deferred, cutting network usage and preserving battery.
Google Calendar for appointment management and Celero for payments had to sit inside existing clinical workflows rather than beside them, keeping data exchange reliable and the experience consistent for staff who never think about which system they are in.
Dedicated adapter layers for Celero and Google Calendar that map external data into the internal EHR structure, so payments, appointments and calendar updates synchronise with clinical workflows and manual reconciliation drops away.
Many users reach clinical data at once when a clinic is full. The infrastructure had to hold up for a small practice and a multi-site veterinary organisation alike, without cost scaling as sharply as capacity.
An Amazon Web Services architecture balancing reliability, scalability and cost efficiency, with optimised backend services and auto-scaling to absorb peak clinic activity.
How it fits together
Simplified — the shape rather than every service.
A Flutter mobile application for iOS and Android alongside a React web platform, sharing design standards and reusable components so clinical workflows stay the same when a practitioner moves from a phone at the kennel to a desktop at reception.
One Node.js and Express API surface, typed end to end, enforcing a single contract for both clients. A shared schema validation layer sits here, as do role-based access policies for the different clinical roles.
Each concern stands on its own, so the synchronisation engine, record management, scheduling, billing and diagnostic handling can be tuned or extended without destabilising the rest of the clinical workflow.
PostgreSQL with Prisma holds structured clinical records while MongoDB carries flexible diagnostic metadata, all deployed with Docker on AWS for auto-scaling headroom as clinics and data volumes grow.
Six systems doing the actual work
Not a features list — the specific things we built behind every number above.
A bidirectional system with intelligent conflict resolution lets practitioners create and update records offline, handling concurrent updates, duplicate edits and sync edge cases without compromising data integrity.
Structured data models cover patient histories, prescriptions, SOAP notes and diagnostic imaging, keeping clinical information organised and reachable from both mobile and web.
One experience across iOS, Android and web built on shared design standards and reusable components, so switching device does not mean relearning the workflow.
Google Calendar integration simplifies scheduling and Celero payment integration supports in-clinic billing, connecting appointments, clinical visits and transactions in one workflow. Drag-and-drop scheduling makes daily adjustments straightforward.
Optimised backend services, efficient API handling and auto-scaling deliver reliable performance at peak clinic activity, from a single practice through to a multi-location network.
Practices customise the platform with clinic-specific branding and UI themes, keeping a consistent visual identity while running on shared EHR infrastructure.
What the platform does day to day
Five capabilities, each closing one of the gaps identified above.
| Capability | Runs | Refresh | What it does |
|---|---|---|---|
| Offline-first sync engine | Local-first | On reconnect | Create and update clinical records without connectivity, with automatic bidirectional sync and conflict resolution when the device reconnects |
| Clinical record management | Practitioner | On save | Manage patient histories, prescription logs, SOAP notes, diagnostic imaging and other essential records in one centralised system |
| Cross-platform experience | iOS · Android · web | Continuous | Consistent clinical workflows across devices from a shared data layer and shared design standards |
| Appointment scheduling integration | Clinic staff | Calendar sync | Synchronise appointments with Google Calendar and streamline scheduling, calendar management and staff coordination |
| Reliable data synchronisation | Background | Priority-batched | Keep data consistent across mobile and web through optimised background sync and intelligent reconciliation |
| Secure & scalable infrastructure | AWS | Auto-scaling | Secure access controls and optimised backend services supporting reliable performance as clinics and data volumes grow |
How the moving parts plug in
Scheduling, payments and analytics reach the platform through dedicated adapter layers rather than sitting beside it as separate tools.
External systems
Platform integration layer
CORE SERVICES
Because the adapter layers map external data into the internal EHR structure, a visit, the appointment it came from and the payment it generated are one connected record rather than three systems to reconcile by hand.
What protects patient conversation data
The platform holds patient records, prescriptions and diagnostic material — so protection and traceability were designed in, not bolted on.
Access policies cover the range of clinical roles in a practice, so each user reaches what their role requires without security getting in the way of everyday work.
Veterinary records are encrypted both where they are stored and as they move between clients, the API layer and the databases.
Changes to clinical records are logged in detail, giving practices traceability over who altered what and when across offline and online sessions.
An AWS architecture balancing reliability, scalability and cost efficiency keeps clinical data available when many users reach it at once during busy clinic hours.
How we got there
A research-driven, architecture-first approach that started with how veterinary practitioners actually work rather than a feature list.
Worked closely with veterinary practitioners on day-to-day workflows — prescription logging, patient history, diagnostic imaging and appointment handling — then translated them into practical data models and system requirements.
A dual-database strategy: PostgreSQL for structured clinical records and MongoDB for flexible diagnostic metadata, holding relational integrity for critical medical data while imaging and diagnostic formats keep changing.
A hybrid bidirectional engine with local-first data handling and timestamp-based conflict resolution, reconciling on every reconnection and handling partial failures and conflicting updates.
A shared data contract and a schema validation layer in the Node.js backend kept the Flutter and React clients aligned, catching inconsistencies before they reached the database.
Optimised API patterns and event-driven background sync reduced needless resource and battery use, with comprehensive testing across synchronisation, performance, data integrity and system reliability in everyday clinical scenarios.
What changed for the business
Beyond the headline numbers, three things practices and practitioners noticed first.
Practitioners update records, log prescriptions and complete consultations in low-connectivity settings, which made the platform particularly valuable for rural and field-based clinics.
Patient history, prescriptions, SOAP notes, diagnostics, scheduling and billing moved into a single platform, cutting administrative effort and letting teams work across devices more efficiently.
The scalable AWS infrastructure supports growth from single-practice clinics through to multi-location deployments without a change of platform.
What the engineering choices are worth in operating terms
Every headline number traces back to a specific decision, not a vague platform effect.
| ENGINEERING DECISION | OPERATING OUTCOME | MEASURED EFFECT |
|---|---|---|
| Bidirectional sync with timestamp conflict resolution | Records created offline reconcile correctly on reconnection instead of being re-entered | 97% sync success |
| Event-driven, priority-batched background sync | The mobile app stays responsive and keeps its charge through a full clinic day | 88% better mobile efficiency |
| Unified EHR with calendar and payment adapters | Less manual reconciliation between records, appointments and billing | 43% less admin workload |
| Structured schemas and shared cross-platform contract | Clinical steps complete faster and consistently on any device | 33% faster clinical workflows |
What it's built on
The actual technologies, not feature names with icons attached.
Frontend
- React.js
- Redux Toolkit
- Tailwind CSS
- TypeScript
Mobile & backend
- Flutter
- Node.js
- Express.js
Data & infra
- AWS
- Prisma
- Prisma
- Docker
Integrations
- Google Calendar
- Celero Payments
- Statsig
Get the complete write-up as a PDF
The same content on this page, plus the extended module breakdown and delivery phases, in a single document you can share internally.
- Offline-first sync and data architecture in full
- Discovery-to-launch process, phase by phase
- Clinical data security and access-control decisions
Download the case study
No spam • unsubscribe anytime • we’re here when you need us
Other platform builds