A comprehensive dental clinic management system built with Laravel 11
- About
- Features
- Tech Stack
- Prerequisites
- Installation
- Configuration
- Database Setup
- Running the Application
- Project Structure
- Key Features Documentation
- Payment Integration
- Firebase Integration
- Dev Tunnel Setup
- API Endpoints
- Testing
- Troubleshooting
- Contributing
- License
Robles Moncayo Dental Clinic (RMDC) Management System is a full-featured web application designed to streamline dental clinic operations. It provides comprehensive appointment management, patient records, inventory tracking, payment processing, and real-time notifications.
- Main Clinic: Unit F Medina Bldg, Niog Elementary School, Bacoor, Cavite
- Operating Hours: Mon-Sat: 7:00 AM - 2:00 PM
- Branch Clinic: Marigold corner Hyacinth Sts, F E De Castro Village, Bacoor, Cavite
- Operating Hours: Mon-Sat: 3:00 PM - 8:00 PM | Sunday: 1:00 PM - 8:00 PM
- β User registration and authentication (email + Google/Facebook OAuth)
- β Online appointment booking with calendar view
- β 25% down payment system (GCash, PayMaya, Card) via PayMongo
- β 20% refund if appointment is declined by admin
- β Double-booking prevention (one pending/accepted appointment at a time)
- β Real-time appointment status tracking
- β Digital teeth layout visualization
- β Dental records management
- β Service feedback and ratings
- β In-app messaging with admin (MongoDB-backed)
- β Notification bell with refund and status updates
- β Appointment history, cancellation, and reschedule requests
- β Comprehensive admin dashboard
- β Appointment management (Accept/Decline with automatic refund)
- β Separate Cancellation Requests page and Reschedule Requests page
- β Patient records management
- β Inventory tracking system
- β Procedure pricing management
- β Revenue and analytics reports
- β Real-time notifications via Pusher
- β Review and feedback moderation
- β Modern minimalist design
- β Responsive layout (mobile, tablet, desktop)
- β Smooth scroll animations
- β Interactive service cards with expandable descriptions
- β Click-toggled OAuth security tooltip on login
- β Modal-based interactions
- β AJAX pagination
- β Real-time search and filters
- Framework: Laravel 11.9
- PHP: 8.2+
- Database: MySQL 8.0
- Authentication: Laravel Breeze
- Real-time: Pusher / Laravel Echo
- Cache: Redis (optional)
- Queue: Database/Redis
- File Storage: Local/S3 compatible
- CSS Framework: Tailwind CSS 3.x
- JavaScript: Vanilla JS + jQuery
- Build Tool: Vite 5.x
- Maps: Leaflet.js
- Icons: Font Awesome 6.4
- Fonts: Google Fonts (Poppins)
- Payment: PayMongo API (GCash, PayMaya, Card)
- AI Chatbot: Groq API (llama-3.3-70b-versatile)
- Messaging: MongoDB Atlas (messages only)
- Real-time: Pusher (appointment status & messaging)
- OAuth: Google + Facebook Login (Laravel Socialite)
- Captcha: mews/captcha
- Image Processing: Intervention Image
Before you begin, ensure you have the following installed:
- PHP >= 8.2 (Download)
- Composer >= 2.6 (Download)
- Node.js >= 18.x and npm (Download)
- MySQL >= 8.0 or MariaDB (Download)
- Git (Download)
Optional:
- Redis for caching and queues
- VS Code with PHP and Laravel extensions
git clone https://github.com/LeeDev428/rmdc_dental-clinic-management-system.git
cd rmdc_dental-clinic-management-systemcomposer installnpm install# Copy environment file
copy .env.example .env # Windows
# OR
cp .env.example .env # Linux/Mac
# Generate application key
php artisan key:generateOpen .env and update the following:
APP_NAME="RMDC Dental Clinic"
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rmdc_dental
DB_USERNAME=root
DB_PASSWORD=your_password
# Firebase (See OAUTH_SETUP_GUIDE.md)
FIREBASE_CREDENTIALS=path/to/firebase-credentials.json
# Pusher (Real-time notifications)
PUSHER_APP_ID=your_app_id
PUSHER_APP_KEY=your_app_key
PUSHER_APP_SECRET=your_app_secret
PUSHER_APP_CLUSTER=your_cluster
# Mail (Optional)
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password
MAIL_ENCRYPTION=tls
# Payment (See PAYMONGO_IMPLEMENTATION_GUIDE.md)
PAYMONGO_PUBLIC_KEY=pk_test_xxx
PAYMONGO_SECRET_KEY=sk_test_xxx
# Google OAuth (See OAUTH_SETUP_GUIDE.md)
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT=http://localhost:8000/auth/google/callback
# Captcha
RECAPTCHA_SITE_KEY=your_site_key
RECAPTCHA_SECRET_KEY=your_secret_keyCREATE DATABASE rmdc_dental CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;# Run all migrations
php artisan migrate
# OR run fresh with seeders (includes sample data)
php artisan migrate:fresh --seedphp artisan storage:linkSee PROCEDURE_IMAGES_GUIDE.md for detailed instructions on setting up procedure images.
# Create procedures directory
New-Item -ItemType Directory -Path "storage\app\public\procedures" -Force
# Copy placeholder images (if available)php artisan serve
# Access at http://localhost:8000npm run devphp artisan queue:work# Build frontend assets
npm run build
# Clear caches
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
# Optimize
php artisan config:cache
php artisan route:cache
php artisan view:cachermdc_dental-clinic-management-system/
βββ app/
β βββ Http/
β β βββ Controllers/ # All controllers
β β β βββ AdminAppointment.php
β β β βββ AppointmentController.php
β β β βββ WelcomeController.php
β β β βββ ...
β β βββ Middleware/ # Custom middleware
β β βββ Requests/ # Form requests
β βββ Models/ # Eloquent models
β β βββ Appointment.php
β β βββ User.php
β β βββ DentalRecord.php
β β βββ ...
β βββ Events/ # Event classes
β βββ Notifications/ # Notification classes
β βββ Providers/ # Service providers
βββ database/
β βββ migrations/ # Database migrations
β βββ seeders/ # Database seeders
β βββ factories/ # Model factories
βββ resources/
β βββ views/ # Blade templates
β β βββ welcome.blade.php # Landing page
β β βββ dashboard.blade.php # User dashboard
β β βββ admin/ # Admin views
β β βββ partials/ # Reusable components
β βββ css/ # Stylesheets
β βββ js/ # JavaScript files
βββ routes/
β βββ web.php # Web routes
β βββ auth.php # Authentication routes
β βββ console.php # Artisan commands
βββ public/
β βββ img/ # Public images
β βββ css/ # Compiled CSS
β βββ js/ # Compiled JavaScript
β βββ storage/ # Symlinked storage
βββ storage/
β βββ app/
β β βββ public/ # User uploaded files
β β βββ procedures/ # Procedure images
β β βββ avatars/ # User avatars
β β βββ valid_ids/ # ID uploads
β βββ logs/ # Application logs
βββ tests/ # PHPUnit tests
User Flow:
- Browse services on welcome page
- Click "Book Appointment" button
- Fill appointment modal with:
- Procedure selection
- Date and time
- Valid ID upload
- Select payment method (optional 20% down payment)
- Submit and wait for admin approval
Admin Flow:
- View pending appointments
- Click "Details" button to see full information
- Accept or decline with reason
- System sends notification to patient
Key Files:
app/Http/Controllers/AppointmentController.phpresources/views/appointments.blade.phpresources/views/admin/upcoming_appointments.blade.php
The system supports 3 payment methods:
- GCash: E-wallet payment
- PayMaya: E-wallet payment
- Card: Visa/Mastercard
Implementation:
- See
PAYMONGO_IMPLEMENTATION_GUIDE.mdfor PayMongo setup - 20% down payment calculated automatically
- Remaining balance tracked in database
- Payment status:
unpaid,partially_paid,fully_paid
Firebase Push Notifications:
- Real-time appointment status updates
- Admin messages
- Feedback reminders
Setup:
- See
OAUTH_SETUP_GUIDE.mdfor Firebase setup - Configure
FIREBASE_CREDENTIALSin.env - Enable FCM in Firebase Console
Interactive SVG-based teeth layout visualization:
- 32 adult teeth representation
- Color-coded status (healthy, cavity, missing, etc.)
- Quadrant-based organization
- Click-to-select functionality
Key Files:
resources/views/dashboard.blade.php(view layout button)- JavaScript SVG generation logic
For remote access and testing with friends, see DEV_TUNNEL_SETUP.md.
Quick Start:
# 1. Add to .env
VITE_HMR_HOST=your-tunnel-url.devtunnels.ms
# 2. Start servers
npm run dev
php artisan serve --host=0.0.0.0
# 3. Create VS Code tunnel (F1 > Dev Tunnels: Turn on)GET / # Welcome page
GET /get-services # Fetch services (AJAX pagination)
POST /appointments # Create appointment
GET /appointments # View appointments (auth required)
GET /admin/dashboard # Admin dashboard
GET /admin/upcoming-appointments
GET /admin/appointments/{id}/details # Get appointment details (AJAX)
POST /admin/appointment/{id}/accept
POST /admin/appointment/{id}/decline
GET /admin/reviews # View ratings/feedback
GET /admin/inventory # Inventory management
GET /dashboard # User dashboard
POST /appointments/cancel # Cancel appointment
POST /feedback/submit # Submit service feedback
GET /messages # View admin messages
# Run all tests
php artisan test
# Run specific test
php artisan test --filter AppointmentTest
# With coverage
php artisan test --coveragephp artisan storage:link
# Verify public/storage symlink exists- Ensure jQuery is loaded before custom scripts
- Check
welcome.blade.phphas jQuery CDN link
npm run build
php artisan config:clear- Check
.envdatabase credentials - Verify MySQL service is running
- Test connection:
php artisan migrate:status
- Verify Pusher credentials in
.env - Check browser console for connection errors
- Enable Pusher in
config/broadcasting.php
- See
PAYMONGO_IMPLEMENTATION_GUIDE.md - Verify API keys (test vs production)
- Check PayMongo dashboard for webhook logs
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload
npm run buildContributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow PSR-12 coding standards
- Use meaningful variable and function names
- Add comments for complex logic
- Write tests for new features
This project is open-sourced software licensed under the MIT license.
Developed by: LeeDev428
Repository: github.com/LeeDev428/rmdc_dental-clinic-management-system
For support, please:
- Open an issue on GitHub
- Check existing documentation files:
OAUTH_SETUP_GUIDE.mdPAYMONGO_IMPLEMENTATION_GUIDE.mdDEV_TUNNEL_SETUP.mdPROCEDURE_IMAGES_GUIDE.md
- Laravel Framework Team
- Tailwind CSS Team
- All open-source contributors
Made with β€οΈ for Robles Moncayo Dental Clinic
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the Laravel documentation.
In order to ensure that the Laravel community is welcoming to all, please review and abide by the Code of Conduct.
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via taylor@laravel.com. All security vulnerabilities will be promptly addressed.
The Laravel framework is open-sourced software licensed under the MIT license.