A modern scheduling system built with Next.js and TypeScript, featuring Google Calendar integration, Google Meet automation, and advanced scheduling capabilities.
Features | Tech Stack | Development Tools |
---|---|---|
Prerequisites | Setup | Environment Variables |
Project Structure | Docker Setup | Contributing |
-
Google Meet Integration:
- Automated Google Meet creation for scheduled meetings
- Direct integration with Google Calendar API
- Secure OAuth token management and refresh
- Attendee management and conference data handling
-
Google Calendar Integration:
- Seamless calendar synchronization
- OAuth 2.0 authentication with offline access
- Automatic token refresh mechanism
- Event creation and management
- Calendar scope authorization
- Advanced Scheduling:
- Interactive calendar interface with blocked dates
- Dynamic time slots based on user availability
- Conflict detection and prevention
- Past dates blocking
- Real-time availability updates
- Multi-step scheduling form with confirmation
- Profile System:
- Custom user profiles with bio
- Username-based routing
- Profile customization options
- Cascade relationship configuration
- Session management with NextAuth.js
- Availability Control:
- Flexible weekly schedule configuration
- Custom time intervals for each day
- Automated availability calculation
- Time zone support with Day.js
- Conflict prevention system
- Efficient Data Management:
- React Query for efficient data fetching
- Optimistic updates
- Error boundary handling
- Form validation with Zod
- Real-time data synchronization
- Node.js 20+ (LTS version)
- Yarn package manager
- Docker and Docker Compose
- Google Cloud Platform account with Calendar and Meet APIs enabled
- PostgreSQL (production) / SQLite (development)
- Clone the repository:
git clone https://github.com/yourusername/ignite-call.git
cd ignite-call
- Install dependencies:
yarn install
- Set up environment variables:
cp .env.example .env
-
Configure Google OAuth:
- Enable Calendar and Meet APIs in Google Cloud Console
- Set up OAuth consent screen with required scopes
- Create OAuth credentials and add redirect URIs
- Add credentials to .env file
-
Start the development environment:
docker-compose up -d # Start PostgreSQL
yarn prisma migrate dev # Run database migrations
yarn dev # Start development server
The project uses Docker to provide a complete development environment (approximately 300MB). With a single command, you get both the application and database running:
# docker-compose.yml
version: '3'
services:
postgres:
image: postgres
container_name: ignitecall-postgres
ports:
- 5432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=docker
- POSTGRES_DB=ignitecall
volumes:
- pgdata:/var/lib/postgresql/data
app:
build: .
container_name: ignitecall-app
ports:
- 3000:3000
depends_on:
- postgres
environment:
- DATABASE_URL=postgresql://postgres:docker@postgres:5432/ignitecall
volumes:
pgdata:
Quick Start with Docker:
# Start the entire application
docker-compose up -d
# The application will be available at http://localhost:3000
# PostgreSQL will be available at postgresql://postgres:docker@localhost:5432/ignitecall
Features of this setup:
- Complete development environment in a single command
- PostgreSQL database with persistent data
- Optimized production-ready Node.js image
- Automatic database connection
- Hot reload for development
- Total size: ~300MB
# Database
DATABASE_URL="postgresql://postgres:docker@localhost:5432/ignitecall"
# Google OAuth
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
# NextAuth.js
NEXTAUTH_SECRET="your-nextauth-secret"
NEXTAUTH_URL="http://localhost:3000"
ignite-call/
βββ src/
β βββ @types/
β β βββ next-auth.d.ts
β βββ pages/
β β βββ api/
β β β βββ auth/
β β β βββ users/
β β β βββ schedule/
β β βββ schedule/
β β βββ register/
β βββ components/
β β βββ Calendar/
β β βββ ScheduleForm/
β β βββ TimeIntervals/
β βββ lib/
β β βββ google/
β β βββ auth/
β β βββ prisma.ts
β βββ styles/
β βββ globals.ts
βββ prisma/
β βββ migrations/
β βββ schema.prisma
βββ biome.json
To be documented based on project implementation.
To be added based on project implementation.
This project is licensed under the MIT License - see the LICENSE file for details.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'feat: add some amazing feature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request