← Back / Projects / Leave Management App
Realization 2025

Leave Management App

Next.js 16 + Socket.IO + Traefik — production HR system for people operations teams.

Year
2025
Type
Realization

Where the project came from

Leave Management App is a multi-tenant SaaS HR tool — a comprehensive system for managing vacations, sick leaves, and hour settlements. The system is fully compliant with Polish labor law: automatic vacation day accrual, year-to-year balance carry-over with September 30 expiration, on-demand days (up to 4 per year), and legal report generation. Traefik as a reverse proxy enables serving multiple companies from a single instance with per-tenant isolation.

What was hard

Companies manage vacations in Excel or on paper — this leads to balance errors, missing request history, difficulty with reporting, and no real-time visibility of who is on leave. At the same time, the system must comply with Polish labor law (balance carry-overs, expiration, on-demand days), support multiple companies (multi-tenant), and send notifications through multiple channels.

How I solved it

I built a full-stack Next.js 16 application with a custom Node.js server integrating Socket.IO — the standard next start does not support WebSockets in production, so server.ts binds the HTTP server together with Socket.IO. shadcn/ui with a Neo-Brutalist theme (zero border-radius, heavy borders, hard shadows) gives the app a distinctive character. better-auth provides session-based authentication with three roles (SUPER_ADMIN, ADMIN, EMPLOYEE). RBAC based on wildcard patterns (e.g., vacations.*) gives flexible permission control. Notifications work across three channels: Socket.IO (real-time), email (Nodemailer), and web push (VAPID).

Result

A production HR system deployed across multiple clients — handles the full vacation workflow: request submission, multi-level approval, real-time notifications, calendar with holiday overlay, PDF and Excel report export, department-level statistics, and multi-tenant deployment via Traefik.

Have a similar project?

Let's talk.

Write to me →