Medical Doctor Appointment app built with ASP.NET MVC (C#) and SQLite.


ItemDetails
Project TitleDoctor Appointment – ASP.NET MVC (C#) + SQLite
One-line SummaryWeb app to browse doctors, view availability, and book/reschedule/cancel appointments with email/SMS-style notifications and role-based access.
Tech StackFrontend: Razor Views, Bootstrap/Tailwind, jQuery/Fetch • Backend: ASP.NET MVC 5/ASP.NET Core MVC, C# • ORM: Entity Framework (Core) • DB: SQLite • Auth: ASP.NET Identity • Build/Deploy: dotnet CLI, IIS/Kestrel
Core FeaturesPatient self-service booking • Doctor schedule management (time slots, breaks, vacations) • Reschedule/cancel with policy windows • Specialty & location filtering • Appointment states (Pending/Confirmed/Completed/Cancelled/No-show) • Email notifications (e.g., SMTP/SendGrid-ready) • Admin panel (users, doctors, specialties, reports).
Roles & PermissionsPatient: register, manage profile, book/reschedule/cancel, view history • Doctor: manage availability, confirm/complete visits, notes • Admin: CRUD on doctors, specialties, clinics, users; view reports & audit.
Data Model (SQLite)User(Id, Email, PasswordHash, Role) • Patient(Id, UserId, Name, DOB, Phone) • Doctor(Id, UserId, Name, SpecialtyId, ClinicId, Bio) • Specialty(Id, Name) • Clinic(Id, Name, Address, TimeZone) • AvailabilitySlot(Id, DoctorId, StartUtc, EndUtc, IsRecurring, RecurrenceRule) • Appointment(Id, PatientId, DoctorId, StartUtc, EndUtc, Status, Reason, Notes, CreatedAtUtc) • AuditLog(Id, UserId, Action, Entity, EntityId, TimestampUtc).
Scheduling LogicGenerates “bookable” slots from AvailabilitySlot minus overlaps (existing appointments, breaks, vacations). Enforces buffer times, clinic hours, lead/cancel windows, and prevents double-booking with DB transactions + unique index on (DoctorId, StartUtc).
Controllers (Examples)DoctorsController (index, details, search) • AppointmentsController (create, confirm, reschedule, cancel, my-appointments) • AvailabilityController (CRUD for doctors) • AdminController (users, doctors, specialties, reports).
Example RoutesGET /doctors?specialty=cardiology&city=…GET /doctors/{id}GET /appointments/new?doctorId=&date=POST /appointmentsPOST /appointments/{id}/reschedulePOST /appointments/{id}/cancelGET /account/login
Validation & UXClient + server validation (DataAnnotations) • Disabled past dates • Time-zone aware date pickers • Conflict checks on submit • Toasts for success/errors • Accessible forms & keyboard navigation.
SecurityASP.NET Identity with salted hashes • Role-based authorization ([Authorize(Roles=…)]) • Anti-forgery tokens • Parameterized queries via EF • Output encoding to prevent XSS • Audit logging for admin/doctor actions.
NotificationsOn create/reschedule/cancel: send confirmation emails (templated) and calendar .ics attachment; optional reminder (e.g., 24h before).
ReportsDaily/weekly appointments by doctor/clinic • No-show rate • Utilization of time slots • Export CSV.
PerformanceSQLite with indexes on Appointment(DoctorId, StartUtc), AvailabilitySlot(DoctorId, StartUtc) • Async EF calls • Pagination on listings • Caching static lookups (Specialties).
TestingUnit tests for scheduling & conflicts • Integration tests for booking flow • In-memory SQLite for tests • UI smoke tests (Playwright/Selenium optional).
Setup (Dev)dotnet new mvc → add EF Core + SQLite packages → dotnet ef migrations add Initdotnet ef database updatedotnet run. Seed admin, sample doctors, specialties.
Stretch GoalsPatient intake forms & file uploads • Telemedicine meeting links • Insurance/billing codes • Waitlist & auto-fill cancellations • Doctor-defined appointment types (durations).


Subscribe to our Newsletter!

Scroll to Top