- Log workforce sync errors to backend stdout so they appear in docker logs
- Extend error flash from 5s to 15s so errors are readable
- Replace sendBeacon (POST-only) with keepalive fetch (PUT) on unload —
sendBeacon was hitting 404s on all three unload saves
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The /hk-planner/api/auth/ → central auth nginx block was missing, causing
logout to hit the app backend. Also corrects the logout URL and switches from
window.location.href='/' to reload(). Shows name + email in sidebar footer.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Workforce's automatic_break_length is a payroll deduction setting, not a
scheduling field — applying it when no explicit breaks are present was silently
shortening all shifts (e.g. a 2h shift showing as 1.5h). Now only deducts
explicit break records from s.breaks. Also adds BUILD_VERSION to /health and
an UpdateBanner that prompts staff to reload when a new deploy lands.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename 'Category Settings' to 'Settings' (nav, page title, component)
- Move Recurring General Tasks and Time Requirements editing to Settings page
- Planner still loads both for calcRequired calculations
- Add date-specific Adjustments section to Planner: per-date +/- hour
offsets keyed by YYYY-MM-DD (non-recurring); feed into Required Hours total
- Adjustments row shown in Required Hours tfoot when non-zero
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Housekeeping workload and hours planning app — port of the WP hotel
housekeeping hours calculator plugin. 7-day occupancy planner with
Newbook PMS integration, staff rota, time requirements, and pickup tracking.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>