A comprehensive web-based resource booking and management platform built with Next.js, Firebase, and modern UI components. This system enables organizations to efficiently manage resource reservations with role-based access control.
Reservo is a full-stack booking management system designed for educational institutions, organizations, or any entity that needs to manage shared resources. The platform features separate interfaces for administrators and regular users, providing comprehensive booking management, real-time availability checking, and detailed analytics.
- Book Resources: Reserve facilities, equipment, or rooms with an intuitive calendar interface
- Real-Time Availability: Check available time slots instantly before making a booking
- Booking Management: Track, modify, and cancel your reservations
- Admin Dashboard: Comprehensive administrative controls for managing all bookings and resources
- Analytics & Statistics: Visualize booking trends and resource utilization
- Announcements: System-wide notifications for users
- Role-Based Access: Separate dashboards for administrators and regular users
- Visual calendar interface for booking resources
- Real-time availability checking
- Select time slots (9 AM - 5 PM in 1-hour intervals)
- Add purpose/notes to bookings
- Instant booking confirmation
- View all your bookings in one place
- Track booking status (pending, accepted, rejected, cancelled)
- Cancel bookings when needed
- Filter between upcoming and past bookings
- Detailed booking information cards
- Update personal information
- View account details
- Manage contact preferences
- Overview of all bookings with statistics
- Interactive charts showing booking trends
- Recent bookings at a glance
- Quick access to key metrics
- Real-time data visualization
- Approve or reject booking requests
- View detailed booking information
- Filter and search bookings
- Manage booking statuses
- Export booking data
- Add, edit, and remove resources
- Set resource availability
- Configure booking rules
- Manage resource categories
- View all registered users
- Assign and modify user roles
- Manage user permissions
- Track user activity
- Create system-wide announcements
- Schedule announcement visibility
- Notify all users of important updates
- Manage announcement priorities
- Visual representation of booking data
- Resource utilization metrics
- Peak usage times analysis
- Booking trends over time
- Exportable reports
- ** Authentication**: Secure Firebase authentication with email/password
- ** Modern UI**: Built with shadcn/ui components and Tailwind CSS
- ** Responsive Design**: Works seamlessly on desktop, tablet, and mobile
- ** Dark Mode Support**: Eye-friendly interface options
- ** Real-Time Updates**: Instant synchronization with Firebase Firestore
- ** Toast Notifications**: User-friendly feedback for all actions
- ** Role-Based Access Control**: Separate admin and user interfaces
- Framework: Next.js 15 with App Router
- Language: TypeScript
- Styling: Tailwind CSS v4
- UI Components: shadcn/ui
- Icons: Tabler Icons React
- Charts: Recharts
- Calendar: @schedule-x
- Tables: TanStack Table
- Notifications: Sonner
- Database: Firebase Firestore
- Authentication: Firebase Auth
- Storage: Firebase Storage (optional)
- API: Next.js API Routes
- Package Manager: npm
- Build Tool: Turbopack (Next.js)
- Runtime: Node.js
- Node.js (v18 or higher)
- npm or yarn
- Firebase Account with a project created
-
Clone the repository
git clone https://github.com/yourusername/reservo.git cd reservo -
Install dependencies
npm install
-
Set up Firebase
Follow the detailed instructions in SETUP.md to configure Firebase credentials.
Quick summary:
- Download your Firebase service account JSON
- Save it as
firebase/service_account.json - Copy
.env.exampleto.env.local - Update environment variables
-
Run the development server
npm run dev
-
Open your browser
Navigate to http://localhost:3000
After starting the app:
- Create an account via the signup page
- Check the Firebase Console to assign yourself admin role
- Or modify
lib/userRoles.tsto add your email as an admin
reservo/
βββ app/ # Next.js App Router pages
β βββ admin/ # Admin-only pages
β β βββ announcements/ # Announcement management
β β βββ bookings/ # Booking approval/management
β β βββ dashboard/ # Admin dashboard
β β βββ resources/ # Resource management
β β βββ statistics/ # Analytics & reports
β β βββ users/ # User management
β βββ user/ # User pages
β β βββ dashboard/ # User bookings view
β β βββ scheduler/ # Booking interface
β β βββ profile/ # User profile
β β βββ contact/ # Contact page
β βββ api/ # API routes
β β βββ bookings/ # Booking CRUD operations
β β βββ availability/ # Check slot availability
β β βββ resources/ # Resource management
β β βββ users/ # User operations
β βββ login/ # Authentication pages
β βββ signup/
βββ components/ # React components
β βββ ui/ # shadcn/ui components
β βββ app-sidebar.tsx # Navigation sidebar
β βββ calendar.tsx # Calendar component
β βββ data-table.tsx # Reusable data table
β βββ ...
βββ firebase/ # Firebase configuration
β βββ config.js # Firebase Admin SDK setup
β βββ service_account.json # (Not in git - see SETUP.md)
βββ lib/ # Utility functions
β βββ firebase.ts # Firebase helpers
β βββ userRoles.ts # Role management
β βββ utils.ts # General utilities
βββ public/ # Static assets
The system supports two primary roles:
- Full access to all features
- Can approve/reject bookings
- Manage resources and users
- View analytics and statistics
- Create announcements
- Access admin dashboard at
/admin/dashboard
- Create and manage own bookings
- View available resources
- Check real-time availability
- Cancel own bookings
- Access user dashboard at
/user/dashboard
To configure roles, see ROLE_BASED_AUTH.md
-
Push your code to GitHub (without sensitive files)
-
Import project in Vercel
- Go to vercel.com
- Click "New Project"
- Import your repository
-
Add environment variables
- In Vercel project settings β Environment Variables
- Add
FIREBASE_SERVICE_ACCOUNTwith your service account JSON content
-
Deploy!
vercel --prod
For detailed deployment instructions including other platforms, see SETUP.md
# Required in production
FIREBASE_SERVICE_ACCOUNT={"type":"service_account","project_id":"...",...}- Firebase Authentication for secure user management
- Role-based access control (RBAC)
- API route protection
- Environment variables for sensitive data
.gitignoreconfigured to exclude credentials- Server-side validation for all operations
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
For issues, questions, or suggestions:
- Create an issue in this repository
- Contact the development team
Built with β€οΈ using Next.js and Firebase