A simple and easy-to-use web application for managing hospital appointments, patients, doctors, and departments.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Web Browser β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β HTML β β CSS β β JavaScript β β Bootstrap 5 β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTP/HTTPS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SERVER LAYER (Node.js) β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Express.js Server β β
β β (server.js) β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ β
β β MIDDLEWARE LAYER β β
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β Helmet β β CORS β β Rate β β JWT β β Auth β β β
β β β Security β β Policy β β Limiter β β Verify β βMiddlewareβ β β
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ β
β β API ROUTES β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β /api/ β β /api/ β β /api/ β β /api/ β β β
β β β departments β β patients β β doctors β βappointments β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β βββββββββββββββ β β
β β β /api/ β β β
β β β auth β β β
β β βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββ β
β β MODELS LAYER β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β Department β β Patient β β Doctor β β Appointment β β β
β β β Model β β Model β β Model β β Model β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β βββββββββββββββ β β
β β β User β β β
β β β Model β β β
β β βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β SQL Queries
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE LAYER β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PostgreSQL Database β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β β departments β β patients β β doctors β βappointments β β β
β β βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ β β
β β βββββββββββββββ β β
β β β users β β β
β β βββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β User ββββββΆβ Frontend ββββββΆβ Routes ββββββΆβ Models ββββββΆβ Database β
β Browser βββββββ (HTML/ βββββββ (API βββββββ (Query βββββββ(PostgreSQLβ
β β β JS) β β Handlers)β β Builder) β β β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β β
β ββββββββββββββ΄βββββββββββββ
β β Middleware β
β β β’ Authentication β
β β β’ Rate Limiting β
β β β’ Security Headers β
β βββββββββββββββββββββββββββ
This system helps hospitals manage:
- π Appointments - Schedule, view, update, and cancel patient appointments
- π₯ Patients - Add and manage patient information
- π¨ββοΈ Doctors - Manage doctor profiles and their departments
- π’ Departments - Organize doctors by medical departments
- π User Authentication - Secure login and registration system
| Category | Technology |
|---|---|
| Backend | Node.js, Express.js |
| Database | PostgreSQL |
| Frontend | HTML, CSS, JavaScript, Bootstrap 5 |
| Security | JWT Authentication, Helmet, Rate Limiting |
hospital-appointment/
βββ server.js # Main server file
βββ package.json # Dependencies and scripts
βββ .env # Environment variables (you create this)
βββ database/ # SQL files for database setup
βββ middleware/ # Authentication middleware
βββ models/ # Database models
βββ public/ # Frontend files (HTML, CSS, JS)
βββ routes/ # API routes
βββ scripts/ # Utility scripts
βββ tests/ # Test files
Download and install Node.js from nodejs.org
Download and install PostgreSQL from postgresql.org
git clone <your-repo-url>
cd hospital-appointmentnpm install- Open pgAdmin or psql terminal
- Create a new database:
CREATE DATABASE hospital_appointment;
- Run the SQL file to create tables:
psql -U your_username -d hospital_appointment -f database/hospital_appointment_pg.sql
- (Optional) Create user authentication table:
psql -U your_username -d hospital_appointment -f database/create_users_table.sql
Create a file named .env in the root folder with:
# Database Settings
DB_HOST=localhost
DB_PORT=5432
DB_USER=your_postgres_username
DB_PASSWORD=your_postgres_password
DB_NAME=hospital_appointment
# Server Settings
PORT=3000
# Security (generate a random string for JWT_SECRET)
JWT_SECRET=your_secret_key_here
JWT_EXPIRES_IN=24hFor Development (auto-restart on changes):
npm run devFor Production:
npm startGo to: http://localhost:3000
- View summary of appointments, patients, and doctors
- Quick overview of today's schedule
- Add new patients with name, phone, and email
- View all registered patients
- Edit or delete patient records
- Add doctors and assign them to departments
- View all doctors and their specialties
- Manage doctor information
- Schedule new appointments
- Select patient, doctor, date, and time
- View, update, or cancel appointments
- Check appointment conflicts automatically
- Manage departments
- User settings and preferences
| Method | Endpoint | Description |
|---|---|---|
| Departments | ||
| GET | /api/departments |
Get all departments |
| POST | /api/departments |
Create new department |
| PUT | /api/departments/:id |
Update department |
| DELETE | /api/departments/:id |
Delete department |
| Patients | ||
| GET | /api/patients |
Get all patients |
| POST | /api/patients |
Add new patient |
| PUT | /api/patients/:id |
Update patient |
| DELETE | /api/patients/:id |
Delete patient |
| Doctors | ||
| GET | /api/doctors |
Get all doctors |
| POST | /api/doctors |
Add new doctor |
| PUT | /api/doctors/:id |
Update doctor |
| DELETE | /api/doctors/:id |
Delete doctor |
| Appointments | ||
| GET | /api/appointments |
Get all appointments |
| POST | /api/appointments |
Create appointment |
| PUT | /api/appointments/:id |
Update appointment |
| DELETE | /api/appointments/:id |
Cancel appointment |
| Authentication | ||
| POST | /api/auth/register |
Register new user |
| POST | /api/auth/login |
Login user |
npm test| Command | What it does |
|---|---|
npm start |
Start the server |
npm run dev |
Start with auto-reload (development) |
npm test |
Run tests |
npm run lint |
Check code quality |
npm run format |
Format code automatically |
- Password Hashing - Passwords are encrypted using bcrypt
- JWT Tokens - Secure authentication tokens
- Rate Limiting - Prevents too many requests (100 per 15 minutes)
- Helmet - Adds security headers
- CORS - Controls which websites can access the API
| Table | Purpose |
|---|---|
departments |
Hospital departments (Cardiology, Pediatrics, etc.) |
patients |
Patient information (name, phone, email) |
doctors |
Doctor profiles linked to departments |
appointments |
Scheduled appointments with status |
users |
User accounts for login |
- Make sure PostgreSQL is running
- Check your
.envfile has correct database credentials
- Change
PORTin.envfile to another number (e.g., 3001)
- Make sure you created the
.envfile - Copy from
.env.exampleif available
- Fork the repository
- Create a new branch (
git checkout -b feature/your-feature) - Make your changes
- Commit (
git commit -m 'Add some feature') - Push (
git push origin feature/your-feature) - Open a Pull Request
ISC License
If you have questions or run into issues:
- Check the "Common Issues" section above
- Look at existing issues in the repository
- Create a new issue with details about your problem
Made with β€οΈ for better healthcare management