Skip to content

panteLx/BetterShift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

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.

Version Build License

Demo · Documentation · Quick Start · Discord

Show Screenshots calendar_page admin_panel

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
PWA Installable on mobile and desktop

Quick Start

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

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

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.

Database Commands

npm run db:migrate    # Apply migrations
npm run db:generate   # Generate migrations after schema changes
npm run db:studio     # Open Drizzle Studio GUI

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.

Packages

 
 
 

Contributors 2

  •  
  •  

Languages