All projects
Full Stack · MedicalTeam projectTeam project

Mawid — Medical Appointment System

A medical appointment system connecting administrators, doctors and patients.

One platform for patients, doctors and admins

Unified booking

JWT authentication with role-based permissions

Secure access

Living OpenAPI docs via drf-spectacular

Documented API

Overview

Mawid is a full-stack medical appointment management platform connecting administrators, doctors and patients — booking, doctor and patient management, authentication, cloud media handling and a documented REST API.

Problem

Medical appointments get booked across phones, paper ledgers and chat messages. Clinics lose time reconciling schedules, patients double-book or miss slots, and doctors have no single view of their day.

Solution

A React SPA over a monolithic Django REST API. Patients book available slots, doctors manage their schedules, and administrators run the practice — backed by PostgreSQL, JWT authentication, Cloudinary for media and drf-spectacular for living API documentation.

My Contribution / Role

Mawid was built as a team project during ITI training. The repository is owned by a team member (Eng-Ayman-Mohamed). Mostafa's work focused on the full-stack engineering documented here — the Django REST backend, JWT authentication, role-based access and the React/TypeScript frontend.

Architecture

How data moves through the system.

Monolithic Django REST API plus a separate React SPA, with external services for media and email.

  1. 01React SPA
  2. 02Django REST API
  3. 03PostgreSQL
  4. 04Cloudinary (media)
  5. 05django-anymail (email)
Technology stack
Django 6Django REST FrameworkJWTReact 18TypeScriptViteTailwind CSS 4Material UIPostgreSQLCloudinarydjango-anymaildrf-spectacularpytestRuff
Key features
  • 01Medical appointment booking
  • 02Doctor management
  • 03Patient management
  • 04Administrative functionality
  • 05JWT authentication
  • 06Cloud media handling (Cloudinary)
  • 07Email notifications (django-anymail)
  • 08API documentation (drf-spectacular)
Engineering outcomes

One platform for patients, doctors and admins

Unified booking

JWT authentication with role-based permissions

Secure access

Living OpenAPI docs via drf-spectacular

Documented API

Uploads handled through Cloudinary

Cloud media

Data Layer

PostgreSQL schema for users (admin, doctor, patient), appointments, schedules and media metadata, managed with Django migrations.

API Layer

Django REST Framework endpoints for appointments, doctors, patients and administration, secured with JWT and documented with drf-spectacular.

Media & Email

Cloudinary handles image and document uploads so the API never stores binary files locally; django-anymail sends transactional email.

Security

JWT authentication and per-role permissions keep patient data isolated between admin, doctor and patient accounts.

Testing

Django tests and pytest for the API, with Ruff for linting and formatting.

Challenges
  • Modelling availability so a doctor's schedule and a patient's booking stay consistent.
  • Enforcing role boundaries between administrators, doctors and patients in one codebase.
  • Keeping media uploads out of the application server while preserving quick load times.
Engineering decisions
  • Authentication and authorisation are the first thing to design, not the last.
  • A documented API is a product feature — drf-spectacular pays for itself immediately.