Slot Booking made Eazzy, A full-stack venue slot booking system for university clubs and committees. Clubs can request meeting rooms, administrators can approve or reject bookings, and everyone gets a real-time view of the master schedule — no more double-bookings or email chains.
- Global schedule — see every approved booking across all venues at a glance
- Slot booking — request a venue with automatic conflict detection
- Booking management — track request status, edit pending bookings, submit post-event reports
- Policy reference — in-app access to booking rules and guidelines
- Dashboard — pending request count, approval stats, and quick actions
- Request workflow — review, approve, or reject bookings with optional email notifications
- Master schedule — filterable calendar view of all venues
| Layer | Technologies |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind CSS v4, shadcn/ui (Radix UI) |
| Backend | Node.js, Express, TypeScript |
| Database | Supabase (PostgreSQL + Auth) |
| Notifications | EmailJS (optional) |
| Deployment | Nginx, PM2, GitHub Actions CI/CD |
- Node.js v18+
- npm
- A Supabase project (free tier works)
git clone https://github.com/ossdaiict/sleazzy.git
cd sleazzy# Server
cd server && npm install
# Client
cd ../client && npm installCopy the example files and fill in your values:
cp server/.env.example server/.env
cp client/.env.example client/.envserver/.env
SUPABASE_URL=<your-supabase-url>
SUPABASE_SERVICE_ROLE_KEY=<your-service-role-key>
PORT=4000
# Optional — EmailJS for approval notifications
EMAILJS_SERVICE_ID=
EMAILJS_TEMPLATE_ID=
EMAILJS_PUBLIC_KEY=
EMAILJS_PRIVATE_KEY=
APPROVAL_NOTIFY_EMAIL=client/.env
VITE_API_URL=http://localhost:4000
VITE_SUPABASE_URL=<your-supabase-url>
VITE_SUPABASE_ANON_KEY=<your-anon-key>Populate the database with sample profiles, clubs, and venues:
cd server
npx ts-node seed.ts# Terminal 1 — API server (localhost:4000)
cd server
npm run dev
# Terminal 2 — Frontend (localhost:5173)
cd client
npm run devsleazzy/
├── client/ # React frontend
│ ├── src/
│ │ ├── components/ui/ # shadcn/ui primitives
│ │ ├── lib/ # Shared utilities & composite components
│ │ ├── pages/ # Route-level pages
│ │ ├── App.tsx # Router & layout
│ │ ├── types.ts # Shared TypeScript types
│ │ └── constants.ts # Static data (venues, categories)
│ ├── vite.config.ts
│ └── .env.example
│
├── server/ # Express API
│ ├── src/
│ │ ├── controllers/ # Route handlers
│ │ ├── routes/ # Express route definitions
│ │ ├── services/ # Business logic
│ │ ├── middleware/ # Auth & request middleware
│ │ ├── types/ # Server-side types
│ │ ├── server.ts # Entry point
│ │ └── supabaseClient.ts
│ ├── seed.ts # Database seed script
│ └── .env.example
│
├── deploy.sh # Production deployment script
├── ecosystem.config.js # PM2 process config
├── nginx.conf # Nginx reference config
├── DEPLOYMENT.md # Ops & deployment guide
└── .github/workflows/ # CI/CD pipeline
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/api/health |
No | Health check |
GET |
/api/venues |
No | List all venues |
GET |
/api/clubs |
No | List all clubs |
GET |
/api/public-bookings |
No | Approved bookings (public schedule) |
POST |
/api/auth/register |
No | Register a new user |
GET |
/api/auth/profile |
Yes | Current user profile |
POST |
/api/bookings |
Yes | Create a booking request |
GET |
/api/my-bookings |
Yes | Current user's bookings |
GET |
/api/bookings/check-conflict |
Yes | Check venue/time conflicts |
* |
/api/admin/* |
Admin | Admin management routes |
# Build the server
cd server
npm run build # compiles to server/dist/
npm start # runs the compiled server
# Build the client
cd client
npm run build # outputs to client/dist/
npm run preview # preview the production bundle locallyFor full VPS deployment instructions (Nginx, PM2, GitHub Actions), see DEPLOYMENT.md.
Contributions are welcome! If you'd like to help improve Sleazzy:
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m "Add my feature") - Push to your branch (
git push origin feature/my-feature) - Open a Pull Request
Feel free to open an issue for bug reports, feature requests, or questions.
Thanks to everyone who has helped shape Sleazzy. This project is better because of you.
This project is licensed under the MIT License.