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.