Open-source healthcare management platform built for African healthcare institutions.
Getting Started · Project Structure · Modules · Contributing · Report Bug
ClinicSync is a modular, offline-first healthcare management platform designed to help clinics, hospitals, laboratories and NGOs across Africa digitize their workflows — even in areas with poor or no internet connectivity.
- Paper-based patient records that get lost or damaged
- Doctors not knowing a patient's allergies before prescribing
- Lab results never reaching the right doctor on time
- No way to track a patient's medication history
- Expensive proprietary healthcare software that small clinics cannot afford
| Layer | Technology |
|---|---|
| Framework | React 18 + Vite |
| Language | TypeScript |
| Styling | Tailwind CSS |
| Components | shadcn/ui |
| Routing | React Router v6 |
| State | Zustand |
| Forms | React Hook Form + Zod |
| HTTP | Axios |
| PWA | Workbox (Phase 4) |
Why React + Vite instead of Next.js? Offline-first capability is a core requirement for African clinic contexts, not a future add-on. React + Vite gives us full PWA and service worker control from day one.
- Node.js 18 or higher
- npm
- Git
1. Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/HeathTech.git
cd HeathTech2. Install dependencies
npm install3. Set up environment variables
cp .env.example .env4. Start the development server
npm run dev5. Open your browser http://localhost:5173
| Folder | Description |
|---|---|
src/components/layout/ |
Sidebar, TopHeader, AuthLayout, DashboardLayout |
src/components/shared/ |
Reusable components used across features |
src/components/ui/ |
shadcn/ui auto-generated components |
src/features/auth/ |
Login, register, auth forms and services |
src/features/patients/ |
Patient registration, profiles, medical history |
src/features/appointments/ |
Scheduling, calendar, queue management |
src/features/laboratory/ |
Test requests, result entry and reports |
src/hooks/ |
Custom React hooks |
src/lib/ |
Axios instance, router, mock data |
src/pages/auth/ |
Login and register page components |
src/pages/dashboard/ |
Role-based dashboard pages |
src/store/ |
Zustand global state (auth store) |
src/types/ |
Global TypeScript interfaces |
src/utils/ |
Helper functions |
Every feature in src/features/ follows the same pattern:
src/features/auth/
├── components/ # UI components for this feature
├── services/ # API calls
├── types/ # Zod schemas and TypeScript types
└── index.ts # Barrel export
| Module | Status | Description |
|---|---|---|
| Authentication | ✅ Done | Login, register, RBAC, route protection |
| Doctor Dashboard | 🚧 In Progress | Appointments, stats, lab results, tasks |
| Patients | 📅 Planned | Registration, profiles, medical history |
| Appointments | 📅 Planned | Scheduling, calendar, queue |
| Laboratory | 📅 Planned | Test requests, results, reports |
| Nurse Dashboard | 📅 Planned | Vitals, ward management |
| Receptionist Dashboard | 📅 Planned | Patient registration, queue |
| Lab Scientist Dashboard | 📅 Planned | Test processing, results |
| Admin Dashboard | 📅 Planned | Staff management, settings |
| PWA / Offline | 🔮 Phase 4 | Service workers, local caching, sync |
| Role | What They Do |
|---|---|
admin |
Full system access — manages staff and settings |
doctor |
Sees patients, writes notes, requests labs, prescribes |
nurse |
Records vitals, assists doctors, manages ward |
lab_technician |
Processes lab requests, enters test results |
receptionist |
Registers patients, books appointments |
npm run dev # Start development server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLintWe welcome contributions from developers of all skill levels! Please read CONTRIBUTING.md before submitting a pull request.
Good first issues are labeled: good first issue and beginner friendly
This project is licensed under the MIT License — see the LICENSE file for details.