BetterShift
Your favorite shift management application!
Install / Use
/learn @panteLx/BetterShiftREADME
BetterShift
Your favorite shift management application!
BetterShift is a self-hosted shift management application for teams and individuals with variable work schedules. Create unlimited calendars, toggle shifts with a single click, and share them with your team via user accounts, links, or public access. Sync external calendars from Google, Outlook, or iCal, export to ICS/PDF, and manage everything through an admin panel with role-based permissions and audit logging.
Demo · Documentation · Quick Start · Discord
<details> <summary>Show Screenshots</summary> <img width="1920" height="1080" alt="calendar_page" src="https://github.com/user-attachments/assets/9b8b01b5-0a5d-4359-8024-5764866cf92a" /> <img width="1920" height="1080" alt="admin_panel" src="https://github.com/user-attachments/assets/976e1c4d-6c7c-4462-abe7-8d81edb33666" /> </details>Features
| Feature | Description | | ------------------ | --------------------------------------------------------------- | | Calendars | Unlimited calendars with custom colors and names | | Presets | Reusable shift templates with labels, times, and colors | | External Sync | Subscribe to Google Calendar, Outlook, or iCal feeds | | Sharing | Share via user accounts, guest access, or shareable links | | Authentication | Email/password, OAuth (Google, GitHub, Discord), or custom OIDC | | Admin Panel | User management, calendar administration, audit logging | | Statistics | Real-time shift tracking with visual charts | | Export | Download calendars as ICS or PDF | | Localization | English, German, Italian, Spanish | | PWA | Installable on mobile and desktop |
Quick Start
</div>Docker
docker run -d \
-p 3000:3000 \
-v ./data:/app/data \
-e BETTER_AUTH_SECRET=$(openssl rand -base64 32) \
-e BETTER_AUTH_URL=http://localhost:3000 \
--name bettershift \
ghcr.io/pantelx/bettershift:latest
Open http://localhost:3000. The first registered user becomes superadmin.
Docker Compose
git clone https://github.com/pantelx/bettershift.git
cd bettershift
cp .env.example .env
# Edit .env and set BETTER_AUTH_SECRET
docker-compose up -d
From Source
git clone https://github.com/pantelx/bettershift.git
cd bettershift
npm install
cp .env.example .env
npm run db:migrate
npm run dev
<div align="center">
Documentation
| Document | Description | | ------------------------------------------------ | ----------------------------------------- | | Authentication Setup | Email/password, OAuth, OIDC configuration | | Admin Panel | User management, calendar administration | | Permissions | Sharing, access tokens, guest access | | Migration Guide | Enable auth on existing instances |
Configuration
</div>Required
AUTH_ENABLED=true
BETTER_AUTH_SECRET= # npx @better-auth/cli secret
BETTER_AUTH_URL=http://localhost:3000
Optional: OAuth Providers
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=
DISCORD_CLIENT_ID=
DISCORD_CLIENT_SECRET=
Optional: Custom OIDC
CUSTOM_OIDC_ENABLED=true
CUSTOM_OIDC_NAME=Company SSO
CUSTOM_OIDC_CLIENT_ID=
CUSTOM_OIDC_CLIENT_SECRET=
CUSTOM_OIDC_ISSUER=https://sso.example.com/.well-known/openid-configuration
See .env.example for all options.
<div align="center">Database Commands
</div>npm run db:migrate # Apply migrations
npm run db:generate # Generate migrations after schema changes
npm run db:studio # Open Drizzle Studio GUI
<div align="center">
Docker Images
Images are available at ghcr.io/pantelx/bettershift:
| Tag | Description |
| -------- | ---------------------------- |
| latest | Latest stable release |
| vX.Y.Z | Specific version |
| dev | Development build (unstable) |
Tech Stack
| Layer | Technology | | --------- | --------------------------------- | | Framework | Next.js 16, React 19, TypeScript | | Database | SQLite, Drizzle ORM | | Auth | Better Auth | | UI | Tailwind CSS, shadcn/ui, Radix UI | | i18n | next-intl |
Contributing
Contributions are welcome. Please follow these steps:
Fork the repository -
Create a feature branch -
Run npm test before committing -
Submit a pull request
Support
Discord - GitHub Issues - Buy Me a Coffee - GitHub Sponsors
License
MIT License. See LICENSE for details.
</div>