Academeet is a modern, real-time faculty consultation scheduling platform that connects university students with professors. Students can browse available consultation windows, book time slots, and manage their appointments — while professors can create consultation windows, track bookings, and manage their schedules from a dedicated dashboard.
🔗 Live Demo: academeet-snowy.vercel.app
- 📅 Interactive Calendar — Browse available consultation windows on a full-size calendar (desktop) or a responsive mobile calendar with topic dot indicators
- ⚡ Real-time Updates — Slots update live via Supabase Realtime; no refresh needed
- 📝 Booking Management — Book slots, edit agendas, and cancel appointments
- 🔔 Notification Bell — Persistent inbox that alerts students when a professor cancels their appointment, with dismissible notifications stored in local storage
- 🎨 Category Filtering — Filter by consultation topics (General, Thesis, Practicum, Capstone, etc.)
- 📱 Fully Responsive — Optimized layout for desktop, tablet, and mobile
- 🗓️ Consultation Window Creator — Set date, time range, slot duration, and topic for consultation blocks
- 📊 Appointment Grid — View upcoming and past appointments with student details
- ❌ Cancellation with Reason — Cancel booked appointments with a reason that gets logged and pushed to the student's notification inbox
- 🗑️ Granular Deletion — Delete individual slots or entire empty consultation windows
- ✏️ Edit Windows — Modify existing consultation window details
- ⏱️ Live Expiration — Slots automatically move from "Upcoming" to "Past" in real-time
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Server Components, Server Actions) |
| Language | TypeScript 5 |
| Styling | Tailwind CSS 4 |
| UI Components | shadcn/ui + Radix UI |
| Icons | Lucide React |
| Backend / Auth | Supabase (PostgreSQL, Auth, Realtime, RLS) |
| Forms | React Hook Form + Zod |
| Dates | date-fns |
| Notifications | Sonner (toast) + Custom Notification Bell |
| Deployment | Vercel |
- Node.js 18+
- A Supabase project with the required tables and RLS policies
git clone https://github.com/marc-techdev/Academeet.git
cd Academeetnpm installCreate a .env.local file in the project root:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-herenpm run devOpen http://localhost:3000 to view the app.
src/
├── app/ # Next.js App Router pages & server actions
│ ├── (auth)/ # Login & Signup routes
│ ├── student/dashboard/ # Student dashboard (server component + actions)
│ └── professor/dashboard/# Professor dashboard (server component + actions)
├── components/
│ ├── student/ # Student-specific components
│ │ ├── StudentDashboardLayout.tsx # Main responsive calendar layout
│ │ ├── BookingDialog.tsx # Slot booking form
│ │ ├── DaySlotsModal.tsx # Day detail modal with available slots
│ │ ├── StudentNotificationBell.tsx # Cancellation notification inbox
│ │ └── StudentManageBookingDialog.tsx
│ ├── professor/ # Professor-specific components
│ │ ├── ProfessorBookingsGrid.tsx # Appointment grid with tabs
│ │ ├── BookedSlotDialog.tsx # Slot details & cancellation dialog
│ │ ├── CreateWindowForm.tsx # Consultation window creator
│ │ └── EditWindowDialog.tsx # Edit existing windows
│ └── ui/ # shadcn/ui base components
├── types/
│ └── database.ts # TypeScript types mirroring Supabase schema
└── utils/
└── supabase/ # Supabase client (browser + server)
| Table | Purpose |
|---|---|
users |
Stores student and professor profiles with roles |
consultation_windows |
Professor-created time blocks with date, time range, and topic |
slots |
Individual bookable time slots within windows (status: open, booked, cancelled) |
| Role | Signup Route | Dashboard |
|---|---|---|
| Student | /signup |
/student/dashboard |
| Professor | /signup/professor |
/professor/dashboard |
This project is for educational purposes.
Built with 💜 using Next.js + Supabase