Back to Projects
    Full Stack Web App

    Veterinarska Ambulanta

    Veterinarska Ambulanta is a comprehensive clinic management platform designed for veterinary practices. Staff members — veterinarians and assistants — can manage patient animals and their owners, schedule appointments via a visual calendar, generate medical reports, and track treatment history. The system enforces role-based access control with JWT so that only authorized personnel can view or modify sensitive records.

    ReactASP.NET CoreSASSJWTClean Architecture
    Veterinarska Ambulanta

    Tech Stack

    React 19
    React Router DOM
    react-hook-form
    react-big-calendar
    Chart.js
    Axios
    SASS/SCSS
    Vite
    ASP.NET Core
    Clean Architecture
    Entity Framework Core
    JWT Authentication
    Role-Based Access Control
    PostgreSQL
    Docker

    Key Features

    Patient Record Management

    Full CRUD for patient animals with species, breed, age, and owner linkage. A searchable and filterable table gives staff a quick overview of all registered patients.

    Owner Management

    Each patient is linked to an owner with contact details. Staff can navigate directly from a patient record to the owner profile and vice versa.

    Appointment Calendar

    An interactive calendar built with react-big-calendar shows scheduled appointments by day, week, or month. Staff can create, edit, and cancel appointments directly from the calendar view.

    Medical Reports

    Veterinarians can generate structured medical reports tied to specific appointments, documenting diagnosis, treatment, and prescribed medication.

    Role-Based Access Control

    JWT tokens carry role claims (Veterinar / Pomocnik). Protected routes enforce access at the frontend, and controllers enforce it at the API layer, ensuring least-privilege access.

    Analytics Dashboard

    Chart.js-powered charts display appointment trends, patient statistics, and species distribution to give clinic management an at-a-glance overview.

    Challenges & Solutions

    Challenge

    Synchronizing calendar state with backend appointment data

    Solution

    Used react-big-calendar's controlled mode with custom event mapping, fetching appointments on month navigation and optimistically updating the local event list on create/delete to keep the UI responsive.

    Challenge

    Enforcing role-based access on both frontend and backend

    Solution

    Implemented a ProtectedRoute HOC that reads the decoded JWT role claim and redirects unauthorized users, while ASP.NET Core policy-based authorization independently enforces the same rules at the API level.

    Challenge

    Managing complex form validation for patient and appointment creation

    Solution

    Adopted react-hook-form with schema-based validation rules, providing instant inline error feedback without triggering unnecessary re-renders.