CASS is a clinic appointment scheduling web application built as an academic team project. It is designed to help patients, doctors, and administrators manage appointment booking, schedules, patient records, and clinic communication more clearly.
This repository forms part of my GitHub student portfolio for bursaries, internships, graduate programmes, and future Honours opportunities.
The system supports role-based workflows for:
- Patients booking and managing appointments.
- Doctors managing schedules, availability, and patient records.
- Administrators managing users and clinic-level information.
- Notifications and appointment communication through Supabase functions.
This was completed as an academic team project. The repository represents combined team work across frontend pages, UI components, Supabase integration, authentication, database migrations, appointment workflows, notifications, and documentation.
I include this project in my portfolio as evidence of collaborative software development, exposure to full-stack project integration, and experience working with a database-backed healthcare scheduling system.
It should not be read as a claim that I personally built every feature in the system.
Clinic appointment systems need to reduce booking confusion, improve schedule visibility, and help different users access the right information. This project explores those ideas through a student-level web application with patient, doctor, and admin roles.
- User authentication.
- Patient, doctor, and admin roles.
- Appointment booking.
- Doctor schedule and availability views.
- Patient records and medical record views.
- User profile management.
- Notification settings.
- Supabase database migrations.
- Supabase Edge Functions for notification workflows.
- Responsive React interface using reusable UI components.
| Area | Technologies |
|---|---|
| Frontend | React, TypeScript, Vite |
| UI | Tailwind CSS, shadcn/ui, Radix UI |
| Routing | React Router |
| Backend / Database | Supabase, PostgreSQL, Row Level Security |
| Forms / Validation | React Hook Form, Zod |
| State / Data | TanStack Query |
| Tooling | npm, ESLint, Git, GitHub |
Clinic-Appointment-System/
├── public/ Static assets
├── src/
│ ├── components/ Reusable UI, auth, dashboard, records, layout components
│ ├── hooks/ Authentication and shared React hooks
│ ├── integrations/ Supabase client and generated database types
│ ├── lib/ Utility functions
│ ├── pages/ Main route pages
│ ├── App.tsx Application routes
│ └── main.tsx React entry point
├── supabase/
│ ├── functions/ Notification-related Edge Functions
│ └── migrations/ Database schema and policy migrations
├── .env.example Placeholder environment variable template
├── package.json
└── README.md
This project uses a local .env file for Supabase configuration. A placeholder .env.example file is included so the required variable names are visible without committing real values.
VITE_SUPABASE_PROJECT_ID=your_supabase_project_id
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY=your_supabase_publishable_keyReal .env values should never be committed to GitHub. The local .env file is ignored by .gitignore.
- Node.js 18+
- npm
- Supabase project access, if running against a real backend
npm installCreate a local .env file from .env.example:
copy .env.example .envThen fill in your own Supabase project values.
npm run devThe Vite dev server is configured in vite.config.ts.
Screenshots will be added after the interface is reviewed and cleaned.
| Screen | Status |
|---|---|
| Landing / home page | To be added |
| Authentication page | To be added |
| Patient dashboard | To be added |
| Doctor dashboard | To be added |
| Admin dashboard | To be added |
| Appointment booking | To be added |
| Patient records | To be added |
- How role-based applications are structured.
- How React routes and reusable components support a larger application.
- How Supabase can provide authentication, database storage, migrations, and serverless functions.
- How database policies and relationships matter in healthcare-style systems.
- How important it is to separate real environment values from public source code.
- How to improve an academic project for a more professional portfolio.
- Keeping role-based access understandable across patients, doctors, and admins.
- Managing Supabase configuration safely.
- Working with generated database types and migrations.
- Keeping the repository clean after template-generated setup.
- Presenting team project work honestly without overstating individual authorship.
- Remove or replace remaining template metadata.
- Rename the package from the starter template name.
- Add screenshots and a short demo walkthrough.
- Add clearer test/demo accounts if appropriate.
- Add basic tests for important workflows.
- Improve README accuracy as cleanup continues.
- Review UI and responsiveness before publishing/pinning.
This project was built for learning purposes as part of an academic team project. It is presented as a student portfolio project to show collaborative software development, database-backed application design, and full-stack learning.
It should not be read as a claim that I personally built every feature in the system.