A modern, full-stack appointment scheduling web application built with Next.js, TypeScript, and Prisma.
- Multiple Roles and Access Levels (RBAC) - Two user roles: Patient and Provider with separate dashboards
- User Authentication - Secure login and signup with NextAuth.js
- Appointment Management - Create, view, reschedule, and cancel appointments
- Scheduling Logic - Schedule conflict detection and availability management
- Modern UI - Responsive user experience with Tailwind CSS
- Framework: Next.js
- Language: TypeScript
- Database: SQLite (with Prisma)
- Authentication: NextAuth.js
- Styling: Tailwind CSS
- UI Components: React + Custom components
- Node.js 18+ and npm
- Install dependencies:
npm install- Set up environment variables:
cp .env.example .envEdit .env and set:
DATABASE_URL="file:./prisma/dev.db"NEXTAUTH_URL="http://localhost:3000"NEXTAUTH_SECRET(generate a random secret withopenssl rand -base64 32)
- Set up the database:
npm run db:push
npm run db:seed- Run the dev server:
npm run dev- Open http://localhost:3000.
You can use this login info to test:
Provider:
- Email:
doc@clinico.com - Password:
doc123 - Name: John Doe
Patient:
- Email:
patient@clinico.com - Password:
patient123 - Name: Brook Khoo
- Sign up / sign in
- Browse appointment types -> pick provider (or first available)
- View available slots -> book
- View calendar and upcoming/past appointments
- Reschedule/cancel
- Sign in -> see calendar view and appointment list
- Set weekly availability
- View upcoming/past appointments and patient count
- Mark appointment completed/no-show -> add notes
- User: User accounts with authentication and roles (PATIENT, PROVIDER)
- Appointment: Scheduled appointments with time slots, status, and notes
- AppointmentType: Configurable appointment types with duration and pricing
- Availability: Weekly availability settings per provider
npm run db:push- Push schema changes to databasenpm run db:generate- Generate Prisma clientnpm run db:studio- Open Prisma Studionpm run db:seed- Seed database with demo datanpm run db:reset- Reset database and reseed