A modern, mobile-friendly web application for pet grooming appointment booking.
- Browse available grooming services
- Book appointments with date/time selection
- Real-time slot availability
- Booking confirmation with details
- Secure login for shop owner
- View all bookings in a dashboard
- Update booking status (Pending → Confirmed → Completed)
- Filter bookings by status
- Stats overview (total, pending, confirmed, completed, cancelled)
- Frontend: React + Vite
- Styling: Tailwind CSS
- Backend: Supabase (Database + Auth)
- Icons: Lucide React
- Date Handling: date-fns
- Notifications: react-hot-toast
cd pet-grooming-booking
npm install- Create a free account at supabase.com
- Create a new project
- Go to SQL Editor and run the contents of
supabase-schema.sql - Go to Settings → API and copy your:
- Project URL
- anon/public key
# Copy the example env file
cp .env.example .env
# Edit .env with your Supabase credentials
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key- Go to Supabase Dashboard → Authentication → Users
- Click Add User
- Enter email and password for the admin
- Use these credentials to login at
/admin
npm run devVisit:
- Customer site:
http://localhost:5173 - Admin login:
http://localhost:5173/admin
pet-grooming-booking/
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── Navbar.jsx
│ │ ├── Footer.jsx
│ │ ├── ServiceCard.jsx
│ │ └── ProtectedRoute.jsx
│ ├── pages/ # Page components
│ │ ├── Home.jsx
│ │ ├── Book.jsx
│ │ ├── AdminLogin.jsx
│ │ └── AdminDashboard.jsx
│ ├── lib/ # Utilities & config
│ │ ├── supabase.js
│ │ ├── constants.js
│ │ └── email.js
│ ├── context/ # React context
│ │ └── AuthContext.jsx
│ ├── App.jsx
│ ├── main.jsx
│ └── index.css
├── supabase-schema.sql # Database schema
├── .env.example # Environment template
└── README.md
Edit src/lib/constants.js to update:
- Shop name and tagline
- Contact information
- Working hours
- Services and pricing
- Time slots
- Colors are defined in
tailwind.config.js - Primary color (orange) and Secondary color (green) can be changed
For email notifications, you can:
- Use Supabase Edge Functions with Resend/SendGrid
- Use a webhook trigger on database insert
- Integrate directly with an email service API
The email templates are in src/lib/email.js.
npm run build
# Deploy the dist folder to Vercelnpm run build
# Deploy the dist folder to NetlifyRemember to add your environment variables in the deployment platform.
MIT