v1.0.19
Probation review tracking, accurate leave carry-over, and a stricter browser security policy
This release adds Probation Milestone Tracking — a new employee event that sits alongside birthdays and work anniversaries on the dashboard and calendar, with automated reminder emails so a probation review never quietly slips past its date. It also lands a substantial correctness pass on leave carry-over, where the balance shown on the calendar and the balance the booking form enforced could disagree. Rounding it out: leave allowance becomes a proper administrator control, the browser-side security policy is now enforced rather than advisory, and product analytics is added under the existing consent flow.
Probation Milestone Tracking
- Probation period on every employee — When creating or editing an employee you can now set a probation period of None, 3 Months, or 6 Months. The Add User form also gained a Hire Date field, so a new starter can be set up with their probation in one pass.
- The review date calculates itself — The probation review date is derived from the hire date plus the probation period (hired Jan 15 on a 3-month probation → review due Apr 15). Both the employee form and the Add User form show a live preview of the resulting date as you choose, and month-end dates are handled sensibly — a Nov 30 hire on a 3-month probation reviews on Feb 28 (or Feb 29 in a leap year), never spilling into March.
- Extend probation when you need to — Administrators can override the calculated date with a custom Probation Review Date. When set, it takes precedence everywhere the milestone appears and is labelled as extended, so it is obvious the date was moved by hand rather than calculated.
- On the dashboard and the calendar — Probation reviews now render as their own employee event, using a dedicated icon and colour distinct from birthdays and work anniversaries, with a tooltip naming the employee, the probation length, and whether it was extended. Managers can spot an upcoming or overdue review at a glance without working the date out by hand.
- On the employee profile — The Job tab now shows Hire Date, Probation Period, and the calculated (or overridden) Probation Review Date together, giving HR a single reference point when reviewing someone's record.
- Automated reminder emails — A reminder now goes out 14 days before, 7 days before, and on the probation review date. Each email carries the employee's name, position, department, hire date, probation length, and review date, plus a direct link to their profile so the reviewer can start immediately. A matching in-app notification is raised at the same time.
- Choose who gets reminded — Reminder recipients are configurable per organization from the notification settings: the employee's direct manager, their department head, all administrators, all executives, or any combination. Reminders can also be switched off organization-wide. Manager and department head are resolved per employee, so each reminder reaches the people who actually run that person's review.
- Reminders follow the employee's calendar — The countdown to a review is evaluated in the employee's own timezone (falling back to the organization's), so a review due "today" means today where that person works, not where the server happens to run.
- Probation status stays confidential — Unlike a birthday, whether someone is on probation is only visible to the employee themselves, their direct manager, their department head, and administrators or executives. Other colleagues simply do not see the milestone.
Leave carry-over accuracy
- The calendar and the booking form now agree — A user with a custom allowance plus a manual carry-over adjustment could see one figure on their calendar balance card and be told a different, smaller number when they tried to book. Every place that computes a leave balance — the balance card, the dashboard people list, the booking check, and the leave edit check — now runs through one shared calculation, so the number you are shown is the number that is enforced.
- Carry-over no longer repeats every year — A manual carry-over adjustment is now anchored to the fiscal year it was granted for. Previously an adjustment had no year of its own, so every subsequent fiscal year kept counting it — days granted for one year still appeared in the next.
- No more double-counted carried days — The allowance tile on the balance card was adding carried days on top of a total that already included them, so someone with 15 base days plus 5 carried read "16 / 25 days" instead of "16 / 20". The tile now shows the entitlement before carry-over, so the row reads base + carried − used = remaining.
- Bookings check the right year — A leave request is now balanced against the fiscal year the leave actually falls in, rather than the year the request happens to be filed in. Booking next January's holiday in December is checked against next year's allowance.
- Expired adjustments clear themselves — Once a carry-over adjustment's expiry date passes, the days stop counting toward the balance and the figure is now cleared from the profile automatically. Previously it lingered on the record and an administrator had to zero it by hand.
- A week's warning before days lapse — A new daily reminder notifies the employee's department head — falling back to administrators and executives when they have no manager — seven days before a carry-over adjustment expires, in-app and by email, so someone can extend the expiry or top the days up before they are lost. Day counting runs in the employee's own timezone, and the reminder cannot fire twice for the same adjustment.
- Clearer allowance wording — The Leave Allowance tab now names the fiscal year an adjustment applies to and states that the days are cleared automatically afterwards, instead of implying they are permanent.
Permissions
- Leave allowance is an administrator control — The fields that decide how many paid days someone can book — custom allowance, carry-forward settings, and carry-over days — are now restricted to administrators and executives organization-wide, and to department heads for members of their own department. Nobody can change their own.
- Probation is an administrator control — Probation period and the probation review date override are restricted the same way, so the date that drives the reminder emails cannot be moved by the person being reviewed.
Privacy & Security
- Stricter browser security policy, now enforced — The application's content security policy moved from advisory to actively enforced, so the browser blocks anything outside the vetted allowlist. Additional cross-origin isolation protections were added at the same time, and the server no longer advertises its underlying framework in responses.
- Security disclosure contact published — The application now publishes a standard machine-readable security contact so researchers have a clear route to report an issue.
- Dependency security updates — Third-party dependencies flagged by automated security scanning were updated to patched releases across the tree, with the full test suite and a production build verified on the new versions.
Product analytics & consent
- Product analytics added under the analytics consent category — A product-analytics tool was added to help us understand how features are actually used. It loads only after a visitor grants analytics consent, only on our own canonical web domains, and never inside the mobile app's web session or on white-label customer domains. Withdrawing analytics consent switches it off immediately.
- Everyone is asked to consent again — Because a new vendor joined the analytics category, the consent banner reappears once for every visitor, with no pre-ticked toggles and nothing loading until a fresh choice is made. The new vendor is disclosed by name in the cookie Customize panel and the category description was updated to match.
Fixes
- Icons render across the app again — Icons are now bundled with the application rather than fetched at runtime, restoring them everywhere under the enforced security policy and removing a network round trip on every page.
- Document and PDF previews render again — Document previews, template detail views, expense receipt viewing, and the personal data-drive preview all display correctly under the enforced policy.
- Location maps render again — The map pane on the document and timesheet location views displays again, including for organizations without their own maps key configured.
Behind the scenes
- Probation review dates resolve through a single shared implementation used by the server, the dashboard, the calendar, the profile, and the reminder job — so a date shown in the UI can never disagree with the date a reminder fires on. Leave carry-over math was consolidated the same way, replacing four drifting copies with one.
- All calendar-day handling in the new code follows the project's date-only convention, with regression tests exercising non-UTC organization timezones on both sides of UTC, month-end clamping, and leap years.
- Demo data now includes probation periods, extended reviews, and reminder recipients, so the demo environment reflects the new feature.
Full Changelog: https://github.com/anhourtec/BookYourPTO-SaaS/compare/v1.0.18...v1.0.19