* Initial plan * Add comprehensive README.md with features, configuration, and setup instructions Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Add shift calendar screenshot after login screen in README Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> * Update README.md --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com> Co-authored-by: Claudio Schaad <clayschaad@users.noreply.github.com> |
||
|---|---|---|
| .github | ||
| .idea/.idea.ShiftScheduler/.idea | ||
| Client | ||
| Server | ||
| Services | ||
| Shared | ||
| ShiftScheduler.Services.Tests | ||
| .gitignore | ||
| authentication-setup.md | ||
| DOCKER_CONFIG.md | ||
| LICENSE | ||
| README.md | ||
| ShiftScheduler.sln | ||
ShiftScheduler
A modern Blazor WebAssembly application for managing work shift schedules with calendar export capabilities and transport integration.
Overview
ShiftScheduler is a web-based shift management system that allows users to:
- Plan and visualize work shifts using an intuitive calendar interface
- Export schedules to industry-standard formats (ICS and PDF)
- Calculate optimal transport connections for work commutes
- Manage multiple shift types with customizable icons and time periods
- Secure access through Google OAuth authentication
Perfect for individuals or small teams who need to organize shift work, track schedules, and integrate with existing calendar systems.
Key Features
📅 Calendar-Based Shift Management
- Interactive monthly calendar view with easy shift selection
- Switch between current and next month
- Visual shift indicators with customizable icons and colors
- Responsive design for desktop and mobile devices
🔄 Export Capabilities
- ICS Export: Import schedules directly into Google Calendar, Outlook, or any calendar application
- PDF Export: Generate printable shift schedules with professional formatting
- One-click export functionality
🚆 Transport Integration
- Automatic calculation of travel times between configurable stations
- Integration with Swiss public transport API (transport.opendata.ch)
- Safety buffer calculations for reliable commute planning
- Display of optimal departure and arrival times
🔐 Secure Authentication
- Google OAuth integration for secure access
- Configurable authorized email addresses
- Session management with proper login/logout functionality
⚙️ Flexible Configuration
- Shift Types: Fully customizable shift definitions with:
- Custom names and icons (emoji or PNG images)
- Morning and afternoon time periods
- Flexible time format support
- Transport Settings: Configurable start/end stations, API parameters, and timing buffers
- Persistent Configuration: Settings survive application restarts and container rebuilds
🐳 Docker Ready
- Container-friendly with persistent external configuration
- Easy deployment with Docker Compose
- Configuration backup and version control support
Available Shift Types (Default Configuration)
| Icon | Name | Morning Time | Afternoon Time | Description |
|---|---|---|---|---|
| ⚫ | Frei | - | - | Free day / Day off |
| 🌴 | Urlaub | - | - | Vacation day |
| 🛑 | Pause | 10:00-10:15 | 15:00-15:15 | Break periods |
| 🌅 | Früh | 06:00-14:00 | - | Early shift |
| 🌆 | Spät | - | 14:00-22:00 | Late shift |
| ☀️ | Tag | 08:00-12:00 | 13:00-17:00 | Day shift |
All shift types are fully configurable through the application interface.
Configuration Options
Authentication Settings
{
"Authentication": {
"Google": {
"ClientId": "your-google-client-id.apps.googleusercontent.com",
"ClientSecret": "your-google-client-secret"
},
"AuthorizedEmails": [
"user1@gmail.com",
"user2@example.com"
]
}
}
Transport Configuration
{
"Transport": {
"StartStation": "Zurich",
"EndStation": "Basel",
"ApiBaseUrl": "http://transport.opendata.ch/v1",
"SafetyBufferMinutes": 30,
"MinBreakMinutes": 60,
"MaxEarlyArrivalMinutes": 60,
"MaxLateArrivalMinutes": 15,
"CacheDurationDays": 1
}
}
Shift Definitions
{
"Shifts": [
{
"Name": "Custom Shift",
"Icon": "🎯",
"MorningTime": "09:00-13:00",
"AfternoonTime": "14:00-18:00"
}
]
}
Installation & Setup
Prerequisites
- .NET 9.0 SDK
- Modern web browser
- Google Cloud Console account (for authentication)
Quick Start
-
Clone the repository
git clone https://github.com/clayschaad/ShiftScheduler.git cd ShiftScheduler -
Install dependencies
dotnet restore -
Configure authentication (see Authentication Setup Guide)
- Create Google OAuth application
- Update
Server/appsettings.jsonwith your credentials - Add authorized email addresses
-
Build and run
dotnet build cd Server dotnet run -
Access the application
- Navigate to
http://localhost:5000 - Sign in with your Google account
- Start planning your shifts!
- Navigate to
Docker Deployment
version: '3.8'
services:
shiftscheduler:
build: .
ports:
- "5000:5000"
volumes:
- ./config:/app/config # Persistent configuration
environment:
- ASPNETCORE_ENVIRONMENT=Production
See Docker Configuration Guide for detailed deployment instructions.
Usage
Planning Shifts
- Navigate between months using the month selection buttons
- Click on any day to cycle through available shift types
- Shifts are automatically saved and persist across sessions
- Hover over shifts to see detailed time information
Exporting Schedules
- ICS Export: Click "Export to ICS" to download a calendar file compatible with all major calendar applications
- PDF Export: Click "Export to PDF" to generate a printable schedule document
Managing Configuration
- Click the "⚙️ Configuration" button to access settings
- Shift Management: Add, edit, or remove shift types
- Transport Settings: Configure stations and timing preferences
- Import/Export: Backup and restore configuration settings
Transport Integration
When transport is configured, the application automatically:
- Calculates optimal departure times for work commutes
- Displays train connections and travel duration
- Applies safety buffers for reliable planning
- Shows both morning and afternoon journey options
Technical Architecture
- Frontend: Blazor WebAssembly (.NET 9.0)
- Backend: ASP.NET Core Web API (.NET 9.0)
- Authentication: Google OAuth 2.0
- Export: QuestPDF for PDF generation, custom ICS implementation
- Transport: Swiss Public Transport API integration
- Configuration: JSON-based with external persistence support
Documentation
- 📚 Authentication Setup Guide - Complete Google OAuth configuration
- 🐳 Docker Configuration Guide - Containerization and deployment
- 📄 License - Apache 2.0 License
Contributing
This project follows standard .NET development practices:
- Uses .NET 9.0 target framework
- Implements nullable reference types
- Follows established architectural patterns
- Includes comprehensive configuration options
Support
For issues, questions, or feature requests, please use the GitHub issue tracker.
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.