A multi-tenant real-time scheduling tool where anyone can create a "room," get a shareable link, and let others book co-study sessions. All times auto-convert to the viewer's local timezone.
Live: co-study-scheduler.vercel.app
I joined a closed group of fellow learners and wanted a way to meet new people in the community while staying productive. The idea was simple: instead of just chatting, why not share a focused study session together?
I create a room, share the link with the group, and members book whichever slot works for them. Everyone in the group can see who's booked which slot and which ones are still open. I share a Zoom link with each registrant via direct message -- though the tool also supports adding a common meeting link that gets emailed directly to registrants (if the host sets up email notifications with their own domain).
Feel free to use it as-is, fork it, or extend it however you like -- make it multi-dimensional for your own community.
- No login required -- create a room, share the link, and let people book
- Automatic timezone conversion -- times display in each viewer's local timezone
- Real-time updates -- bookings appear live for all viewers via Supabase Realtime
- Admin dashboard -- PIN-protected view with booking details and cancellation controls
- Flexible scheduling -- custom session durations (15 min to 8 hours), split or full-day windows
- Add to Calendar -- one-click .ics download adds the session to Google Calendar, Apple Calendar, or Outlook
- Booking management -- users get a unique link to cancel/reschedule from any device
- Email notifications -- optional booking confirmations via Resend (requires setup)
- Mobile responsive -- stacked card layout on small screens, 5-column grid on desktop
- Frontend: React + Vite + Tailwind CSS v4
- Database/Backend: Supabase (PostgreSQL + Realtime + Edge Functions + Row Level Security)
- Hosting: Vercel
- Email: Resend (optional)
- Routing: react-router-dom v6
- Timezone: date-fns + date-fns-tz
- Create a Room -- set your name, session duration, availability windows, timezone, and admin PIN
- Share Your Link -- send the room URL to your study group
- Study Together -- members book sessions in their own timezone
Want to run your own instance? Follow these steps:
- Node.js 18+
- A Supabase account (free tier works)
- A Vercel account (free tier works)
- A Resend account (optional, for email notifications)
git clone https://github.com/deepakdeo/co-study-scheduler.git
cd co-study-scheduler
npm install- Create a new project at supabase.com
- Go to SQL Editor and run the migrations in order:
supabase/migrations/001_create_tables.sqlsupabase/migrations/002_add_host_email.sqlsupabase/migrations/003_fix_bookings_update_policy.sqlsupabase/migrations/004_fix_bookings_policies.sqlsupabase/migrations/005_make_meeting_link_optional.sql
- Copy your project URL and anon key from Settings > API
cp .env.example .envEdit .env with your Supabase credentials:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
npm run dev- Push to GitHub
- Import the repo in Vercel
- Add the environment variables from your
.env - Deploy
- Create a Resend account and get an API key
- Install the Supabase CLI:
npm i -g supabase - Link your project:
npx supabase link --project-ref YOUR_PROJECT_REF - Set the secret:
npx supabase secrets set RESEND_API_KEY=your_resend_key - Deploy the function:
npx supabase functions deploy notify-booking --no-verify-jwt - To send emails to any address (not just your own), verify a custom domain in Resend
src/
components/ UI components (SlotGrid, BookingForm, Layout, etc.)
pages/ Route pages (Home, CreateRoom, Room, Admin)
hooks/ Custom hooks (useRoom, useBookings, useTimezone)
lib/ Utilities (supabase client, slot generation, timezone, slugify, calendar)
supabase/
migrations/ SQL schema migrations
functions/ Edge Functions (notify-booking)
Contributions are welcome! Feel free to open an issue or submit a pull request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'feat: add my feature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request

