Full-stack application
E-Cuti
A role-based personnel leave monitoring system with balance management, evidence uploads, analytics, reporting, and audit trails.
Problem and requirements
Personnel leave administration needs to combine personnel data, leave types, quotas, dates, evidence files, and change history. Without a central system, operators must maintain leave records and analytics separately, while supervisors need a quick view of activity and trends.
E-Cuti was built as an internal system for recording and monitoring personnel leave. Administrators manage operational data, while supervisors receive monitoring dashboards, history, leave calendars, and analytics without access to unrelated administrative functions.
Application implementation
The FastAPI backend provides JWT authentication and separate APIs for users, personnel, leave types, leave records, holidays, dashboards, reports, and audit logs. The React and TypeScript frontend provides dashboards, personnel management, leave records, analytics, and audit pages for the super_admin, admin, and atasan roles.
Leave records validate the personnel record, active leave type, gender restrictions, duration, dates, and quota. Each record stores a remaining-balance snapshot. When leave data changes, related balances are recalculated by start date and creation order so historical corrections are reflected in later records.
Personnel Excel import does not depend on a rigid header row. The system searches for headers flexibly, preserves NRP values as strings, normalises birth dates, handles duplicates, and returns counts for added, updated, skipped, and failed rows. Personnel data can also be exported with leave history and balances.
Dashboard and reporting
The dashboard presents total leave records, current-month activity, average duration, personnel currently on leave, recent activity, leave-type distribution, leave calendar, holidays, birthdays, and insights such as the highest leave frequency or duration.
Analytics provides filters for period, leave type, department, and personnel, with quick filters for common date ranges. Results are available as summaries and charts, then can be printed or exported to PDF and Excel for administrative use.
Security and operations
User passwords are hashed with bcrypt and login sessions issue expiring JWTs. The backend separates admin, super admin, and supervisor access, while audit records capture login, personnel changes, leave operations, user changes, password resets, leave-type changes, IP address, user agent, status, and change details.
Change notifications are broadcast through WebSocket to connected clients. The frontend displays toasts, stores a limited notification history, refreshes relevant pages, and reconnects with heartbeat support. A scheduler retrieves holiday data periodically, while a maintenance task removes audit records older than 365 days.
The application supports SQLite for local setup and MySQL through Docker Compose. Nginx proxies API and WebSocket traffic to FastAPI, evidence uploads use persistent storage, and deployment is documented through GitHub Actions, SSH, PM2, and health checks. The repository does not show an automated backend functional test suite, so full production security is not claimed.



