Skip to content

Repository files navigation

ZeitPal Logo

ZeitPal

Modern Leave Management for Teams
GDPR-compliant absence management built for the modern workplace. Free for non-commercial use.

Features β€’ Demo β€’ Quick Start β€’ Deployment β€’ Contributing β€’ License

GitHub Stars GitHub Forks License CI Status

Next.js 15 TypeScript Tailwind CSS Supabase


Why ZeitPal?

Managing employee leave shouldn't require expensive enterprise software or endless Excel spreadsheets. ZeitPal is a free for non-commercial use solution that makes leave management simple, transparent, and compliant with European data protection regulations.

Free for teams up to 20 employees β€” no credit card, no hidden fees.

Key Benefits

  • Save 5+ hours per month on administrative tasks
  • Setup in under 15 minutes β€” no training required
  • 100% GDPR compliant β€” data hosted in the EU
  • German labor law support β€” including state-specific holidays

Features

Core Functionality

Feature Description
Leave Requests Submit and approve leave requests with one click
Team Calendar Visual overview of team availability and absences
Sick Leave Digital sick leave reporting with certificate reminders
Leave Balances Automatic calculation of remaining days, carryover, and pro-rata
Approval Workflows Flexible approval chains for different absence types
Notifications Email and Slack notifications for requests and approvals

For Growing Teams (21+ employees)

  • Advanced reports and analytics
  • Multiple team management
  • Slack and Google Calendar integration
  • Custom leave types
  • Priority support

For Enterprises (100+ employees)

  • SSO/SAML authentication
  • API access
  • Dedicated account manager
  • SLA guarantee
  • On-premise deployment option

Demo

🌐 Live Demo: https://zeitpal.com

Screenshots

Dashboard Team Calendar

Leave Request Reports


Tech Stack

ZeitPal is built with modern, production-ready technologies:

Technology Purpose
Next.js 15 React framework with App Router
TypeScript Type-safe JavaScript
Tailwind CSS v4 Utility-first CSS framework
Supabase PostgreSQL database & authentication
Turborepo Monorepo build system
Shadcn UI Accessible component library
i18next Internationalization (DE/EN)
React Query Data fetching and caching
Zod Schema validation
Playwright End-to-end testing

Quick Start

Prerequisites

  • Node.js 18.x or later
  • Docker (for local Supabase)
  • pnpm (package manager)

Installation

# Clone the repository
git clone https://github.com/cderinbogaz/zeitpal.git
cd zeitpal

# Install dependencies
pnpm install

# Start Supabase (requires Docker)
pnpm run supabase:web:start

# Start the development server
pnpm run dev

Open http://localhost:3000 to see ZeitPal running.

Supabase Dashboard

Access the local Supabase dashboard at http://localhost:54323 to manage your database.


Project Structure

zeitpal/
β”œβ”€β”€ apps/
β”‚   └── web/                    # Next.js application
β”‚       β”œβ”€β”€ app/
β”‚       β”‚   β”œβ”€β”€ (marketing)/    # Public marketing pages
β”‚       β”‚   β”œβ”€β”€ auth/           # Authentication pages
β”‚       β”‚   └── home/           # Protected app pages
β”‚       β”œβ”€β”€ supabase/           # Database & migrations
β”‚       └── config/             # App configuration
β”‚
β”œβ”€β”€ packages/
β”‚   β”œβ”€β”€ ui/                     # Shared UI components
β”‚   └── features/               # Core feature packages
β”‚       └── auth/               # Authentication logic
β”‚
└── docs/                       # Documentation

Configuration

Environment Variables

Create a .env.local file in apps/web/ with:

# Site Configuration
NEXT_PUBLIC_SITE_URL=http://localhost:3000
NEXT_PUBLIC_PRODUCT_NAME=ZeitPal

# Supabase (local defaults)
NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

# Theme
NEXT_PUBLIC_DEFAULT_THEME_MODE=light
NEXT_PUBLIC_THEME_COLOR=#7c3aed

See Environment Variables for the full list.


Deployment

Cloudflare Pages (Recommended)

# Build for production
pnpm run build

# Deploy to Cloudflare
npx wrangler pages deploy apps/web/.next

Vercel

Deploy with Vercel

Docker

docker build -t zeitpal .
docker run -p 3000:3000 zeitpal

Production Supabase

  1. Create a Supabase project
  2. Push migrations: pnpm --filter web supabase db push
  3. Set callback URL: <your-url>/auth/callback
  4. Update environment variables

Development

Available Scripts

# Development
pnpm run dev              # Start development server

# Code Quality
pnpm run lint             # Run ESLint
pnpm run format:fix       # Format code with Prettier
pnpm run typecheck        # TypeScript validation

# Database
pnpm run supabase:web:start   # Start local Supabase
pnpm run supabase:web:stop    # Stop local Supabase
pnpm run supabase:web:reset   # Reset database
pnpm run supabase:web:typegen # Generate TypeScript types

# Testing
pnpm run test             # Run tests

Creating Database Migrations

pnpm --filter web supabase migration new --name <migration-name>
pnpm run supabase:web:reset

Contributing

We love contributions! ZeitPal is a source-available project and we welcome developers of all skill levels.

How to Contribute

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/cderinbogaz/zeitpal.git
  3. Create a branch: git checkout -b feature/amazing-feature
  4. Make your changes
  5. Test your changes: pnpm run lint && pnpm run typecheck
  6. Commit: git commit -m 'Add amazing feature'
  7. Push: git push origin feature/amazing-feature
  8. Open a Pull Request

Good First Issues

Looking for a place to start? Check out issues labeled good first issue.

Development Guidelines

  • Follow the existing code style
  • Write meaningful commit messages
  • Add tests for new features
  • Update documentation as needed
  • Keep PRs focused and small

Roadmap

  • Mobile app (React Native)
  • Calendar integrations (Outlook, Apple Calendar)
  • HR system integrations (Personio, HRworks)
  • AI-powered leave suggestions
  • Multi-language support (FR, ES, IT)
  • Advanced analytics dashboard

See the open issues for a full list of proposed features.


Community


Support


Sponsors

ZeitPal is free for non-commercial use. If you find it useful, please consider sponsoring:

Sponsor

License

This project is licensed under a Non-Commercial License β€” free for personal and educational use. For commercial use, please contact enterprise@zeitpal.com. See the LICENSE file for details.


Acknowledgments

Built with love using:


⭐ Star this repo if you find ZeitPal useful!

Made with ❀️ in Germany

About

Free leave tracking for everyone

Resources

Contributing

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages