Calendarey is a completely free, open-source scheduling platform that makes it easy to book meetings without the back-and-forth emails. Connect your Google Calendar, set your availability, and let others book time with you seamlessly.
Professional dashboard with appointment management, real-time stats, and quick actions
Clean, mobile-first booking interface with interactive calendar and instant confirmation
- Smart Availability Detection - Real-time conflict checking with Google Calendar
- Basic Time Slots - Meeting durations and buffer times
- Timezone Intelligence - Automatic timezone detection and conversion
- Single Meeting Type - Default appointment type with basic information
- Mobile-First Design - Fully responsive on all devices
- Interactive Calendar - Click-to-book available time slots
- Real-Time Updates - Instant sync across all platforms
- Professional UI - Clean, modern interface built with Tailwind CSS
- Google Calendar Sync - Bi-directional appointment synchronization
- Google Meet Integration - Automatic video meeting links (in Google Calendar events)
- OAuth Security - Secure authentication with Auth0
- Appointment Overview - Basic booking management
- Simple Filtering - Search by status, date, attendee
- Quick Actions - Mark complete, cancel appointments
- Basic Stats - Simple appointment counts
- Video Calling Integration - Built-in video conferencing (priority contribution!)
- Multiple Meeting Types - Different appointment categories with custom questions
- Advanced Analytics - Detailed booking insights and reports
- Custom Questions - Collect specific information from attendees
- Team Scheduling - Collaborative calendar management
- Calendar Widgets - Embeddable booking components
- Public Booking Pages - Personalized
/book/usernameURLs - Email Notifications - Custom email templates and automation
- Branding Options - White-label customization
- API Access - RESTful API for custom integrations
- Advanced Settings - Granular control over booking preferences
Frontend:
βββ Next.js 15 (App Router)
βββ TypeScript 5.x
βββ Tailwind CSS
βββ React 18
βββ Lucide React Icons
Backend:
βββ Next.js API Routes
βββ MongoDB Database
βββ Auth0 Authentication
βββ Google APIs Integration
External Services:
βββ Google Calendar API
βββ Auth0 Identity Platform
βββ MongoDB Atlas (optional)
calendarey/
βββ src/app/ # Next.js App Router
β βββ api/ # API Routes
β β βββ appointments/ # Appointment CRUD
β β βββ auth/ # Authentication endpoints
β β βββ calendar/ # Google Calendar integration
β β βββ user/ # User management
β βββ components/ # React Components
β βββ dashboard/ # Dashboard pages
β βββ globals.css # Global styles
βββ lib/ # Utility Libraries
β βββ config/ # Configuration files
β βββ db/ # Database operations
β βββ services/ # External service integrations
β βββ types/ # TypeScript definitions
βββ public/ # Static assets
interface User {
_id: ObjectId;
auth0Id: string; // Auth0 user identifier
email: string;
name: string;
username?: string; // For future public booking URLs
timezone: string;
googleCalendarId?: string; // Connected calendar ID
googleRefreshToken?: string; // OAuth refresh token
isActive: boolean;
createdAt: Date;
updatedAt: Date;
}interface Appointment {
_id: ObjectId;
hostId: ObjectId; // Reference to User
attendeeName: string;
attendeeEmail: string;
attendeePhone?: string;
startTime: Date;
endTime: Date;
timezone: string;
status: 'confirmed' | 'cancelled' | 'completed' | 'no-show';
location: string;
googleEventId?: string; // Google Calendar event ID
customAnswers: Record<string, string>;
cancellationReason?: string;
createdAt: Date;
updatedAt: Date;
}interface Availability {
_id: ObjectId;
userId: ObjectId;
weeklySchedule: {
[day: string]: {
enabled: boolean;
timeSlots: { start: string; end: string; }[];
};
};
bufferTime: number; // Minutes between meetings
maxMeetingsPerDay: number;
advanceBookingDays: number;
minimumNotice: number; // Hours
createdAt: Date;
updatedAt: Date;
}- Node.js 18+
- MongoDB (local or Atlas)
- Google Cloud Platform account
- Auth0 account
-
Clone the repository
git clone https://github.com/yourusername/calendarey.git cd calendarey -
Install dependencies
npm install npm install googleapis google-auth-library
-
Set up environment variables
cp .env.example .env.local
-
Configure your
.env.local# Auth0 Configuration AUTH0_SECRET=your_random_32_character_secret AUTH0_BASE_URL=http://localhost:3000 AUTH0_ISSUER_BASE_URL=https://your-domain.auth0.com AUTH0_CLIENT_ID=your_auth0_client_id AUTH0_CLIENT_SECRET=your_auth0_client_secret # MongoDB MONGODB_URI=mongodb://localhost:27017/calendarey # Google Calendar API GOOGLE_CLIENT_ID=your_client_id.googleusercontent.com GOOGLE_CLIENT_SECRET=your_google_client_secret
- Create an Auth0 application
- Configure callback URLs:
http://localhost:3000/api/auth/callback - Add Google social connection (optional)
- Copy credentials to
.env.local
- Create a new Google Cloud project
- Enable Google Calendar API
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://localhost:3000/api/auth/google/callback - Configure OAuth consent screen with calendar scopes
- Copy credentials to
.env.local
- Local: Install MongoDB locally
- Atlas: Create free cluster at mongodb.com
-
Start the development server
npm run dev
-
Open your browser
http://localhost:3000 -
Create your first account
- Click "Get Started Free"
- Complete Auth0 registration
- Connect Google Calendar in dashboard
-
Initial Setup
- Sign up and verify email
- Connect Google Calendar in Integrations tab
- Basic availability is set by default
-
Managing Appointments
- View all bookings in Appointments tab
- Update appointment status (complete/cancel)
- Basic appointment information display
- Public booking pages not yet implemented
- Limited customization options
- Basic email notifications only through Google Calendar
- Single meeting type only
| Variable | Description | Required |
|---|---|---|
AUTH0_SECRET |
Random 32-character string | β |
AUTH0_BASE_URL |
Your application URL | β |
AUTH0_ISSUER_BASE_URL |
Auth0 domain | β |
AUTH0_CLIENT_ID |
Auth0 application ID | β |
AUTH0_CLIENT_SECRET |
Auth0 application secret | β |
MONGODB_URI |
MongoDB connection string | β |
GOOGLE_CLIENT_ID |
Google OAuth client ID | β |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret | β |
We welcome contributions! This project is in early stages and many features are waiting to be built.
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
- Video Calling Integration - WebRTC, Jitsi, or custom solution
- Public Booking Pages -
/book/usernamefunctionality - Multiple Meeting Types - Different appointment categories
- Advanced Analytics - Booking insights and reporting
- Email Notifications - Custom email templates
- Team Features - Collaborative scheduling
- Mobile Applications - React Native or native apps
- Custom Questions - Attendee information collection
- Internationalization - Multi-language support
- TypeScript for all new code
- ESLint + Prettier for formatting
- Clear commit messages
- Follow existing code patterns
- Verify OAuth redirect URI matches exactly:
http://localhost:3000/api/auth/google/callback - Check OAuth consent screen configuration
- Ensure calendar API is enabled in Google Cloud Console
- Verify credentials in
.env.local
- Confirm callback URLs are configured:
http://localhost:3000/api/auth/callback - Check Auth0 application settings
- Verify environment variables
- Review Auth0 logs for errors
- Test connection string format
- Verify network access (Atlas)
- Check authentication credentials
- Ensure database exists
- Clear
.nextfolder:rm -rf .next - Reinstall dependencies:
rm -rf node_modules && npm install - Check TypeScript errors:
npm run type-check
- Check existing GitHub Issues
- Open new issue with detailed description
- Include error logs and environment details
This project is licensed under the MIT License - see the LICENSE file for details.
- Calendly - Original inspiration
- Next.js - Amazing React framework
- Auth0 - Secure authentication
- Google Calendar API - Calendar integration
- Tailwind CSS - Utility-first CSS
Made with β€οΈ by the open-source community
Calendarey is completely free and will always be open source. If you find it useful, please consider giving us a β on GitHub and contributing to make it even better!
Frontend:
βββ Next.js 15 (App Router)
βββ TypeScript 5.x
βββ Tailwind CSS
βββ React 18
βββ Lucide React Icons
Backend:
βββ Next.js API Routes
βββ MongoDB Database
βββ Auth0 Authentication
βββ Google APIs Integration
External Services:
βββ Google Calendar API
βββ Google Cloud Platform
βββ Auth0 Identity Platform
βββ MongoDB Atlas (optional)
calendarey/
βββ src/app/ # Next.js App Router
β βββ api/ # API Routes
β β βββ appointments/ # Appointment CRUD
β β βββ auth/ # Authentication endpoints
β β βββ calendar/ # Google Calendar integration
β β βββ user/ # User management
β βββ components/ # React Components
β βββ dashboard/ # Dashboard pages
β βββ globals.css # Global styles
βββ lib/ # Utility Libraries
β βββ config/ # Configuration files
β βββ db/ # Database operations
β βββ services/ # External service integrations
β βββ types/ # TypeScript definitions
βββ public/ # Static assets
interface User {
_id: ObjectId;
auth0Id: string; // Auth0 user identifier
email: string;
name: string;
username?: string; // For public booking URLs
timezone: string;
googleCalendarId?: string; // Connected calendar ID
googleRefreshToken?: string; // OAuth refresh token
isActive: boolean;
createdAt: Date;
updatedAt: Date;
}interface Appointment {
_id: ObjectId;
hostId: ObjectId; // Reference to User
meetingTypeId: ObjectId; // Reference to MeetingType
attendeeName: string;
attendeeEmail: string;
attendeePhone?: string;
startTime: Date;
endTime: Date;
timezone: string;
status: 'confirmed' | 'cancelled' | 'completed' | 'no-show';
location: string;
googleEventId?: string; // Google Calendar event ID
customAnswers: Record<string, string>;
cancellationReason?: string;
createdAt: Date;
updatedAt: Date;
}interface Availability {
_id: ObjectId;
userId: ObjectId;
weeklySchedule: {
[day: string]: {
enabled: boolean;
timeSlots: { start: string; end: string; }[];
};
};
bufferTime: number; // Minutes between meetings
maxMeetingsPerDay: number;
advanceBookingDays: number;
minimumNotice: number; // Hours
createdAt: Date;
updatedAt: Date;
}- Node.js 18+
- MongoDB (local or Atlas)
- Google Cloud Platform account
- Auth0 account
-
Clone the repository
git clone https://github.com/yourusername/calendarey.git cd calendarey -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env.local
-
Configure your
.env.local# Auth0 Configuration AUTH0_SECRET=your_random_32_character_secret AUTH0_BASE_URL=http://localhost:3000 AUTH0_ISSUER_BASE_URL=https://your-domain.auth0.com AUTH0_CLIENT_ID=your_auth0_client_id AUTH0_CLIENT_SECRET=your_auth0_client_secret # MongoDB MONGODB_URI=mongodb://localhost:27017/calendarey # Google Calendar API GOOGLE_CLIENT_ID=your_client_id.googleusercontent.com GOOGLE_CLIENT_SECRET=your_google_client_secret
- Create an Auth0 application
- Configure callback URLs:
http://localhost:3000/api/auth/callback - Add Google social connection (optional)
- Copy credentials to
.env.local
- Create a new Google Cloud project
- Enable Google Calendar API
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://localhost:3000/api/auth/google/callback - Configure OAuth consent screen
- Copy credentials to
.env.local
- Local: Install MongoDB locally
- Atlas: Create free cluster at mongodb.com
- Docker:
docker run -d -p 27017:27017 mongo
-
Start the development server
npm run dev
-
Open your browser
http://localhost:3000 -
Create your first account
- Click "Get Started Free"
- Complete Auth0 registration
- Connect Google Calendar in dashboard
-
Initial Setup
- Sign up and verify email
- Connect Google Calendar
- Set availability preferences
- Configure meeting types
-
Managing Appointments
- View all bookings in dashboard
- Update appointment status
- Send messages to attendees
- Export calendar data
-
Customization
- Set custom booking questions
- Configure buffer times
- Update availability schedule
- Personalize booking page
-
Booking Process
- Visit host's booking page:
/book/username - Select available time slot
- Fill in required information
- Receive confirmation email
- Visit host's booking page:
-
Meeting Preparation
- Check calendar invitation
- Join Google Meet link (if enabled)
- Prepare for scheduled discussion
| Variable | Description | Required |
|---|---|---|
AUTH0_SECRET |
Random 32-character string | β |
AUTH0_BASE_URL |
Your application URL | β |
AUTH0_ISSUER_BASE_URL |
Auth0 domain | β |
AUTH0_CLIENT_ID |
Auth0 application ID | β |
AUTH0_CLIENT_SECRET |
Auth0 application secret | β |
MONGODB_URI |
MongoDB connection string | β |
GOOGLE_CLIENT_ID |
Google OAuth client ID | β |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret | β |
- Modify
tailwind.config.jsfor design system changes - Update color schemes in
globals.css - Customize component themes in
/components
- Enable/disable Google Meet integration
- Configure default meeting durations
- Set organization-wide booking policies
- Customize email templates
# Unit tests
npm run test
# Integration tests
npm run test:integration
# E2E tests
npm run test:e2enpm run test:coverage- Connect GitHub repository
- Add environment variables
- Deploy automatically
# Build image
docker build -t calendarey .
# Run container
docker run -p 3000:3000 calendarey# Build production bundle
npm run build
# Start production server
npm startWe welcome contributions! Here's how to get started:
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Add tests for new functionality
- Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
- Video Calling Integration - WebRTC, Jitsi, or custom solution
- Mobile Applications - React Native or native apps
- Advanced Analytics - Booking insights and reporting
- Team Features - Collaborative scheduling
- Internationalization - Multi-language support
- TypeScript for all new code
- ESLint + Prettier for formatting
- Comprehensive test coverage
- Clear commit messages
- Documentation updates
- Verify OAuth redirect URI matches exactly
- Check OAuth consent screen configuration
- Ensure calendar API is enabled
- Verify credentials in
.env.local
- Confirm callback URLs are configured
- Check Auth0 application settings
- Verify environment variables
- Review Auth0 logs for errors
- Test connection string format
- Verify network access (Atlas)
- Check authentication credentials
- Ensure database exists
- Clear
.nextfolder:rm -rf .next - Reinstall dependencies:
rm -rf node_modules && npm install - Check TypeScript errors:
npm run type-check
- Check existing GitHub Issues
- Join our Discord Community
- Review Documentation
- Email support: [email protected]
- Calendly - Original inspiration
- Next.js - Amazing React framework
- Auth0 - Secure authentication
- Google Calendar API - Calendar integration
- Tailwind CSS - Utility-first CSS
- Vercel - Deployment platform
- Demo: demo.calendarey.com
- Documentation: docs.calendarey.com
- GitHub: github.com/yourusername/calendarey
- Discord: discord.gg/calendarey
- Twitter: @calendarey
Made with β€οΈ by the open-source community
Calendarey is completely free and will always be open source. If you find it useful, please consider giving us a β on GitHub!