Connect with verified, top-rated tutors for personalized learning sessions β anytime, anywhere.
π Live Demo Β Β·Β π Report Bug Β Β·Β π‘ Request Feature
- About the Project
- Features
- Tech Stack
- Screenshots
- Getting Started
- Environment Variables
- API Endpoints
- Pages & Routes
- Author
- License
TutorBook is a full-stack tutor booking web application that bridges the gap between students and qualified tutors. Students can search, filter, and book verified tutors for one-on-one sessions across 20+ subjects. Tutors can list their profiles, set availability, and manage bookings β all in one place.
π Trusted by 7,500+ learners Β· 200+ verified tutors Β· 14 international awards
- Students can find the right tutor in under 60 seconds using smart search and date filters
- Tutors can manage their listings, slots, and sessions from a dedicated dashboard
- Parents can track session bookings and monitor their child's learning progress
- Email & password sign in / sign up with validation
- Google OAuth one-click login
- Session-based auth powered by BetterAuth
- Protected routes for all dashboard pages
- Real-time search by tutor name or subject (debounced 500ms)
- Date range filter for session start availability
- Responsive tutor card grid with subject badges and slot status
- Loading skeleton cards while fetching data
- Empty state with clear filter option
- Book a session via a clean modal form
- Remaining slot counter (auto-decrements on booking)
- Cancel a booked session with one click
- "Fully Booked" state disables the booking button
- Add new tutors with a rich, multi-section form
- Edit tutor data via slide-over modal
- Delete tutor with AlertDialog confirmation
- Paginated table view of all your listed tutors
- View and edit profile (name + photo URL)
- Avatar with automatic fallback initials
- Quick navigation links to dashboard pages
- π Light & Dark mode via next-themes
- π± Fully responsive β mobile, tablet, desktop
- Animated 3-slide hero carousel (Swiper.js with autoplay)
- Toast notifications via react-hot-toast
- Custom 404 Not Found page
- Global Error boundary page with retry button
- Sticky frosted-glass navbar with blur effect
| Category | Technology |
|---|---|
| Framework | Next.js 16 β App Router, Server Components |
| UI Library | React 19 |
| Styling | Tailwind CSS v4 |
| Component Library | HeroUI v3 β Modal, Drawer, Table, Select |
| Authentication | BetterAuth v1 + MongoDB Adapter |
| Slider / Carousel | Swiper.js v12 |
| Icons | @gravity-ui/icons + Iconify |
| Styled Buttons | styled-components v6 |
| Lottie Animations | @lottiefiles/dotlottie-react |
| Notifications | react-hot-toast |
| Theme Switching | next-themes |
| Token Handling | jsonwebtoken |
| Deployment | Vercel |
π‘ Visit the live demo: tutor-booking-client.vercel.app
| Page | Description |
|---|---|
| π Homepage | 3-slide hero, stats bar, tutor cards, features grid, CTA banner |
| π Tutors Page | Real-time search + date filter, skeleton loading, empty state |
| π Tutor Details | Full profile with info rows, booking modal with slot counter |
| β Add Tutor | Multi-section form β Basic Info + Session Details |
| π My Tutors | Data table with edit modal + delete confirmation |
| π Booked Sessions | Session table with status badges and cancel action |
| π€ Profile | Avatar, info rows, edit profile modal |
| π Login / Signup | Auth forms with Google OAuth, password toggle, validation |
- Node.js
v18+ - npm
v9+ - A running backend server (Express + MongoDB)
# 1. Clone the repository
git clone https://github.com/yourusername/tutor-booking-client.git
# 2. Move into the project folder
cd tutor-booking-client
# 3. Install all dependencies
npm install
# 4. Copy the env example and fill in your values
cp .env.example .env.local
# 5. Start the development server
npm run devOpen http://localhost:3000 in your browser. β
| Script | Description |
|---|---|
npm run dev |
Start the development server |
npm run build |
Create a production build |
npm run start |
Start the production server |
npm run lint |
Run ESLint checks |
Create a .env.local file in the root and populate it:
# ββ Backend API ββββββββββββββββββββββββββββββ
NEXT_PUBLIC_SERVER_URL=http://localhost:5000
# ββ BetterAuth βββββββββββββββββββββββββββββββ
BETTER_AUTH_SECRET=your_better_auth_secret_here
BETTER_AUTH_URL=http://localhost:3000
# ββ Google OAuth βββββββββββββββββββββββββββββ
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# ββ MongoDB ββββββββββββββββββββββββββββββββββ
MONGODB_URI=your_mongodb_connection_string
β οΈ Never commit.env.localto version control. It is listed in.gitignoreby default.
The client communicates with a custom REST API backend:
| Method | Endpoint | Description |
|---|---|---|
GET |
/tutors |
Fetch all tutors β supports ?search, ?startDate, ?endDate |
GET |
/tutors/:id |
Fetch a single tutor by ID |
POST |
/tutors |
Create a new tutor listing |
PATCH |
/tutors/:id |
Book a session β decrements remainingSlots |
GET |
/tutorsFeatures |
Fetch featured tutors for homepage |
GET |
/myTutors/:userId |
Fetch tutors created by a specific user |
PATCH |
/myTutor/:id |
Update tutor details |
DELETE |
/myTutor/:id |
Permanently delete a tutor |
GET |
/tutorBookedData |
Fetch all booked sessions |
PATCH |
/tutorBookedData/:id |
Cancel a booked session |
| Route | Page | Protected |
|---|---|---|
/ |
Homepage | β Public |
/tutors |
All Tutors (search + filter) | β Public |
/tutors/[id] |
Tutor Details + Book Session | β Public |
/login |
Login | β Public |
/signup |
Signup | β Public |
/about |
Testimonials | β Public |
/services |
FAQ | β Public |
/contact |
Contact Form | β Public |
/addTutor |
Add New Tutor | β Auth Required |
/myTutors |
Manage My Tutors | β Auth Required |
/bookedSessions |
My Booked Sessions | β Auth Required |
/profile |
User Profile | β Auth Required |
Contributions, issues and feature requests are welcome!
- Fork the repository
- Create your feature branch β
git checkout -b feature/AmazingFeature - Commit your changes β
git commit -m 'Add AmazingFeature' - Push to the branch β
git push origin feature/AmazingFeature - Open a Pull Request
This project is licensed under the MIT License β see the LICENSE file for details.