Modern fullβstack healthcare management platform providing appointment scheduling, patient records, administrative analytics, and secure role-based access.
- π― Project Overview
- π Key Capabilities
- β¨ Features
- π οΈ Tech Stack
- π¦ Prerequisites
- π Installation & Setup
- π§ͺ Testing
- π³ Docker Deployment
- βοΈ Configuration
- π CI/CD
- π‘οΈ Security
MediWay unifies patient, doctor and admin experiences into a single system:
- Streamlined appointment booking & availability management
- Secure medical record storage and retrieval
- Real-time reporting & operational insights
- Containerized deployment (Docker / Compose)
- CI workflow (GitHub Actions) with backend & frontend test automation + coverage
- Appointment Management: Intelligent slot validation prevents double booking (application-level conflict detection, extensible to optimistic locking)
- Patient Records: Complete visit & diagnosis history with controlled access
- Administrative Dashboard: Aggregated KPIs, doctor load, cancellations, specialization stats
- Role-Based Security: Distinct flows for patients, doctors, and admins (separate login paths)
- Exportable Reports: PDF & CSV generation (OpenPDF)
- QR Code Integration: Fast patient identification via ZXing
- Doctor Availability & 30βminute time slots
- Conflict Prevention: Checks existing appointments before persistence
- Status Lifecycle:
PENDING β CONFIRMED/REJECTED β CANCELLED - Reschedule & Cancellation endpoints
- Extensible for future concurrency strategies (optimistic/pessimistic locking)
- Rich Profile Data: Core identity & emergency contacts
- Medical Records CRUD: Diagnoses, treatments, notes
- QR Code Generation for quick retrieval
- Secure Access Boundaries (service layer separation & profile scoping)
- Workload Analytics: Appointments per doctor per day
- Demographics & Registration Trends
- Specialization & cancellation summaries
- Export: Oneβclick PDF or CSV downloads
graph LR
A[React SPA<br/>nginx] -->|REST API| B[Spring Boot<br/>Java 17]
B -->|JPA/Hibernate| C[(MySQL/H2)]
B -->|Generate| D[Reports<br/>PDF/CSV]
B -->|Create| E[QR Codes<br/>ZXing]
- Node.js β₯ 18.x
- Java 17 (Temurin recommended)
- Docker Desktop for container-based workflow
- Maven wrapper included (
./mvnw)
The fastest way to run the entire application:
# Clone the repository
git clone https://github.com/Y3S1-WE20/Medi.Way.git
cd Medi.Way
# Start all services with Docker Compose
docker-compose up --build
# Access the application
# Frontend: http://localhost:3000
# Backend API: http://localhost:8080
# MySQL: localhost:3306git clone https://github.com/Y3S1-WE20/Medi.Way.git
cd Medi.Waycd frontend
npm install
npm start # http://localhost:3000In another terminal:
cd backend
./mvnw spring-boot:run # http://localhost:8080Note: Backend will use H2 in-memory database by default. For MySQL, configure
application.propertiesor use Docker setup. By default expects MySQL; for tests / light dev switch to H2 by exporting:
export SPRING_PROFILES_ACTIVE=testcd backend
./mvnw testπ Coverage report generated at backend/target/site/jacoco/index.html
cd frontend
npm test -- --watchAll=falseBuild & run all services (MySQL + backend + frontend):
docker compose up --build| Service | URL | Port |
|---|---|---|
| π¨ Frontend | http://localhost:3000 | 3000 |
| βοΈ Backend | http://localhost:8080 | 8080 |
| ποΈ MySQL | localhost:3306 | 3306 |
docker compose downdocker compose down -v| Variable | Purpose | Example |
|---|---|---|
π§ SPRING_PROFILES_ACTIVE |
Choose profile (test uses H2) |
test |
ποΈ SPRING_DATASOURCE_URL |
JDBC URL when using MySQL | jdbc:mysql://db:3306/mediway |
π REACT_APP_API_BASE_URL |
Frontend build-time API base | http://localhost:8080 |
β JAVA_OPTS |
JVM tuning flags | -Xms256m -Xmx512m |
Automated Pipeline includes:
- β Backend: Maven build + tests + JaCoCo coverage artifact
- β Frontend: Install, lint (optional), tests, build artifact
- β Combined summary job for status aggregation
Security Features:
- π Separate login routes for Admin, Doctor, and Patient
- π Password hashing via Spring Security Crypto
- π― Role-based access control (RBAC)
- π Expandable for JWT/session authentication