DoctorOnCall is a full-stack web app template for clinic-style doctor appointment booking, built with a React front end and an Express/TypeScript API, where patients book visits, doctors manage schedules and prescriptions, and admins oversee the entire system.
What is DoctorOnCall?
DoctorOnCall is an open-source full-stack web application template for online doctor appointments, created by Ujjal Zaman and published on GitHub under the repository name Doctor-Appointment. It takes patient, doctor, and admin interactions as input and outputs a complete booking, scheduling, prescription, invoicing, and administration workflow. The frontend runs on React with Redux Toolkit, Ant Design, React Router, and Axios; the backend is a Node.js + Express + TypeScript API using Prisma as the ORM, and the database is PostgreSQL (configurable to run on Supabase's hosted Postgres). The project includes a live demo deployed on Netlify.
Key Features
- Three-role system — Patients sign up and log in to manage favourites, appointments, invoices, and prescriptions; doctors get a dashboard for appointments, patients, schedule, prescriptions, reviews, blogs, and profile settings; admins get a separate area with stats and management of appointments, doctors, patients, specialties, reviews, and transactions.
- Appointment tracking — Each booking is issued a tracking ID that patients can use to follow the status of their visit without logging in (implied by "track appointment with ID").
- Demo admin accounts — Admins can be flagged with isDemo in the database to allow read-only browsing of all data; the API blocks create, update, and delete operations for those accounts.
- Email flows — Password resets and notifications are sent through Gmail when an app password is configured via the EMAIL_PASS variable.
- Image hosting with Cloudinary — Profile and content images are uploaded and served through Cloudinary using the CLOUND_NAME, API_KEY, and API_SECRET environment variables.
- Modern React UI — The interface uses Ant Design components and Redux Toolkit state management, with pages for home, about, services, blog, contact, doctor search and filter, and booking.
- Structured API — The backend is organized under an /api/v1/auth route structure, with environment variables for local and live backend URLs.
- PostgreSQL via Supabase — The Prisma schema lives in api/prisma/schema.prisma, and the setup guide walks through connecting to a Supabase project using either the session mode (port 5432) or transaction pooler (port 6543) connection string.
Who is it for?
- Patients — People who want a no-developer way to browse doctors, book a convenient time, and later retrieve invoices and prescriptions from a personal dashboard.
- Doctors — Practitioners who need to manage their available hours, see who booked them, write prescriptions, and keep a professional profile without building custom software.
- Admins and clinic staff — Operators who need a single overview of doctors, patients, appointments, reviews, and transactions, and who may want an isDemo read-only account for safe client or employer demos.
- Developers and students — People learning full-stack development who want a real React + Express + TypeScript + Prisma codebase to study, extend, or use as a portfolio project.
What can you do with DoctorOnCall?
- Clinic or practice — Set up a public site where patients search and filter doctors by specialty, book time slots, and receive a tracking ID for each appointment.
- Doctor management — Allow doctors to sign up with email verification, set their available hours, manage reviews, and issue prescriptions and invoices from their dashboard.
- Admin oversight — Use the admin area to view dashboard statistics and manage every entity (appointments, doctors, patients, specialties, reviews, transactions) from one place.
- Learning and demos — Run the full stack locally by following the README steps, or deploy the frontend to Netlify and connect it to a Supabase-backed API for a real clinical booking demo.
How does DoctorOnCall work?
The project is split into a React app in the root and an Express API in the api/ directory. After cloning, you create a Supabase project, copy the PostgreSQL URI into api/.env as DATABASE_URL, then run npm install, npx prisma generate, and either npx prisma db push or npx prisma migrate dev to sync the schema. Start the API with npm run dev (default port 5050), set REACT_APP_API_BASE_URL in the root .env to http://localhost:5050, and run npm start to launch the frontend on http://localhost:3000. Admin accounts are created directly in the database by setting role = admin (or isDemo = true for read-only access) rather than through the sign-up form.
FAQ
Is DoctorOnCall free?
The repository is shared publicly on GitHub for learning and portfolio use. The README does not state a price or commercial license, and the author invites collaboration through the website and email. The code and setup are fully available for anyone to clone, run, and modify.
What do I need to run DoctorOnCall locally?
You need Node.js (LTS), a Supabase account or any PostgreSQL database, and optionally Gmail and Cloudinary accounts for email and image features. No global install of Prisma or TypeScript is required because the setup uses npx.
How do I create an admin account?
Admin accounts are not created from the sign-up form. You add a row to the Auth table in the database with the role set to admin and a hashed password matching how the app stores passwords, or you set isDemo to true to create a read-only admin that cannot change data through the API.
What database does DoctorOnCall use?
The schema is defined in api/prisma/schema.prisma and targets PostgreSQL. The setup guide uses Supabase as the hosted provider, and you choose between the session-mode connection string (port 5432) or the transaction pooler (port 6543), adding ?sslmode=require if needed.




