Skip to content
All projectsDomain application

Veterinary Clinic System

A clinic-management backend for veterinary practices: patients, owners, appointments, and records.

Role

Backend developer — team of 4

Stack

Go, Iris, PostgreSQL, Redis

Language

Go

Repository

Link pending

Problem

Clinic operations — linking animals to owners, scheduling visits without conflicts, and keeping accurate treatment history — are hard to manage in ad-hoc tools. The system had to model those relationships faithfully.

Solution

The backend of a clinic management system built as a modular monolith in Go with Iris: clients with animal patients, appointment scheduling, visit records, and treatment history.

My contribution

Implemented the backend with a modular-monolith architecture in Golang with Iris. Built the PostgreSQL data layer with Redis caching and containerized all services with Docker.

Architecture

A modular monolith: domain modules (clients, scheduling, records) behind one deployable, with a relational schema centered on the owner–patient relationship. Redis caches hot lookups; visits reference patient, doctor, and time slots; treatment records attach to visits.

Core domain model
 owner ──< patient ──< visit ──< treatment
                      │
                      └── time-slot (doctor, start, end)
                          └─ conflicts rejected by service + DB constraints

Overview

The system models a veterinary clinic: owners register with their animal patients, appointments are scheduled for visits, and each visit accumulates treatment records that form the patient's medical history.

Requirements

Core requirements:

  • Owners can have multiple animal patients of different species.
  • Appointments reference patient, time slot, and attending doctor.
  • No two appointments may occupy the same doctor's time slot.
  • Visit history for a patient must be queryable as a timeline.

Technical Decisions

Scheduling safety is enforced twice: the service layer validates availability before accepting an appointment, and the database schema adds constraints that make double-booking structurally impossible. Defense in depth keeps scheduling correct even if a validation check regresses.

Results

A complete domain model and backend that mirrors how a small clinic actually operates, built end-to-end in Go and PostgreSQL.

The hard part

Appointment scheduling without conflicts: the schema and service layer together have to prevent double-booking a time slot while keeping a day's schedule fast to read.

A decision worth noting

Chose a modular monolith over microservices for a team of 4 — module boundaries keep the code organized while avoiding distributed-systems overhead. Enforced scheduling rules in the service layer backed by database constraints.

Outcome

A working clinic-management backend demonstrating relational modeling, caching, and rule enforcement in a real-world domain (Jun 2025 – May 2026).