No description
Find a file
HR System 070956a7c2
Some checks failed
Build & Push / build (push) Has been cancelled
fix: explicit stack.env reference for Portainer
2026-04-21 19:24:38 +00:00
.forgejo/workflows feat: initial HR system 2026-04-21 18:48:26 +00:00
backend fix: force cache bust, ensure npm install (not npm ci) 2026-04-21 19:21:30 +00:00
frontend feat: initial HR system 2026-04-21 18:48:26 +00:00
nginx feat: initial HR system 2026-04-21 18:48:26 +00:00
.env.example fix: explicit stack.env reference for Portainer 2026-04-21 19:24:38 +00:00
.gitignore feat: initial HR system 2026-04-21 18:48:26 +00:00
docker-compose.yml fix: explicit stack.env reference for Portainer 2026-04-21 19:24:38 +00:00
README.md feat: initial HR system 2026-04-21 18:48:26 +00:00

HR System — Personalverwaltung

Einfache, selbst-gehostete HR-Software für kleine und mittlere Unternehmen. Inspiriert von timeoff.management.

Features

  • Mitarbeiterverwaltung — Profile, Stammdaten, Vertragsdetails, Avatar
  • Zeiterfassung — Kommen/Gehen, Pausen, Genehmigungsworkflow
  • Abwesenheitsverwaltung — Urlaub, Krank, Homeoffice, Sonderurlaub u.v.m.
  • Kalenderansicht — Alle Abwesenheiten auf einen Blick
  • Notizen & Dateien — Pro Mitarbeiter, mit Sichtbarkeitssteuerung (nur HR oder auch Mitarbeiter)
  • Rollen — Admin / HR (voller Zugriff) und Mitarbeiter (eigene Daten)
  • Mobile-first — Responsive Design, funktioniert auf jedem Gerät
  • Docker-Deployment — Läuft mit einem einzigen Befehl

Schnellstart

1. Repository klonen

git clone https://forgejo.thiel.tools/thiel/haer.git
cd haer

2. Konfiguration anlegen

cp .env.example .env

Wichtig: .env anpassen — mindestens JWT_SECRET auf einen langen Zufallsstring setzen:

HOST_PORT=8742
JWT_SECRET=mein-sehr-langes-zufaelliges-geheimnis-abc123xyz
ADMIN_EMAIL=admin@meinefirma.de
ADMIN_PASSWORD=sicheresPasswort!

3. Starten

docker compose up -d --build

Die App ist dann erreichbar unter: http://localhost:8742

Standard-Login:

  • E-Mail: admin@company.com (oder was in .env gesetzt)
  • Passwort: admin123 (oder was in .env gesetzt)

⚠️ Passwort nach dem ersten Login sofort ändern!


Architektur

nginx (Port 8742)
├── /api/*     → backend (Node.js + Express, Port 3001)
├── /uploads/* → backend (statische Dateien)
└── /*         → frontend (React + Vite, Nginx)

Daten:
├── hr_data    (Docker Volume) → SQLite-Datenbank
└── hr_uploads (Docker Volume) → Hochgeladene Dateien & Avatare
Dienst Technologie
Frontend React 18, Vite, Tailwind
Backend Node.js, Express
Datenbank SQLite (via better-sqlite3)
Auth JWT (7 Tage gültig)
Proxy Nginx

Rollen & Berechtigungen

Funktion Mitarbeiter HR / Admin
Eigenes Profil sehen & bearbeiten
Eigene Zeiten erfassen
Abwesenheit beantragen
Andere Mitarbeiter sehen
Anträge genehmigen/ablehnen
Notizen & Dateien anlegen
Login für Mitarbeiter erstellen
HR-interne Notizen sehen

Notizen & Dateien — Sichtbarkeit

Beim Anlegen von Notizen und Dateien kann HR wählen:

  • „Nur HR" — nur HR-Mitarbeiter und Admins sehen den Eintrag
  • „Mitarbeiter kann sehen" — der betroffene Mitarbeiter sieht ihn in seinem Profil

Produktionsbetrieb

Hinter einem Reverse Proxy (empfohlen)

Wenn die App hinter Caddy, Traefik oder einem anderen Proxy läuft, HOST_PORT auf einen internen Port setzen und SSL am äußeren Proxy terminieren.

Beispiel Caddy:

meinefirma.de {
    reverse_proxy localhost:8742
}

Port ändern

HOST_PORT=9000   # in .env anpassen

Backup

Die Daten liegen in Docker-Volumes. Backup:

# Datenbank
docker run --rm -v hr-system_hr_data:/data -v $(pwd):/backup alpine \
  tar czf /backup/hr-backup-$(date +%Y%m%d).tar.gz /data

# Uploads
docker run --rm -v hr-system_hr_uploads:/data -v $(pwd):/backup alpine \
  tar czf /backup/hr-uploads-$(date +%Y%m%d).tar.gz /data

Update

git pull
docker compose up -d --build

Lokale Entwicklung

Backend

cd backend
npm install
cp ../.env.example .env
# DB_PATH und UPLOAD_PATH auf lokale Pfade setzen
node src/index.js

Frontend

cd frontend
npm install
npm run dev
# läuft auf http://localhost:5173
# API-Proxy auf http://localhost:3001 (vite.config.js)

Lizenz

MIT — frei verwendbar und modifizierbar.