L o a d i n g
Back to Portfolio Hospital Management System

VSH Hospital — Website & Staff Portal

A production Django application for Vydehi Superspeciality Hospital, Bengaluru — a public marketing/booking site with Razorpay-backed appointments, running alongside role-based staff dashboards for front desk, HR, media and doctors.

Django 4.2 Django REST Framework Razorpay Zego Video API django-apscheduler

~30

Data Models

~250

Internal API Routes

Razorpay + Zego

Payments & Video Visits

4

Staff Dashboard Roles
Walkthrough

Public Site & Staff Dashboard

Key Features

What The Platform Does

Razorpay-Backed Booking

Patients pick a doctor/slot and pay online, with server-side verification.

Polymorphic Doctor Scheduling

Weekly recurring and one-off slots resolved via a Django ContentType relation.

Video Consultations

Zego API meeting creation/termination generated per appointment.

Role-Based Staff Dashboards

Admin, Front Desk, HR and Media each redirected to their own scoped tools.

Campaign Lead Capture

Specialty Clinic landing pages feed a validated JSON API into the staff dashboard.

N+1 Query Optimization

Bulk-fetching + select_related cut the busiest staff page to a constant handful of queries.

Technology

Stack & Integrations

Frontend
Django Templates Bootstrap jQuery GSAP / Swiper
Backend
Python Django 4.2 Django REST Framework 3.15
Database
SQLite (Postgres-ready)
Integrations
Razorpay Zego Video API Twilio (configured)
Architecture

How It's Built

A single Django project with four apps serves both audiences: core owns the public site and most staff-facing logic, while doctor, hr and team each own a scoped notification feed for their role. Staff routes live under /account/... in the same URLconf, protected by login plus a Summary.role check that redirects each staff member to their own dashboard section — a custom authorization layer built at the application level rather than Django's group/permission framework.

Appointments use a ContentType generic relation so one model can point at either a recurring or a one-off timing slot without duplicating scheduling logic, and fast-moving paid-campaign pages (Specialty Clinic, Home Care) are deliberately kept outside the department CMS so they don't destabilize the core content model. I also found and fixed an N+1 query pattern on the busiest staff page, cutting per-request queries from linear to a constant handful via bulk-fetching and select_related.