A comprehensive veterinary clinic management system that connects pet owners with veterinary clinics and professionals. VetSync streamlines appointment booking, electronic health records (EHR) management, and clinic operations.
- React 19 - UI library
- Vite - Build tool and dev server
- TailwindCSS 4 - Utility-first CSS framework
- React Router 7 - Client-side routing
- Axios - HTTP client
- FullCalendar - Appointment calendar
- Leaflet/React-Leaflet - Interactive maps
- Node.js with Express 5 - REST API server
- PostgreSQL - Relational database
- Sequelize - ORM for database operations
- JWT - Authentication tokens
- Brevo/Nodemailer - Email services
- Google Drive API - File storage
- pdf-lib - PDF generation
- Browse and search veterinary clinics
- View clinic details with location on map
- Book appointments with preferred clinics
- Manage multiple pets
- Access electronic health records (EHR)
- View vaccination history, prescriptions, lab results
- Profile and settings management
- Dashboard with clinic analytics
- Manage clinic information and schedule
- Register and manage veterinary professionals
- View and manage patient records (EHR)
- Handle appointment requests
- Clinic approval workflow (pending/approved/rejected status)
- View and manage assigned appointments
- Access and update patient health records
- Add vaccinations, prescriptions, deworming records
- Record lab results
- Profile management
- System-wide dashboard and analytics
- Manage all registered clinics
- Approve or reject clinic registrations
- User management across all roles
- Audit trail and logs
| Role | Description |
|---|---|
pet_owner |
Pet owners who book appointments and manage their pets |
clinic_admin |
Administrators who manage clinic operations |
vet_professional |
Veterinary professionals who provide medical services |
system_admin |
Platform administrators with full system access |
- Node.js (v18 or higher)
- PostgreSQL (v14 or higher)
- npm or yarn
Create a .env file in the /backend directory:
# Database
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=your_password
DB_DATABASE=vetsync_dev
# JWT
JWT_SECRET=your_jwt_secret
# Email (Brevo)
BREVO_API_KEY=your_brevo_api_key
# Google Drive
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secretCreate a .env file in the /frontend directory:
VITE_BACKEND_URL="http://localhost:4000"
VITE_NODE_ENV="development"- Clone the repository
git clone https://github.com/v1nssvetsync.git
cd vetsync- Install backend dependencies
cd backend
npm install- Install frontend dependencies
cd ../frontend
npm install- Run database migrations
cd ../backend
npm run migrate- Start the development servers
Backend:
cd backend
npm run devFrontend (in a new terminal):
cd frontend
npm run devThe frontend will be available at http://localhost:5173 and the backend API at http://localhost:3000.
| Role | Password | |
|---|---|---|
| Pet Owner | petowner@test.com |
password123 |
| Clinic Admin | clinicadmin@test.com |
password123 |
| Vet Professional | vetpro@test.com |
password123 |
| System Admin | sysadmin@gmail.com |
123456 |
Note: These are placeholder credentials for development/testing purposes. Update with actual seeded accounts.
vetsync/
├── backend/
│ ├── config/ # Database configuration
│ ├── global/ # Shared utilities, middleware, config
│ │ ├── config/ # DB connection, multer, Google Drive
│ │ ├── middleware/ # Auth, audit middleware
│ │ └── utils/ # Helpers (token generation, PDF, Drive)
│ ├── migrations/ # Sequelize migrations
│ └── src/
│ ├── controllers/ # Route handlers
│ ├── models/ # Sequelize models
│ ├── routes/ # API route definitions
│ └── services/ # Business logic
├── frontend/
│ └── src/
│ ├── components/ # Reusable UI components
│ ├── context/ # React context providers
│ ├── global/ # API clients
│ ├── pages/ # Page components by user role
│ └── routes/ # Route configuration
└── README.md
POST /auth/login- User loginPOST /auth/logout- User logoutPOST /auth/refresh-token- Refresh access tokenGET /auth/me- Get current user profile
POST /users/register- Register new user (pet owner or clinic admin)GET /users/:id- Get user by IDPUT /users/update/:id- Update user detailsPUT /users/email-check- Check if email existsPOST /users/vet- Create vet professional (clinic admin only)PATCH /users/vet/:vetId- Update vet professionalGET /users/my-clinic/vets- Get vet professionals for clinic
POST /pets/register- Register a new petGET /pets/- Get current user's petsGET /pets/:pet_id- Get pet by IDPATCH /pets/:pet_id- Update petDELETE /pets/:pet_id- Delete pet
POST /clinics/register- Register new clinic (clinic admin only)PATCH /clinics/update/:clinicId- Update clinic detailsGET /clinics/approved- Get all approved clinicsGET /clinics/search- Search clinicsGET /clinics/public/:clinicId- Get clinic by ID (public)GET /clinics/my-clinic- Get current admin's clinic
POST /appointments/create- Create new appointmentGET /appointments/owner- Get appointments by pet ownerGET /appointments/vet- Get appointments by vet professionalGET /appointments/clinic/:clinicId- Get appointments by clinicPATCH /appointments/approve/:appointmentId- Approve appointmentPATCH /appointments/reject/:appointmentId- Reject appointmentPATCH /appointments/complete/:appointmentId- Mark appointment completeDELETE /appointments/delete/:appointmentId- Delete appointment
POST /ehr/create- Create new health record (vet only)GET /ehr/:ehrId- Get health record by IDGET /ehr/owner/all- Get all EHRs for pet ownerGET /ehr/pet/:petId- Get all EHRs for a specific petGET /ehr/vet/all- Get all EHRs created by vetGET /ehr/clinic/:clinicId- Get all EHRs for clinicPATCH /ehr/:ehrId- Update health recordDELETE /ehr/:ehrId- Delete health recordDELETE /ehr/:ehrId/file/:fileId- Delete file from health record
This project is licensed under the ISC License.