A powerful team scheduling application that enhances Google Calendar with team management, schedule views, and collaborative planning features. Perfect for managing staff rotations, on-call duty times, and team vacations.
- 📅 Schedule View - Horizontal timeline showing multiple team calendars side by side
- 🔗 Google Calendar Integration - Seamless two-way sync with Google Calendar
- 👥 Team Management - Create teams, add members, manage permissions
- 📊 Visual Analytics - Identify patterns and optimize coverage
- 📤 Export & Share - Embed schedules, PDF export, print support
- 📱 Mobile Friendly - Works on phones, tablets, and desktops
- Frontend: Next.js 14, React, TypeScript
- Backend: Express.js, TypeScript
- Database: SQLite with Prisma ORM
- Authentication: Google OAuth 2.0
- Calendar API: Google Calendar API v3
- Node.js 18+
- Google Cloud Console account
- npm or yarn
- Clone the repository
cd teamcalapp- Install dependencies
npm install- Set up environment variables
Copy .env.example to .env and fill in your credentials:
# Google OAuth - Get from https://console.cloud.google.com/apis/credentials
GOOGLE_CLIENT_ID=your_client_id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT_URI=http://localhost:3001/auth/google/callback
# Session secret
SESSION_SECRET=your_random_secret
# Server
PORT=3001
NODE_ENV=development-
Set up Google OAuth
-
Go to Google Cloud Console
-
Create OAuth 2.0 Client ID credentials
-
Add
http://localhost:3001/auth/google/callbackto authorized redirect URIs -
Add
http://localhost:3000to authorized JavaScript origins -
Initialize the database
npm run db:generate
npm run db:push- Start development servers
npm run devThe application will be available at:
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
teamcalapp/
├── prisma/ # Database schema
│ └── schema.prisma
├── server/ # Express backend
│ ├── index.ts # Server entry point
│ ├── db.ts # Prisma client
│ ├── google.ts # Google API helpers
│ └── routes/ # API routes
│ ├── auth.ts # Authentication
│ ├── calendar.ts # Calendar endpoints
│ ├── events.ts # Event management
│ └── teams.ts # Team management
├── src/
│ ├── app/ # Next.js frontend
│ │ ├── layout.tsx
│ │ ├── page.tsx # Landing page
│ │ ├── globals.css
│ │ └── dashboard/ # Dashboard
│ │ └── page.tsx
│ └── ...
├── package.json
├── tsconfig.json
├── next.config.js
└── README.md
GET /auth/google- Initiate OAuthGET /auth/google/callback- OAuth callbackPOST /auth/logout- LogoutGET /auth/me- Get current user
GET /api/calendars- List calendarsGET /api/calendars/events- Get eventsPOST /api/calendars/:id/events- Create event
GET /api/teams- List teamsPOST /api/teams- Create teamPOST /api/teams/:id/members- Add member
- Sign in with your Google account
- Connect calendars - Select which calendars to display
- Create teams - Add team members and manage permissions
- View schedules - Use the Schedule view to see team availability
- Create events - Click on the calendar to add new events
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - feel free to use this for your own projects.
- Inspired by TeamCalApp
- Built with Google Calendar API