ForwardWidgets
Widgets for Douban and Trakt watchlists plus personalized recommendations, live TV streaming including PlutoTV, Yatu ra…
Your favorite shift management application!
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
| 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, French, German, Italian, Spanish |
| PWA | Installable on mobile and desktop |
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.
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
git clone https://github.com/pantelx/bettershift.git cd bettershift npm install cp .env.example .env npm run db:migrate npm run dev
| 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 |
AUTH_ENABLED=true BETTER_AUTH_SECRET= # npx @better-auth/cli secret BETTER_AUTH_URL=http://localhost:3000
GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= DISCORD_CLIENT_ID= DISCORD_CLIENT_SECRET=
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.
npm run db:migrate # Apply migrations npm run db:generate # Generate migrations after schema changes npm run db:studio # Open Drizzle Studio GUI
Images are available at ghcr.io/pantelx/bettershift:
| Tag | Description |
|---|---|
latest |
Latest stable release |
vX.Y.Z |
Specific version |
dev |
Development build (unstable) |
| 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 |
Contributions are welcome. Please follow these steps:
Fork the repository -
Create a feature branch -
Run npm test before committing -
Submit a pull request
Discord - GitHub Issues - Buy Me a Coffee - GitHub Sponsors
MIT License. See LICENSE for details.
more like this
Widgets for Douban and Trakt watchlists plus personalized recommendations, live TV streaming including PlutoTV, Yatu ra…
Create and add progress bars, Office365 Files and Dropbox Paper papers by labels and link them to your Todoist tasks.
A lightweight, simplified, RedNotebook-inspired journal/diary app. Built with Electron. Makes dated text files.
View and plan your life in an online calendar by visually by seeing it from days to decades
search projects, people, and tags