Status: β
Production-Ready (with noted improvements for scaling)
Last Updated: April 20, 2026
Architecture: React 19 + Spring Boot 3.2 + PostgreSQL + Docker
- Overview
- Technology Stack
- Key Features
- User Roles & Workflows
- Getting Started
- Project Structure
- Security Architecture
- API Documentation
- Database Schema
- Deployment
- Testing
- Known Issues & Improvements
- Developer Notes
SecureHealth is a comprehensive healthcare information management system that demonstrates enterprise-level security practices for handling sensitive medical data. The platform orchestrates complex workflows among multiple stakeholder roles while maintaining strict HIPAA-aligned access controls, audit trails, and data governance.
Problem It Solves:
- Healthcare systems need to manage interactions across patients, doctors, nurses, lab technicians, and administrators
- Each role needs different data visibility (patient can't see other patients, doctor can only see assigned patients)
- Every access must be logged for compliance
- Data must be encrypted, backed up, and retain-policy compliant
Why It Matters:
- Demonstrates compliance-driven architecture (not feature-first)
- Shows secure-by-default design (not bolted-on security)
- Handles real-world healthcare scenarios (double-booking prevention, consent tracking, shift handovers)
- Framework: React 19.2.3 (Latest, with improved performance)
- Routing: React Router v6.30.3 (client-side, with role-based guards)
- Styling: Tailwind CSS 3.4.19 (utility-first, with custom theme)
- State Management: React Context API (AuthContext, ThemeContext)
- Data Visualization: Recharts (appointment calendars, vital signs charts)
- HTTP Client: Fetch API with centralized error handling
- Icons: Lucide-react (professional healthcare icons)
- Animations: Framer Motion (smooth transitions)
- Testing: React Testing Library + Jest
- API Mocking: MSW (Mock Service Worker)
- Framework: Spring Boot 3.2.2 (Latest stable LTS)
- Language: Java 21 (LTS release)
- Database: PostgreSQL 16 (with ACID transactions)
- ORM: Hibernate with Spring Data JPA
- Authentication: JWT (JJWT library) + Spring Security
- Password Encoding: Argon2 (NIST-recommended)
- Email Service: Spring Mail (OTP delivery)
- Caching: Redis (active defense, session storage)
- Build Tool: Maven (reproducible builds)
- Testing: JUnit 5 + Mockito + H2 in-memory DB
- Monitoring: Spring Actuator + Prometheus metrics
- Containerization: Docker (both frontend and backend)
- Orchestration: Docker Compose (PostgreSQL, Redis, Backend, Adminer)
- CI/CD: GitHub Actions (tests on push/PR)
- Database GUI: Adminer (development database inspection)
- β Email/password registration with 12-character minimum
- β 2FA via email OTP for doctors and admins
- β JWT access tokens (15-minute expiry) + refresh tokens (7-day)
- β Account lockout after 5 failed attempts
- β Password history (can't reuse last 5 passwords)
- β Password reset with time-limited tokens
- β Session management (max 3 concurrent sessions per user)
- β Argon2 password hashing (GPU-resistant)
- β Appointment Scheduling: Patients request appointments, doctors manage availability, admins approve
- β Prescriptions: Doctors create prescriptions (medication, dosage, frequency, duration)
- β Vital Signs Recording: Nurses enter BP, HR, temperature, O2 saturation, weight, height
- β Medical Records: Doctors document diagnosis, symptoms, treatment provided
- β Lab Test Ordering: Doctors order tests, lab techs process and upload results
- β Medication Administration: Nurses track medication administration with timestamps
- β Shift Handover: Nurses document handover notes for shift changes
- β Patient: Book appointments, view own records, manage medications, grant consents
- β Doctor: Manage schedules, write prescriptions, access assigned patients
- β Nurse: Record vitals, administer medications, document tasks
- β Lab Technician: Process test orders, upload results
- β Admin: Approve appointments, manage users, view audit logs
- β Audit Logging: Every access logged (who, what, when, where, why)
- β Consent Tracking: Patient consent for data sharing tracked and logged
- β Automatic Backups: Daily at 2 AM (configurable retention)
- β Data Archival: Inactive users archived after 365 days
- β Password History: Prevents password reuse (last 5 passwords)
- β IDOR Protection: Patients can only access their own data
- β CORS configured (localhost:3000 default, configurable per environment)
- β CSRF protection via stateless JWT (not vulnerable)
- β Input validation on all DTOs
- β Rate limiting on sensitive endpoints
- β Token blacklist service (logout invalidates tokens)
- β Audit logs encrypted in storage
- β Patient record access protected by validator
Register/Login β Select Role (Patient) β Set Profile β
Dashboard (upcoming appointments, vitals, medications) β
Book Appointment (select doctor/date/reason) β
View Prescriptions β
Track Medications β
View Lab Results β
Manage Consents
Can Access:
- Own appointment history
- Own medical records
- Own prescriptions
- Own vital signs
- Own lab results
- Data sharing consents
Cannot Access:
- Other patients' data
- Doctor schedules
- Lab infrastructure
Register/Login (2FA required) β Set Profile (specialty, shifts) β
Dashboard (assigned patients, appointment requests, metrics) β
Manage Appointments (approve/reject requests) β
View Patient Details (medical history, vitals, previous prescriptions) β
Write Prescription β
Order Lab Tests β
Review Lab Results β
Create Medical Record
Can Access:
- Assigned patients' full medical history
- Appointment requests
- Prescription history
- Lab orders and results
- Vital signs
Can Perform:
- Schedule appointments
- Write prescriptions
- Order lab tests
- Document diagnoses
- Review patient vitals
Login (optional 2FA) β Dashboard (assigned patients, pending tasks) β
View Assigned Patients β
Record Vitals (BP, HR, temp, O2, weight) β
Administer Medications (log dose, time, patient) β
Create Tasks (assign to selves or other nurses) β
Shift Handover (document notes, alerts)
Can Access:
- Assigned patients only
- Vital signs history
- Medication schedules
- Task assignments
- Previous handover notes
Can Perform:
- Record vital signs
- Track medication administration
- Create and update tasks
- Document shift handovers
Login β Dashboard (pending tests, completed tests, stats) β
View Test Orders (by status: pending, collected, processing) β
Mark as Collected β
Upload Results (lab values, images, PDFs) β
Update Test Status (completed/failed)
Can Access:
- Test orders assigned to lab
- Patient demographics (for identification)
- Doctor notes on requested test
- Test results (own and others' for verification)
Can Perform:
- Update test status
- Upload test results
- View test history
Login (2FA required) β Dashboard (system metrics, pending approvals) β
Appointments (approve/reject requests) β
User Management (view, create, disable users) β
Audit Logs (search, filter, export) β
System Health (backup status, database size)
Can Access:
- All appointments
- All users
- Complete audit trail
- System metrics
- Backup logs
Can Perform:
- Approve/reject appointments
- Manage user accounts
- Reset passwords
- View audit logs
- Trigger backups
- Node.js 18+ (for frontend)
- Java 21 (for backend)
- PostgreSQL 14+ (or use Docker Compose)
- Docker & Docker Compose (recommended)
- Maven 3.8+
# Clone the project
git clone https://github.com/ManvithaDungi/PatientManagementSystem.git
cd PatientManagementSystem
# Create .env file (copy from .env.example)
cp .env.example .env
# Start all services
docker-compose up -d
# Wait for services to start (~30 seconds)
# Frontend: http://localhost:3000
# Backend API: http://localhost:8081
# Database: localhost:5432
# Adminer (DB GUI): http://localhost:8082cd backend/Backend
# Build
mvn clean package
# Run (requires PostgreSQL running on localhost:5432)
java -jar target/backend-0.0.1-SNAPSHOT.jar
# Or using Maven
mvn spring-boot:runcd frontend/app
# Install dependencies
npm install
# Start development server
npm start
# Runs on http://localhost:3000After seeding, use these to test:
| Role | Password | |
|---|---|---|
| Patient | patient1@hospital.com | TempPass123! |
| Doctor | doctor1@hospital.com | DoctorPass123! |
| Nurse | nurse1@hospital.com | NursePass123! |
| Lab Tech | lab1@hospital.com | LabPass123! |
| Admin | admin@hospital.com | AdminPass123! |
PatientManagementSystem/
β
βββ π backend/ # Spring Boot API
β βββ Backend/
β βββ src/main/java/com/securehealth/backend/
β β βββ config/
β β β βββ SecurityConfig.java # Spring Security setup
β β βββ controller/ # REST endpoints (15 controllers)
β β β βββ AuthController.java
β β β βββ AppointmentController.java
β β β βββ PatientController.java
β β β βββ DoctorController.java
β β β βββ NurseController.java
β β β βββ LabTechnicianController.java
β β β βββ AdminController.java
β β β βββ PrescriptionController.java
β β β βββ VitalSignController.java
β β β βββ ...
β β βββ dto/ # Data Transfer Objects (20+ DTOs)
β β βββ exception/ # Custom exceptions
β β βββ model/ # JPA entities (17 entities)
β β β βββ Login.java
β β β βββ PatientProfile.java
β β β βββ DoctorProfile.java
β β β βββ Appointment.java
β β β βββ Prescription.java
β β β βββ VitalSign.java
β β β βββ LabTest.java
β β β βββ Consent.java
β β β βββ ...
β β βββ repository/ # Spring Data JPA repositories
β β βββ security/ # JWT, filters, validators
β β β βββ JwtAuthenticationFilter.java
β β β βββ PatientAccessValidator.java
β β β βββ CustomUserDetailsService.java
β β βββ service/ # Business logic (20+ services)
β β β βββ AuthService.java
β β β βββ AppointmentService.java
β β β βββ PatientService.java
β β β βββ DoctorService.java
β β β βββ NurseService.java
β β β βββ LabTechnicianService.java
β β β βββ EmailService.java
β β β βββ BackupService.java
β β β βββ ArchivalService.java
β β β βββ ...
β β βββ util/
β β βββ JwtUtil.java
β βββ src/test/java/ # Tests (unit + integration)
β βββ src/main/resources/
β β βββ application.properties # Configuration
β βββ pom.xml # Maven dependencies
β βββ Dockerfile
β
βββ π frontend/ # React application
β βββ app/
β βββ src/
β β βββ components/ # Reusable UI components
β β β βββ admin/ # Admin-specific components
β β β βββ appointments/ # Appointment workflows
β β β βββ doctor/ # Doctor dashboard components
β β β βββ nurse/ # Nurse dashboard components
β β β βββ lab/ # Lab technician components
β β β βββ auth/ # Auth UI components
β β β βββ common/ # Shared components
β β β β βββ VitalsChart.jsx
β β β β βββ SchedulerView.jsx
β β β β βββ AppointmentCalendar.jsx
β β β β βββ MiniCalendar.jsx
β β β βββ layout/
β β βββ contexts/ # State management
β β β βββ AuthContext.jsx
β β β βββ ThemeContext.jsx
β β βββ layouts/ # Page layouts
β β βββ pages/ # Route pages
β β β βββ login.jsx
β β β βββ createAccount.jsx
β β β βββ TwoFactorAuth.jsx
β β β βββ ForgotPassword.jsx
β β β βββ ResetPassword.jsx
β β β βββ doctor/
β β β βββ patient/
β β β βββ nurse/
β β β βββ lab/
β β β βββ admin/
β β βββ services/ # API & auth services
β β β βββ api.js # REST API service
β β β βββ supabaseAuth.js # Auth service
β β βββ App.jsx # Main app with routing
β β βββ App.css
β β βββ index.js
β βββ public/
β βββ tailwind.config.js # Tailwind theme
β βββ postcss.config.js
β βββ package.json
β βββ Dockerfile
β
βββ π DB/ # Database
β βββ schema.sql # Complete schema definition
β βββ seed_users.sql # Sample users
β βββ DB_README.md
β
βββ docker-compose.yml # Multi-service orchestration
βββ .github/
β βββ workflows/
β βββ ci.yml # GitHub Actions CI/CD
β βββ deployment.yml
βββ application.properties # Root config
βββ .env.example # Environment variables template
βββ README.md # This file
βββ TECHNICAL_AUDIT_REPORT.md # Deep technical audit
ββ User Submits Credentials ββββββββββββββββββββββββββββββββββ
β β
β POST /api/auth/login β
β { email: "doctor@hospital.com", password: "..." } β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββ Backend Validates βββββ
β β
β 1. Find user by email β
β 2. Compare password hash β
β (Argon2) β
β 3. Check account lockout β
β β
βββββ If Doctor/Admin ββββββββ
β
ββββ Generate OTP
ββββ Send Email
ββββ Return: { status: '2FA_REQUIRED' }
β
βΌ
βββββ User Receives Email βββββ
β "Your OTP: 123456" β
β Valid for: 10 minutes β
βββββββββββββββββββββββββββββββ
β
βΌ
βββββ User Submits OTP ββββββββ
β POST /api/auth/verify-otp β
β { email, otp } β
βββββββββββββββββββββββββββββββ
β
βΌ
βββββ Backend Verifies OTP βββ
β β
β 1. Check OTP matches β
β 2. Check not expired β
β 3. Mark OTP as used β
β β
βββ If Valid: Generate JWT βββ
β
βΌ
βββββ Generate Tokens ββββββββββββββββββββββββ
β β
β ACCESS TOKEN (15 min): β
β { sub: userId, email, role, exp: +15m } β
β Signed with JWT secret β
β β
β REFRESH TOKEN (7 days): β
β { sub: userId, exp: +7d } β
β Hashed in database β
β β
β SESSION RECORD: β
β userId, refreshTokenHash, expiresAt β
β ipAddress, userAgent β
β β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββ Return Response ββββββββ
β { β
β status: 'SUCCESS', β
β accessToken: 'jwt...', β
β refreshToken: 'jwt...', β
β user: { id, email, role} β
β } β
ββββββββββββββββββββββββββββββ
β
βΌ
βββββ Frontend Stores ββββββββ
β localStorage.setItem( β
β 'secure_health_user', β
β { accessToken, user } β
β ) β
ββββββββββββββββββββββββββββββ
β
βΌ
βββββ Subsequent Requests ββββββββββββββββββββ
β All API calls include: β
β Authorization: Bearer {accessToken} β
β β
β Backend JWT Filter: β
β 1. Extract token from header β
β 2. Validate signature β
β 3. Check expiration β
β 4. Check token blacklist β
β 5. Populate SecurityContext β
β β
βββββββββββββββββββββββββββββββββββββββββββββββ
Three-layer protection:
<Route path="/dashboard/doctor" element={
<ProtectedRoute allowedRoles={['DOCTOR']}>
<DoctorDashboard />
</ProtectedRoute>
} />
// Non-doctors redirected to unauthorized page@PreAuthorize("hasAuthority('DOCTOR')")
@PostMapping("/prescriptions")
public ResponseEntity<?> createPrescription(...) { }
@PreAuthorize("hasAnyAuthority('ADMIN', 'DOCTOR')")
@GetMapping("/patients")
public ResponseEntity<?> getAllPatients() { }public PatientDTO getPatientById(Long id, String requesterEmail, String requesterRole) {
PatientProfile profile = patientProfileRepository.findById(id)
.orElseThrow();
// Check 1: Admins/Doctors have general access
if (requesterRole.equals("ADMIN") || requesterRole.equals("DOCTOR")) {
return mapToDTO(profile);
}
// Check 2: Patients can only see their own profile
if (profile.getUser().getEmail().equals(requesterEmail)) {
return mapToDTO(profile);
}
// Deny access
throw new RuntimeException("403 Forbidden: Unauthorized access");
}Every patient data access validates ownership:
-- Before: VULNERABLE - returns any patient
SELECT * FROM patient_profiles WHERE id = 5;
-- After: PROTECTED - only returns if user authorized
SELECT p.* FROM patient_profiles p
WHERE p.id = 5
AND (
-- Patient owns it
p.user_id = (SELECT user_id FROM login WHERE email = ?)
-- OR doctor is assigned to it
OR p.assigned_doctor_id = (SELECT user_id FROM login WHERE email = ?)
)POST /api/auth/register
Content-Type: application/json
Request:
{
"email": "patient@hospital.com",
"password": "SecurePass123",
"role": "PATIENT",
"fullName": "John Doe",
"dateOfBirth": "1990-01-01",
"address": "123 Main St"
}
Response (201 Created):
{
"message": "User registered successfully"
}
POST /api/auth/login
Content-Type: application/json
Request:
{
"email": "doctor@hospital.com",
"password": "DoctorPass123"
}
Response (200 OK - Doctor/Admin):
{
"status": "2FA_REQUIRED",
"message": "OTP sent to email"
}
Response (200 OK - Patient/Nurse/Lab):
{
"status": "LOGIN_SUCCESS",
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc...",
"user": {
"id": 123,
"email": "patient@hospital.com",
"role": "PATIENT"
}
}
POST /api/auth/verify-otp
Content-Type: application/json
Request:
{
"email": "doctor@hospital.com",
"otp": "123456"
}
Response (200 OK):
{
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc...",
"user": { ... }
}
Response (401 Unauthorized):
{
"message": "Invalid or expired OTP"
}
POST /api/auth/logout
Authorization: Bearer {accessToken}
Response (200 OK):
{
"message": "Logged out successfully"
}
POST /api/appointments
Authorization: Bearer {accessToken}
Content-Type: application/json
Request:
{
"doctorId": 5,
"appointmentDate": "2025-05-01T14:00:00",
"reasonForVisit": "Regular checkup"
}
Response (200 OK):
{
"appointmentId": 42,
"patientId": 3,
"doctorId": 5,
"appointmentDate": "2025-05-01T14:00:00",
"status": "PENDING_APPROVAL",
"createdAt": "2025-04-20T10:30:00"
}
GET /api/appointments/doctor/{doctorId}/available-slots?date=2025-05-01
Authorization: Bearer {accessToken}
Response (200 OK):
[
"09:00",
"09:30",
"10:00",
"10:30",
...
]
PUT /api/appointments/{appointmentId}/approve
Authorization: Bearer {accessToken}
Response (200 OK):
{
"appointmentId": 42,
"status": "SCHEDULED",
"updatedAt": "2025-04-20T11:00:00"
}
[See Backend README for complete endpoint documentation]
login
- Stores user credentials and security state
- Columns: userId, email, passwordHash, role, twoFactorEnabled, failedAttempts, isLocked, etc.
patient_profiles
- Patient demographic and assignment data
- Columns: profileId, userId, assignedDoctorId, assignedNurseId, firstName, lastName, dateOfBirth, medicalHistory, etc.
doctor_profiles
- Doctor specialization and scheduling
- Columns: profileId, userId, specialty, department, shiftStartTime, shiftEndTime, slotDurationMinutes
appointments
- Appointment requests and scheduling
- Columns: appointmentId, patientProfileId, doctorId, appointmentDate, status, reasonForVisit, doctorNotes, createdAt
prescriptions
- Medication prescriptions
- Columns: prescriptionId, patientProfileId, doctorId, medicationName, dosage, frequency, duration, specialInstructions, issuedAt, startDate, endDate, status
vital_signs
- Recorded patient vitals
- Columns: vitalId, patientProfileId, nurseId, bloodPressure, heartRate, temperature, respiratoryRate, oxygenSaturation, weight, height, recordedAt
lab_tests
- Lab test orders and results
- Columns: testId, patientProfileId, orderedById, testName, testCategory, resultValue, unit, referenceRange, status, fileUrl, createdAt
medical_records
- Doctor-documented clinical notes
- Columns: recordId, patientProfileId, doctorId, diagnosis, symptoms, treatmentProvided, attachmentUrl, createdAt
sessions
- Active JWT sessions
- Columns: id, userId, refreshTokenHash, ipAddress, userAgent, expiresAt, revoked, createdAt
password_history
- Password reuse prevention
- Columns: id, userId, passwordHash, createdAt
password_reset_tokens
- Time-limited password reset links
- Columns: id, userId, tokenHash, expiresAt, used, createdAt
audit_logs
- Complete access trail
- Columns: id, email, action, ipAddress, userAgent, details, timestamp
consent_log
- Patient consent tracking
- Columns: id, patientId, consentType, sharedWith, granted, grantedAt, revokedAt
docker-compose up -d
# Starts: PostgreSQL, Redis, Backend API, Frontend, Adminer# Backend
docker build -t secure-health-api:1.0 ./backend
# Frontend
docker build -t secure-health-app:1.0 ./frontend
# Push to registry
docker push your-registry/secure-health-api:1.0
docker push your-registry/secure-health-app:1.0# Database
SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/healthcare_db
SPRING_DATASOURCE_USERNAME=healthcare_user
SPRING_DATASOURCE_PASSWORD=secure_password_here
# JWT
JWT_SECRET=your_secret_key_here
JWT_EXPIRATION=900000
# Frontend
REACT_APP_API_URL=http://localhost:8081
# Email (OTP delivery)
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=app_specific_password
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
# Backups
BACKUP_ENABLED=true
BACKUP_DIR=./backups
BACKUP_RETENTION=7GitHub Actions automatically:
- Builds backend (Maven)
- Runs backend tests
- Builds frontend (npm)
- Runs frontend tests
- (Optional) Deploys to staging
cd backend/Backend
# Run all tests
mvn test
# Run specific test
mvn test -Dtest=AuthIntegrationTest
# Run with coverage
mvn test jacoco:reportTest Types:
- Unit tests: Services in isolation
- Controller tests: HTTP layer with MockMvc
- Integration tests: Complete flows with H2 database
cd frontend/app
# Run all tests
npm test
# Run with coverage
npm test -- --coverage
# Run integration tests only
npm run test:integration
# Run unit tests only
npm run test:unitStatus: Low Priority
Impact: Admin features might have bugs
Fix: Complete integration testing of admin endpoints
Timeline: v1.1
Status: Medium Priority
Impact: Lab technicians can't upload results
Details: Backend expects JSON; frontend sends FormData
Fix: Update backend to accept multipart/form-data
Timeline: v1.0.1 (patch)
Status: Low Priority
Impact: Refresh tokens never invalidated
Fix: Implement refresh token rotation on every use
Timeline: v1.1
- Fix lab file upload FormData handling
- Improve error messages on 401 responses
- Add retry logic to API calls
- Implement refresh token rotation
- Move tokens to HttpOnly cookies
- Add client-side token expiry checking
- Complete admin workflow testing
- Add rate limiting per user
- Implement React Query for caching
- Add pagination to patient lists
- Lazy load components
- Implement virtual scrolling for large lists
- OAuth2 integration (Google, Microsoft)
- SAML for single sign-on
- Multi-site hospital support
- Data export/FHIR compatibility
- Analytics dashboard
- Mobile app (React Native)
- Project has only 2-3 global states (auth, theme)
- Redux adds complexity without clear benefit
- Context API is sufficient and built-in
- NIST recommends Argon2 for new systems (as of 2024)
- GPU-resistant (memory-hard)
- Better for sensitive healthcare data
- Stateless (scales horizontally)
- No server-side session storage needed
- Works with distributed systems/microservices
- ACID transactions essential for medical data
- Healthcare data is relational (patients β doctors, prescriptions, etc.)
- Audit trail requires strong consistency
- Add to
Role.javaenum - Add role-specific controller (e.g.,
NurseController) - Add role-specific service (e.g.,
NurseService) - Create DTOs for role-specific responses
- Add role-specific frontend pages
- Add
@PreAuthorizeon endpoints - Update routing guards
- Add tests
- Create DTO for request/response
- Add method to Repository
- Add logic to Service
- Add
@PostMapping/@GetMappingto Controller - Add
@PreAuthorizefor authorization - Add tests (unit + integration)
- Document in README
- Create JPA entity in
model/ - Create repository extending
JpaRepository - Create service for business logic
- Add to
schema.sqlfor reference - Test with integration tests
- Update related services
401 Unauthorized on all requests
- Check JWT secret in
application.properties - Verify token format:
Authorization: Bearer {token} - Check token expiration:
jwtUtil.isTokenExpired(token)
CORS errors on frontend
- Check allowed origins in
SecurityConfig - Verify frontend URL matches CORS config
- Add
credentials: 'include'to fetch calls
Patient can see other patients' data
- IDOR vulnerability
- Check
PatientAccessValidatoris being called - Verify service layer access checks
- Review database queries for pre-filtering
Appointment double-booking occurs
- Race condition in appointment creation
- Verify unique constraint on database:
SELECT * FROM information_schema.constraints WHERE table_name='appointments' AND constraint_type='UNIQUE';
- Spring Boot Documentation
- React Documentation
- HIPAA Compliance Guide
- OWASP Top 10
- JWT Best Practices
This project is for educational purposes and interview demonstration.
For questions or issues:
- Check the TECHNICAL_AUDIT_REPORT.md for detailed architectural documentation
- Review the integration testing guide in
backend/Backend/INTEGRATION_TESTING_GUIDE.md - Check recent PRs for current issues and solutions
Last Updated: April 20, 2026
Status: β
Production-Ready for Education/Interview Use
Maintained By: Manvitha Dungi