Schichtenplaner

A web application for planning and distributing work shifts among employees. Manage your team's schedules, handle employee availability, and automatically generate optimized shift plans.

Features

  • Employee management with availability tracking
  • Shift plan creation and management
  • Automated scheduling optimization using constraint programming (OR-Tools CP-SAT)
  • Excel export functionality
  • User authentication with JWT
  • Responsive web interface

For Developers

Tech Stack

Frontend:

  • React 19 with TypeScript
  • Vite 6 (build tool & dev server)
  • React Router DOM (routing)
  • date-fns (date handling)
  • Framer Motion (animations)

Backend:

  • Express.js with TypeScript
  • SQLite3 (database)
  • JWT authentication
  • Helmet (security headers)
  • express-rate-limit (rate limiting)
  • OR-Tools CP-SAT (Python - scheduling optimization)
  • ExcelJS (Excel exports)

Infrastructure:

  • npm workspaces (monorepo)
  • Docker support

Prerequisites

  • Node.js (v18+)
  • Python 3 with OR-Tools (pip install ortools)
  • npm

Getting Started

# Install dependencies
npm install

# Run development server (frontend + backend)
npm run dev

# Build all packages
npm run build:all

Project Structure

schichtenplaner/
├── frontend/     # React application
├── backend/      # Express API server
├── premium/      # Premium features (optional)
└── package.json  # Root monorepo config

Available Scripts

Command Description
npm run dev Start both frontend and backend in development mode
npm run dev:frontend Start frontend only
npm run dev:backend Start backend only
npm run build:all Build frontend and backend
npm run docker:build Build Docker image
npm run docker:run Run Docker container

Environment Variables

The backend requires these environment variables in production:

  • NODE_ENV - Set to production or development
  • JWT_SECRET - Secret key for JWT token signing
  • TRUST_PROXY_ENABLED - Enable/disable proxy trust (default: true)
  • TRUSTED_PROXY_IPS - Comma-separated list of trusted proxy IPs

🧾 License

This project uses a dual license model:

  • Community Edition: Licensed under MIT for personal and non-commercial use.
  • Commercial Edition: A commercial license is required for any for-profit or business use.

To obtain a commercial license, contact:
📧 patrick@mahnke-hartmann.dev

License: MIT & Commercial

Description
From github
Readme MIT 3 MiB
Languages
TypeScript 94.1%
Python 3.5%
CSS 1.4%
HTML 0.4%
Dockerfile 0.3%
Other 0.3%