[{"data":1,"prerenderedAt":1304},["ShallowReactive",2],{"$f1u4mpxwt6s7l":3,"mdc-xacwse-key":29,"mdc-vrndgb-key":285,"mdc--s3pq0m-key":329,"mdc-7wu2bl-key":456},{"page":4,"perPage":5,"total":6,"totalPages":4,"releases":7},3,10,24,[8,14,19,24],{"tag":9,"name":9,"publishedAt":10,"url":11,"prerelease":12,"markdown":13},"v1.0.3","2026-02-26T20:42:47Z","https:\u002F\u002Fgithub.com\u002Fanhourtec\u002FBookYourPTO-SaaS\u002Freleases\u002Ftag\u002Fv1.0.3",false,"## New Features\r\n\r\n#### Per-User Holiday Override Toggle\r\n- Added a \"Use custom holidays instead of organization defaults\" toggle to the **Edit User > Holiday Overrides** tab\r\n- When enabled, the user no longer follows the organization's public holidays — admins can configure a custom country, exclude specific holidays, or add custom ones\r\n- When disabled, the toggle clears any previously set custom holiday country\u002Fregion and the user reverts to organization defaults\r\n- Dashboard calendar, leave requests, public holidays, and email digests all respect the new setting\r\n\r\n#### Carry-Over Expiry Date\r\n- The carry-over balance now supports an optional expiry date — expired carry-over days are automatically excluded from balance calculations\r\n- Expiry is evaluated using the organization's timezone to prevent off-by-one date issues across time zones\r\n- The expiry date is cleared automatically when carry-over balance is set to zero\r\n\r\n#### Improved Leave Balance Calculations\r\n- Manual carry-over adjustments are now included on top of automated carry-forward calculations in balance views\r\n- User-specific carry-forward day limits now correctly override the organization-level cap\r\n- Carry-forward eligibility threshold is now exposed in organization settings for accurate frontend display\r\n\r\n## Bug Fixes\r\n\r\n#### Date of Birth Timezone Handling\r\n- Fixed date of birth shifting by one day in western timezones (e.g., Feb 25 displaying as Feb 24) by using the organization's timezone instead of UTC\r\n- Prevented selecting future dates in the date of birth picker\r\n\r\n#### Department Filter Toggle\r\n- Fixed the users filter modal where unchecking \"All departments\" did not deselect individual department checkboxes\r\n\r\n#### Leave Balance Carry-Forward Edge Case\r\n- Fixed an issue where setting a user's custom leave allowance to `0` was incorrectly treated as \"use organization default\" instead of zero\r\n\r\n#### Guided Tour Popover Appearing After Logout\r\n- Fixed guided tour popovers occasionally persisting on the login page after signing out\r\n- Tour state is now fully reset on logout, preventing stale tour data from carrying over between sessions\r\n\r\n### Improvements\r\n\r\n#### Quick Edit via Avatar Click\r\n- Clicking a user's avatar on the Users page now opens their Edit Profile modal directly\r\n- Available for Administrators, Executives, and Department Heads (restricted to their own department members)\r\n\r\n\r\n#### Leave Allowance Tab\r\n- Simplified the Edit User leave allowance tab with a cleaner, settings-focused layout\r\n\r\n#### SSO Domain Validation\r\n- Added validation to prevent public email domains (e.g., gmail.com, yahoo.com) from being added to SSO allowed domains\r\n- Instant client-side feedback with inline error messages\r\n\r\n#### Plan Downgrade Handling\r\n- Paid integrations (notification channels, calendar sync) now gracefully pause when an organization downgrades and automatically resume on re-upgrade without losing configuration\r\n",{"tag":15,"name":15,"publishedAt":16,"url":17,"prerelease":12,"markdown":18},"v1.0.2","2026-02-24T06:18:13Z","https:\u002F\u002Fgithub.com\u002Fanhourtec\u002FBookYourPTO-SaaS\u002Freleases\u002Ftag\u002Fv1.0.2","BookYourPTO v1.0.2 — Release Notes                                                                                                                             \r\n                                                                                                                                                                 \r\n  Trusted Devices — Skip 2FA for 30 Days                                                                                                                         \r\n  Employees can now check \"Remember this device for 30 days\" when logging in with 2FA. Trusted devices can be viewed and revoked anytime from Settings > Trusted\r\n  Devices. Disabling 2FA automatically revokes all trusted devices.\r\n\r\n  Slack & Teams Notifications\r\n  Get your BookYourPTO notifications delivered straight to Slack or Microsoft Teams.\r\n  - Personal: Each employee can connect their own webhook in Settings > Connected Apps > Slack & Teams to receive personal notifications (leave approvals,\r\n  rejections, etc.)\r\n  - Organization-wide: Admins can set up a shared channel for team notifications in Settings > Notifications Channel — pick which notification types get posted\r\n\r\n  Settings Redesign\r\n  Calendar Integration and Slack & Teams are now combined under a single \"Connected Apps\" tab with a cleaner tabbed layout.",{"tag":20,"name":20,"publishedAt":21,"url":22,"prerelease":12,"markdown":23},"v1.0.1","2026-02-23T19:43:06Z","https:\u002F\u002Fgithub.com\u002Fanhourtec\u002FBookYourPTO-SaaS\u002Freleases\u002Ftag\u002Fv1.0.1","## Birthday Indicators\r\n  - Users with a date of birth now see a 🎂 pink cake icon on their birthday in the `\u002Fcalendar` yearly view and dashboard calendar grid\r\n  - Hovering shows a \"Birthday\" tooltip (dashboard shows full name)\r\n  - Birthday cells get a subtle pink border and background highlight\r\n\r\n  ## Balance Display Settings\r\n  - **Dashboard badge** — controls which leave balance is shown on each user's avatar badge (Annual \u002F Sick \u002F Both)\r\n  - **Calendar balance summary** — controls which leave buckets appear in the calendar sidebar (Annual \u002F Sick \u002F Both)\r\n  - Configurable from **Settings > General** by administrators and executives\r\n\r\n  ## Birthday Reminder Emails\r\n  - Monthly cron endpoint sends a birthday digest email on the 1st of each month to admins, executives, and department heads\r\n  - Lists all team birthdays sorted by date with name, department, and date\r\n  - Department heads only receive birthdays from their own department\r\n  \r\n  ## Dashboard UX Improvements\r\n  - User names in the dashboard are now clickable links to their `\u002Fcalendar` page (for admins, executives, and same-department heads)\r\n  - Weekend columns have consistent muted background across the full column height",{"tag":25,"name":25,"publishedAt":26,"url":27,"prerelease":12,"markdown":28},"v1.0.0","2026-02-06T04:12:02Z","https:\u002F\u002Fgithub.com\u002Fanhourtec\u002FBookYourPTO-SaaS\u002Freleases\u002Ftag\u002Fv1.0.0","We're excited to announce the first official release of **BookYourPTO** — an all-in-one leave, time tracking, expense, and document management platform for modern teams.\n\nAvailable as an **open-source community edition** for self-hosting and a **cloud-hosted version** with Pro, Business, and Enterprise plans at [bookyourpto.com](https:\u002F\u002Fbookyourpto.com).\n\nDevelopment began on **December 22, 2025**, and v1.0.0 marks the culmination of six weeks of active development.\n\n---\n\n## Core Platform (All Plans)\n\n### Leave Management\n- Submit, approve, reject, and cancel leave requests with full workflow support\n- Configurable leave types with custom allowances and accrual rules\n- Leave balance tracking with fiscal year awareness\n- Leave approvals and policies\n- Dashboard calendar with monthly navigation and team-wide visibility\n- Leave transaction audit trail\n\n### Time Tracking\n- Clock in\u002Fout with real-time timer\n- Manual time entry creation, editing, and deletion\n- Project and task management with client association\n- Billable hours tracking\n- Work schedules with customizable shift patterns\n- Timesheet approvals with individual and bulk actions\n- Geolocation capture for clock-in\u002Fout events\n\n### Expense Management\n- Expense submission with AI-powered receipt scanning\n- Mileage and per diem expense types\n- Receipt upload with secure access via short-lived Redis tokens\n- Expense approval workflow\n- Expense reports with filtering and export\n\n### Digital Document Signing\n- Upload and assign documents to single or multiple recipients\n- ESIGN Act compliant digital signature capture\n- Searchable documents with OCR\n- Document preview, view, sign, and decline workflows\n- Browser timezone capture displayed on signed documents\n- Document encryption for sensitive files\n\n### Notifications\n- In-app notification system with real-time bell indicator\n- Notifications for leave submissions, approvals, rejections, and cancellations\n- Notification management page with mark-as-read, clear-all actions\n- Pending items widget on dashboard with role-based display\n\n### Reports & Exports\n- Leave usage reports with filtering and export\n- Timesheet reports with date range selection\n- Time tracking billing reports\n- Security audit log export (CSV)\n- Sign-in log export\n\n### Calendar Integrations\n- Google Calendar sync for approved leave events\n- Microsoft Outlook calendar integration\n- iCal feed support for any calendar application\n\n### Role-Based Access Control\n- Four roles: Employee, Department Head, Administrator, Executive\n- Department Head role for team-level approvals and oversight\n- Role-based permissions across all modules\n- Granular permissions system with per-user overrides\n- Designate approvers with cross-department approval capabilities\n- Locked dates to prevent bookings on specific dates (admin\u002Fexecutive controlled)\n- Executive override for booking on locked dates\n- Project member roles: Owner, Manager, Member\n\n### Authentication & Security\n- JWT-based authentication with refresh token rotation\n- Force password change on first login\n- Redis rate limiting on authentication endpoints\n- Token audit logging\n- Sign-in logs with export\n\n---\n\n## Pro Plan Features\n\n- Up to 10 users\n- 500 receipts\u002Fmonth\n- 1,000 documents with OCR\n- Email support\n\n## Business Plan Features\n\n- Up to 30 users\n- Unlimited receipts and documents with OCR\n- Advanced approval workflows\n- Custom reports\n- Email digest notification system with daily\u002Fweekly scheduling\n- Multi-currency expense support with role-based visibility\n\n### White-Labeling\n- Branding settings with logo, colors, and theme configuration\n- Domain-specific branding (custom domains show org branding)\n- Branding API with cache-control headers\n\n### Auth0 Integration (OIDC)\n- Enterprise Single Sign-On via Auth0\n- Configurable \"Enable Auth0\" and \"Require Auth0 Login\" settings\n- SSO enforcement option for organizations\n- Auto-create users on first SSO login with configurable default role and department\n\n### Audit Logs\n- Comprehensive audit logs with entity types for all modules\n- Security violations tracking and management\n- Time tracking compliance dashboard\n\n### Custom Domains\n- Custom domain support with DNS verification\n- Single custom domain per organization enforcement\n- Public branding endpoint for unauthenticated access\n\n### Priority Support\n\n## Enterprise Plan Features\n\n- Unlimited users\n- Everything in Business\n- Custom limits\n- Dedicated support\n- SLA guarantee\n\n---\n\n## Stripe Billing\n\n- Subscription management with plan-based feature gating\n- Checkout session creation with discount\u002Fcoupon support\n- Invoice tracking and billing history\n- Webhook processing with idempotency protection\n- Plan limits enforced across all API endpoints\n- Plan-based UI gating in settings\n- Refund processing with hardened input validation\n- Free plan default for new organizations\n\n## Email System\n\n- Configurable SMTP settings per organization\n- Test email functionality for verifying configuration\n- Branded email templates with organization logo support\n- Fallback to platform SMTP logo when org has no custom logo\n- Email notifications for leave workflows, document assignments, and more\n\n## Organization & Multi-Tenancy\n\n- Multi-tenant architecture with organization-scoped data isolation\n- Organization onboarding workflow\n- Department management (create, update, delete)\n- User management with role-based access control (Employee, Department Head, Administrator, Executive)\n- Organization statistics dashboard\n- Data backup\u002Fexport endpoint\n\n## Public Holidays\n\n- Country-based public holiday management\n- Regional subdivision holiday support\n- Per-user holiday override system\n- Dashboard calendar displays user-specific holidays\n\n## Infrastructure & Deployment\n\n- Docker containerization with multi-stage builds\n- Docker Compose with PostgreSQL, Redis, and application services\n- Environment variable configuration for all services (Stripe, SMTP, OAuth)\n- Persistent document storage via Docker volumes\n- Nuxt 3 full-stack framework\n- Prisma ORM with PostgreSQL\n- Redis for caching, rate limiting, and session management\n- Cloudflare integration for domain management\n\n## UI\u002FUX\n\n- Responsive design across all pages (mobile, tablet, desktop)\n- Dark\u002Flight mode support\n- App Launcher navigation for unified approvals and reports\n- Sticky dashboard calendar with team visibility\n- Custom modal components with scroll support and mobile optimization\n- Area charts for analytics visualization",{"data":30,"body":31},{},{"type":32,"children":33},"root",[34,43,50,83,89,107,113,131,137,143,156,162,170,176,193,199,212,219,225,238,244,252,258,271,277],{"type":35,"tag":36,"props":37,"children":39},"element","h2",{"id":38},"new-features",[40],{"type":41,"value":42},"text","New Features",{"type":35,"tag":44,"props":45,"children":47},"h4",{"id":46},"per-user-holiday-override-toggle",[48],{"type":41,"value":49},"Per-User Holiday Override Toggle",{"type":35,"tag":51,"props":52,"children":53},"ul",{},[54,68,73,78],{"type":35,"tag":55,"props":56,"children":57},"li",{},[58,60,66],{"type":41,"value":59},"Added a \"Use custom holidays instead of organization defaults\" toggle to the ",{"type":35,"tag":61,"props":62,"children":63},"strong",{},[64],{"type":41,"value":65},"Edit User > Holiday Overrides",{"type":41,"value":67}," tab",{"type":35,"tag":55,"props":69,"children":70},{},[71],{"type":41,"value":72},"When enabled, the user no longer follows the organization's public holidays — admins can configure a custom country, exclude specific holidays, or add custom ones",{"type":35,"tag":55,"props":74,"children":75},{},[76],{"type":41,"value":77},"When disabled, the toggle clears any previously set custom holiday country\u002Fregion and the user reverts to organization defaults",{"type":35,"tag":55,"props":79,"children":80},{},[81],{"type":41,"value":82},"Dashboard calendar, leave requests, public holidays, and email digests all respect the new setting",{"type":35,"tag":44,"props":84,"children":86},{"id":85},"carry-over-expiry-date",[87],{"type":41,"value":88},"Carry-Over Expiry Date",{"type":35,"tag":51,"props":90,"children":91},{},[92,97,102],{"type":35,"tag":55,"props":93,"children":94},{},[95],{"type":41,"value":96},"The carry-over balance now supports an optional expiry date — expired carry-over days are automatically excluded from balance calculations",{"type":35,"tag":55,"props":98,"children":99},{},[100],{"type":41,"value":101},"Expiry is evaluated using the organization's timezone to prevent off-by-one date issues across time zones",{"type":35,"tag":55,"props":103,"children":104},{},[105],{"type":41,"value":106},"The expiry date is cleared automatically when carry-over balance is set to zero",{"type":35,"tag":44,"props":108,"children":110},{"id":109},"improved-leave-balance-calculations",[111],{"type":41,"value":112},"Improved Leave Balance Calculations",{"type":35,"tag":51,"props":114,"children":115},{},[116,121,126],{"type":35,"tag":55,"props":117,"children":118},{},[119],{"type":41,"value":120},"Manual carry-over adjustments are now included on top of automated carry-forward calculations in balance views",{"type":35,"tag":55,"props":122,"children":123},{},[124],{"type":41,"value":125},"User-specific carry-forward day limits now correctly override the organization-level cap",{"type":35,"tag":55,"props":127,"children":128},{},[129],{"type":41,"value":130},"Carry-forward eligibility threshold is now exposed in organization settings for accurate frontend display",{"type":35,"tag":36,"props":132,"children":134},{"id":133},"bug-fixes",[135],{"type":41,"value":136},"Bug Fixes",{"type":35,"tag":44,"props":138,"children":140},{"id":139},"date-of-birth-timezone-handling",[141],{"type":41,"value":142},"Date of Birth Timezone Handling",{"type":35,"tag":51,"props":144,"children":145},{},[146,151],{"type":35,"tag":55,"props":147,"children":148},{},[149],{"type":41,"value":150},"Fixed date of birth shifting by one day in western timezones (e.g., Feb 25 displaying as Feb 24) by using the organization's timezone instead of UTC",{"type":35,"tag":55,"props":152,"children":153},{},[154],{"type":41,"value":155},"Prevented selecting future dates in the date of birth picker",{"type":35,"tag":44,"props":157,"children":159},{"id":158},"department-filter-toggle",[160],{"type":41,"value":161},"Department Filter Toggle",{"type":35,"tag":51,"props":163,"children":164},{},[165],{"type":35,"tag":55,"props":166,"children":167},{},[168],{"type":41,"value":169},"Fixed the users filter modal where unchecking \"All departments\" did not deselect individual department checkboxes",{"type":35,"tag":44,"props":171,"children":173},{"id":172},"leave-balance-carry-forward-edge-case",[174],{"type":41,"value":175},"Leave Balance Carry-Forward Edge Case",{"type":35,"tag":51,"props":177,"children":178},{},[179],{"type":35,"tag":55,"props":180,"children":181},{},[182,184,191],{"type":41,"value":183},"Fixed an issue where setting a user's custom leave allowance to ",{"type":35,"tag":185,"props":186,"children":188},"code",{"className":187},[],[189],{"type":41,"value":190},"0",{"type":41,"value":192}," was incorrectly treated as \"use organization default\" instead of zero",{"type":35,"tag":44,"props":194,"children":196},{"id":195},"guided-tour-popover-appearing-after-logout",[197],{"type":41,"value":198},"Guided Tour Popover Appearing After Logout",{"type":35,"tag":51,"props":200,"children":201},{},[202,207],{"type":35,"tag":55,"props":203,"children":204},{},[205],{"type":41,"value":206},"Fixed guided tour popovers occasionally persisting on the login page after signing out",{"type":35,"tag":55,"props":208,"children":209},{},[210],{"type":41,"value":211},"Tour state is now fully reset on logout, preventing stale tour data from carrying over between sessions",{"type":35,"tag":213,"props":214,"children":216},"h3",{"id":215},"improvements",[217],{"type":41,"value":218},"Improvements",{"type":35,"tag":44,"props":220,"children":222},{"id":221},"quick-edit-via-avatar-click",[223],{"type":41,"value":224},"Quick Edit via Avatar Click",{"type":35,"tag":51,"props":226,"children":227},{},[228,233],{"type":35,"tag":55,"props":229,"children":230},{},[231],{"type":41,"value":232},"Clicking a user's avatar on the Users page now opens their Edit Profile modal directly",{"type":35,"tag":55,"props":234,"children":235},{},[236],{"type":41,"value":237},"Available for Administrators, Executives, and Department Heads (restricted to their own department members)",{"type":35,"tag":44,"props":239,"children":241},{"id":240},"leave-allowance-tab",[242],{"type":41,"value":243},"Leave Allowance Tab",{"type":35,"tag":51,"props":245,"children":246},{},[247],{"type":35,"tag":55,"props":248,"children":249},{},[250],{"type":41,"value":251},"Simplified the Edit User leave allowance tab with a cleaner, settings-focused layout",{"type":35,"tag":44,"props":253,"children":255},{"id":254},"sso-domain-validation",[256],{"type":41,"value":257},"SSO Domain Validation",{"type":35,"tag":51,"props":259,"children":260},{},[261,266],{"type":35,"tag":55,"props":262,"children":263},{},[264],{"type":41,"value":265},"Added validation to prevent public email domains (e.g., gmail.com, yahoo.com) from being added to SSO allowed domains",{"type":35,"tag":55,"props":267,"children":268},{},[269],{"type":41,"value":270},"Instant client-side feedback with inline error messages",{"type":35,"tag":44,"props":272,"children":274},{"id":273},"plan-downgrade-handling",[275],{"type":41,"value":276},"Plan Downgrade Handling",{"type":35,"tag":51,"props":278,"children":279},{},[280],{"type":35,"tag":55,"props":281,"children":282},{},[283],{"type":41,"value":284},"Paid integrations (notification channels, calendar sync) now gracefully pause when an organization downgrades and automatically resume on re-upgrade without losing configuration",{"data":286,"body":287},{},{"type":32,"children":288},[289,295,306,311,324],{"type":35,"tag":290,"props":291,"children":292},"p",{},[293],{"type":41,"value":294},"BookYourPTO v1.0.2 — Release Notes",{"type":35,"tag":290,"props":296,"children":297},{},[298,300,304],{"type":41,"value":299},"Trusted Devices — Skip 2FA for 30 Days",{"type":35,"tag":301,"props":302,"children":303},"br",{},[],{"type":41,"value":305},"\nEmployees can now check \"Remember this device for 30 days\" when logging in with 2FA. Trusted devices can be viewed and revoked anytime from Settings > Trusted\nDevices. Disabling 2FA automatically revokes all trusted devices.",{"type":35,"tag":290,"props":307,"children":308},{},[309],{"type":41,"value":310},"Slack & Teams Notifications\nGet your BookYourPTO notifications delivered straight to Slack or Microsoft Teams.",{"type":35,"tag":51,"props":312,"children":313},{},[314,319],{"type":35,"tag":55,"props":315,"children":316},{},[317],{"type":41,"value":318},"Personal: Each employee can connect their own webhook in Settings > Connected Apps > Slack & Teams to receive personal notifications (leave approvals,\nrejections, etc.)",{"type":35,"tag":55,"props":320,"children":321},{},[322],{"type":41,"value":323},"Organization-wide: Admins can set up a shared channel for team notifications in Settings > Notifications Channel — pick which notification types get posted",{"type":35,"tag":290,"props":325,"children":326},{},[327],{"type":41,"value":328},"Settings Redesign\nCalendar Integration and Slack & Teams are now combined under a single \"Connected Apps\" tab with a cleaner tabbed layout.",{"data":330,"body":331},{},{"type":32,"children":332},[333,339,365,371,406,412,430,436],{"type":35,"tag":36,"props":334,"children":336},{"id":335},"birthday-indicators",[337],{"type":41,"value":338},"Birthday Indicators",{"type":35,"tag":51,"props":340,"children":341},{},[342,355,360],{"type":35,"tag":55,"props":343,"children":344},{},[345,347,353],{"type":41,"value":346},"Users with a date of birth now see a 🎂 pink cake icon on their birthday in the ",{"type":35,"tag":185,"props":348,"children":350},{"className":349},[],[351],{"type":41,"value":352},"\u002Fcalendar",{"type":41,"value":354}," yearly view and dashboard calendar grid",{"type":35,"tag":55,"props":356,"children":357},{},[358],{"type":41,"value":359},"Hovering shows a \"Birthday\" tooltip (dashboard shows full name)",{"type":35,"tag":55,"props":361,"children":362},{},[363],{"type":41,"value":364},"Birthday cells get a subtle pink border and background highlight",{"type":35,"tag":36,"props":366,"children":368},{"id":367},"balance-display-settings",[369],{"type":41,"value":370},"Balance Display Settings",{"type":35,"tag":51,"props":372,"children":373},{},[374,384,394],{"type":35,"tag":55,"props":375,"children":376},{},[377,382],{"type":35,"tag":61,"props":378,"children":379},{},[380],{"type":41,"value":381},"Dashboard badge",{"type":41,"value":383}," — controls which leave balance is shown on each user's avatar badge (Annual \u002F Sick \u002F Both)",{"type":35,"tag":55,"props":385,"children":386},{},[387,392],{"type":35,"tag":61,"props":388,"children":389},{},[390],{"type":41,"value":391},"Calendar balance summary",{"type":41,"value":393}," — controls which leave buckets appear in the calendar sidebar (Annual \u002F Sick \u002F Both)",{"type":35,"tag":55,"props":395,"children":396},{},[397,399,404],{"type":41,"value":398},"Configurable from ",{"type":35,"tag":61,"props":400,"children":401},{},[402],{"type":41,"value":403},"Settings > General",{"type":41,"value":405}," by administrators and executives",{"type":35,"tag":36,"props":407,"children":409},{"id":408},"birthday-reminder-emails",[410],{"type":41,"value":411},"Birthday Reminder Emails",{"type":35,"tag":51,"props":413,"children":414},{},[415,420,425],{"type":35,"tag":55,"props":416,"children":417},{},[418],{"type":41,"value":419},"Monthly cron endpoint sends a birthday digest email on the 1st of each month to admins, executives, and department heads",{"type":35,"tag":55,"props":421,"children":422},{},[423],{"type":41,"value":424},"Lists all team birthdays sorted by date with name, department, and date",{"type":35,"tag":55,"props":426,"children":427},{},[428],{"type":41,"value":429},"Department heads only receive birthdays from their own department",{"type":35,"tag":36,"props":431,"children":433},{"id":432},"dashboard-ux-improvements",[434],{"type":41,"value":435},"Dashboard UX Improvements",{"type":35,"tag":51,"props":437,"children":438},{},[439,451],{"type":35,"tag":55,"props":440,"children":441},{},[442,444,449],{"type":41,"value":443},"User names in the dashboard are now clickable links to their ",{"type":35,"tag":185,"props":445,"children":447},{"className":446},[],[448],{"type":41,"value":352},{"type":41,"value":450}," page (for admins, executives, and same-department heads)",{"type":35,"tag":55,"props":452,"children":453},{},[454],{"type":41,"value":455},"Weekend columns have consistent muted background across the full column height",{"data":457,"body":458},{},{"type":32,"children":459},[460,472,502,514,518,524,530,563,569,607,613,641,647,680,686,709,715,743,749,767,773,816,822,850,853,859,882,888,921,927,945,951,974,980,998,1004,1022,1028,1034,1062,1065,1071,1114,1120,1148,1154,1187,1193,1216,1222,1265,1271],{"type":35,"tag":290,"props":461,"children":462},{},[463,465,470],{"type":41,"value":464},"We're excited to announce the first official release of ",{"type":35,"tag":61,"props":466,"children":467},{},[468],{"type":41,"value":469},"BookYourPTO",{"type":41,"value":471}," — an all-in-one leave, time tracking, expense, and document management platform for modern teams.",{"type":35,"tag":290,"props":473,"children":474},{},[475,477,482,484,489,491,500],{"type":41,"value":476},"Available as an ",{"type":35,"tag":61,"props":478,"children":479},{},[480],{"type":41,"value":481},"open-source community edition",{"type":41,"value":483}," for self-hosting and a ",{"type":35,"tag":61,"props":485,"children":486},{},[487],{"type":41,"value":488},"cloud-hosted version",{"type":41,"value":490}," with Pro, Business, and Enterprise plans at ",{"type":35,"tag":492,"props":493,"children":497},"a",{"href":494,"rel":495},"https:\u002F\u002Fbookyourpto.com",[496],"nofollow",[498],{"type":41,"value":499},"bookyourpto.com",{"type":41,"value":501},".",{"type":35,"tag":290,"props":503,"children":504},{},[505,507,512],{"type":41,"value":506},"Development began on ",{"type":35,"tag":61,"props":508,"children":509},{},[510],{"type":41,"value":511},"December 22, 2025",{"type":41,"value":513},", and v1.0.0 marks the culmination of six weeks of active development.",{"type":35,"tag":515,"props":516,"children":517},"hr",{},[],{"type":35,"tag":36,"props":519,"children":521},{"id":520},"core-platform-all-plans",[522],{"type":41,"value":523},"Core Platform (All Plans)",{"type":35,"tag":213,"props":525,"children":527},{"id":526},"leave-management",[528],{"type":41,"value":529},"Leave Management",{"type":35,"tag":51,"props":531,"children":532},{},[533,538,543,548,553,558],{"type":35,"tag":55,"props":534,"children":535},{},[536],{"type":41,"value":537},"Submit, approve, reject, and cancel leave requests with full workflow support",{"type":35,"tag":55,"props":539,"children":540},{},[541],{"type":41,"value":542},"Configurable leave types with custom allowances and accrual rules",{"type":35,"tag":55,"props":544,"children":545},{},[546],{"type":41,"value":547},"Leave balance tracking with fiscal year awareness",{"type":35,"tag":55,"props":549,"children":550},{},[551],{"type":41,"value":552},"Leave approvals and policies",{"type":35,"tag":55,"props":554,"children":555},{},[556],{"type":41,"value":557},"Dashboard calendar with monthly navigation and team-wide visibility",{"type":35,"tag":55,"props":559,"children":560},{},[561],{"type":41,"value":562},"Leave transaction audit trail",{"type":35,"tag":213,"props":564,"children":566},{"id":565},"time-tracking",[567],{"type":41,"value":568},"Time Tracking",{"type":35,"tag":51,"props":570,"children":571},{},[572,577,582,587,592,597,602],{"type":35,"tag":55,"props":573,"children":574},{},[575],{"type":41,"value":576},"Clock in\u002Fout with real-time timer",{"type":35,"tag":55,"props":578,"children":579},{},[580],{"type":41,"value":581},"Manual time entry creation, editing, and deletion",{"type":35,"tag":55,"props":583,"children":584},{},[585],{"type":41,"value":586},"Project and task management with client association",{"type":35,"tag":55,"props":588,"children":589},{},[590],{"type":41,"value":591},"Billable hours tracking",{"type":35,"tag":55,"props":593,"children":594},{},[595],{"type":41,"value":596},"Work schedules with customizable shift patterns",{"type":35,"tag":55,"props":598,"children":599},{},[600],{"type":41,"value":601},"Timesheet approvals with individual and bulk actions",{"type":35,"tag":55,"props":603,"children":604},{},[605],{"type":41,"value":606},"Geolocation capture for clock-in\u002Fout events",{"type":35,"tag":213,"props":608,"children":610},{"id":609},"expense-management",[611],{"type":41,"value":612},"Expense Management",{"type":35,"tag":51,"props":614,"children":615},{},[616,621,626,631,636],{"type":35,"tag":55,"props":617,"children":618},{},[619],{"type":41,"value":620},"Expense submission with AI-powered receipt scanning",{"type":35,"tag":55,"props":622,"children":623},{},[624],{"type":41,"value":625},"Mileage and per diem expense types",{"type":35,"tag":55,"props":627,"children":628},{},[629],{"type":41,"value":630},"Receipt upload with secure access via short-lived Redis tokens",{"type":35,"tag":55,"props":632,"children":633},{},[634],{"type":41,"value":635},"Expense approval workflow",{"type":35,"tag":55,"props":637,"children":638},{},[639],{"type":41,"value":640},"Expense reports with filtering and export",{"type":35,"tag":213,"props":642,"children":644},{"id":643},"digital-document-signing",[645],{"type":41,"value":646},"Digital Document Signing",{"type":35,"tag":51,"props":648,"children":649},{},[650,655,660,665,670,675],{"type":35,"tag":55,"props":651,"children":652},{},[653],{"type":41,"value":654},"Upload and assign documents to single or multiple recipients",{"type":35,"tag":55,"props":656,"children":657},{},[658],{"type":41,"value":659},"ESIGN Act compliant digital signature capture",{"type":35,"tag":55,"props":661,"children":662},{},[663],{"type":41,"value":664},"Searchable documents with OCR",{"type":35,"tag":55,"props":666,"children":667},{},[668],{"type":41,"value":669},"Document preview, view, sign, and decline workflows",{"type":35,"tag":55,"props":671,"children":672},{},[673],{"type":41,"value":674},"Browser timezone capture displayed on signed documents",{"type":35,"tag":55,"props":676,"children":677},{},[678],{"type":41,"value":679},"Document encryption for sensitive files",{"type":35,"tag":213,"props":681,"children":683},{"id":682},"notifications",[684],{"type":41,"value":685},"Notifications",{"type":35,"tag":51,"props":687,"children":688},{},[689,694,699,704],{"type":35,"tag":55,"props":690,"children":691},{},[692],{"type":41,"value":693},"In-app notification system with real-time bell indicator",{"type":35,"tag":55,"props":695,"children":696},{},[697],{"type":41,"value":698},"Notifications for leave submissions, approvals, rejections, and cancellations",{"type":35,"tag":55,"props":700,"children":701},{},[702],{"type":41,"value":703},"Notification management page with mark-as-read, clear-all actions",{"type":35,"tag":55,"props":705,"children":706},{},[707],{"type":41,"value":708},"Pending items widget on dashboard with role-based display",{"type":35,"tag":213,"props":710,"children":712},{"id":711},"reports-exports",[713],{"type":41,"value":714},"Reports & Exports",{"type":35,"tag":51,"props":716,"children":717},{},[718,723,728,733,738],{"type":35,"tag":55,"props":719,"children":720},{},[721],{"type":41,"value":722},"Leave usage reports with filtering and export",{"type":35,"tag":55,"props":724,"children":725},{},[726],{"type":41,"value":727},"Timesheet reports with date range selection",{"type":35,"tag":55,"props":729,"children":730},{},[731],{"type":41,"value":732},"Time tracking billing reports",{"type":35,"tag":55,"props":734,"children":735},{},[736],{"type":41,"value":737},"Security audit log export (CSV)",{"type":35,"tag":55,"props":739,"children":740},{},[741],{"type":41,"value":742},"Sign-in log export",{"type":35,"tag":213,"props":744,"children":746},{"id":745},"calendar-integrations",[747],{"type":41,"value":748},"Calendar Integrations",{"type":35,"tag":51,"props":750,"children":751},{},[752,757,762],{"type":35,"tag":55,"props":753,"children":754},{},[755],{"type":41,"value":756},"Google Calendar sync for approved leave events",{"type":35,"tag":55,"props":758,"children":759},{},[760],{"type":41,"value":761},"Microsoft Outlook calendar integration",{"type":35,"tag":55,"props":763,"children":764},{},[765],{"type":41,"value":766},"iCal feed support for any calendar application",{"type":35,"tag":213,"props":768,"children":770},{"id":769},"role-based-access-control",[771],{"type":41,"value":772},"Role-Based Access Control",{"type":35,"tag":51,"props":774,"children":775},{},[776,781,786,791,796,801,806,811],{"type":35,"tag":55,"props":777,"children":778},{},[779],{"type":41,"value":780},"Four roles: Employee, Department Head, Administrator, Executive",{"type":35,"tag":55,"props":782,"children":783},{},[784],{"type":41,"value":785},"Department Head role for team-level approvals and oversight",{"type":35,"tag":55,"props":787,"children":788},{},[789],{"type":41,"value":790},"Role-based permissions across all modules",{"type":35,"tag":55,"props":792,"children":793},{},[794],{"type":41,"value":795},"Granular permissions system with per-user overrides",{"type":35,"tag":55,"props":797,"children":798},{},[799],{"type":41,"value":800},"Designate approvers with cross-department approval capabilities",{"type":35,"tag":55,"props":802,"children":803},{},[804],{"type":41,"value":805},"Locked dates to prevent bookings on specific dates (admin\u002Fexecutive controlled)",{"type":35,"tag":55,"props":807,"children":808},{},[809],{"type":41,"value":810},"Executive override for booking on locked dates",{"type":35,"tag":55,"props":812,"children":813},{},[814],{"type":41,"value":815},"Project member roles: Owner, Manager, Member",{"type":35,"tag":213,"props":817,"children":819},{"id":818},"authentication-security",[820],{"type":41,"value":821},"Authentication & Security",{"type":35,"tag":51,"props":823,"children":824},{},[825,830,835,840,845],{"type":35,"tag":55,"props":826,"children":827},{},[828],{"type":41,"value":829},"JWT-based authentication with refresh token rotation",{"type":35,"tag":55,"props":831,"children":832},{},[833],{"type":41,"value":834},"Force password change on first login",{"type":35,"tag":55,"props":836,"children":837},{},[838],{"type":41,"value":839},"Redis rate limiting on authentication endpoints",{"type":35,"tag":55,"props":841,"children":842},{},[843],{"type":41,"value":844},"Token audit logging",{"type":35,"tag":55,"props":846,"children":847},{},[848],{"type":41,"value":849},"Sign-in logs with export",{"type":35,"tag":515,"props":851,"children":852},{},[],{"type":35,"tag":36,"props":854,"children":856},{"id":855},"pro-plan-features",[857],{"type":41,"value":858},"Pro Plan Features",{"type":35,"tag":51,"props":860,"children":861},{},[862,867,872,877],{"type":35,"tag":55,"props":863,"children":864},{},[865],{"type":41,"value":866},"Up to 10 users",{"type":35,"tag":55,"props":868,"children":869},{},[870],{"type":41,"value":871},"500 receipts\u002Fmonth",{"type":35,"tag":55,"props":873,"children":874},{},[875],{"type":41,"value":876},"1,000 documents with OCR",{"type":35,"tag":55,"props":878,"children":879},{},[880],{"type":41,"value":881},"Email support",{"type":35,"tag":36,"props":883,"children":885},{"id":884},"business-plan-features",[886],{"type":41,"value":887},"Business Plan Features",{"type":35,"tag":51,"props":889,"children":890},{},[891,896,901,906,911,916],{"type":35,"tag":55,"props":892,"children":893},{},[894],{"type":41,"value":895},"Up to 30 users",{"type":35,"tag":55,"props":897,"children":898},{},[899],{"type":41,"value":900},"Unlimited receipts and documents with OCR",{"type":35,"tag":55,"props":902,"children":903},{},[904],{"type":41,"value":905},"Advanced approval workflows",{"type":35,"tag":55,"props":907,"children":908},{},[909],{"type":41,"value":910},"Custom reports",{"type":35,"tag":55,"props":912,"children":913},{},[914],{"type":41,"value":915},"Email digest notification system with daily\u002Fweekly scheduling",{"type":35,"tag":55,"props":917,"children":918},{},[919],{"type":41,"value":920},"Multi-currency expense support with role-based visibility",{"type":35,"tag":213,"props":922,"children":924},{"id":923},"white-labeling",[925],{"type":41,"value":926},"White-Labeling",{"type":35,"tag":51,"props":928,"children":929},{},[930,935,940],{"type":35,"tag":55,"props":931,"children":932},{},[933],{"type":41,"value":934},"Branding settings with logo, colors, and theme configuration",{"type":35,"tag":55,"props":936,"children":937},{},[938],{"type":41,"value":939},"Domain-specific branding (custom domains show org branding)",{"type":35,"tag":55,"props":941,"children":942},{},[943],{"type":41,"value":944},"Branding API with cache-control headers",{"type":35,"tag":213,"props":946,"children":948},{"id":947},"auth0-integration-oidc",[949],{"type":41,"value":950},"Auth0 Integration (OIDC)",{"type":35,"tag":51,"props":952,"children":953},{},[954,959,964,969],{"type":35,"tag":55,"props":955,"children":956},{},[957],{"type":41,"value":958},"Enterprise Single Sign-On via Auth0",{"type":35,"tag":55,"props":960,"children":961},{},[962],{"type":41,"value":963},"Configurable \"Enable Auth0\" and \"Require Auth0 Login\" settings",{"type":35,"tag":55,"props":965,"children":966},{},[967],{"type":41,"value":968},"SSO enforcement option for organizations",{"type":35,"tag":55,"props":970,"children":971},{},[972],{"type":41,"value":973},"Auto-create users on first SSO login with configurable default role and department",{"type":35,"tag":213,"props":975,"children":977},{"id":976},"audit-logs",[978],{"type":41,"value":979},"Audit Logs",{"type":35,"tag":51,"props":981,"children":982},{},[983,988,993],{"type":35,"tag":55,"props":984,"children":985},{},[986],{"type":41,"value":987},"Comprehensive audit logs with entity types for all modules",{"type":35,"tag":55,"props":989,"children":990},{},[991],{"type":41,"value":992},"Security violations tracking and management",{"type":35,"tag":55,"props":994,"children":995},{},[996],{"type":41,"value":997},"Time tracking compliance dashboard",{"type":35,"tag":213,"props":999,"children":1001},{"id":1000},"custom-domains",[1002],{"type":41,"value":1003},"Custom Domains",{"type":35,"tag":51,"props":1005,"children":1006},{},[1007,1012,1017],{"type":35,"tag":55,"props":1008,"children":1009},{},[1010],{"type":41,"value":1011},"Custom domain support with DNS verification",{"type":35,"tag":55,"props":1013,"children":1014},{},[1015],{"type":41,"value":1016},"Single custom domain per organization enforcement",{"type":35,"tag":55,"props":1018,"children":1019},{},[1020],{"type":41,"value":1021},"Public branding endpoint for unauthenticated access",{"type":35,"tag":213,"props":1023,"children":1025},{"id":1024},"priority-support",[1026],{"type":41,"value":1027},"Priority Support",{"type":35,"tag":36,"props":1029,"children":1031},{"id":1030},"enterprise-plan-features",[1032],{"type":41,"value":1033},"Enterprise Plan Features",{"type":35,"tag":51,"props":1035,"children":1036},{},[1037,1042,1047,1052,1057],{"type":35,"tag":55,"props":1038,"children":1039},{},[1040],{"type":41,"value":1041},"Unlimited users",{"type":35,"tag":55,"props":1043,"children":1044},{},[1045],{"type":41,"value":1046},"Everything in Business",{"type":35,"tag":55,"props":1048,"children":1049},{},[1050],{"type":41,"value":1051},"Custom limits",{"type":35,"tag":55,"props":1053,"children":1054},{},[1055],{"type":41,"value":1056},"Dedicated support",{"type":35,"tag":55,"props":1058,"children":1059},{},[1060],{"type":41,"value":1061},"SLA guarantee",{"type":35,"tag":515,"props":1063,"children":1064},{},[],{"type":35,"tag":36,"props":1066,"children":1068},{"id":1067},"stripe-billing",[1069],{"type":41,"value":1070},"Stripe Billing",{"type":35,"tag":51,"props":1072,"children":1073},{},[1074,1079,1084,1089,1094,1099,1104,1109],{"type":35,"tag":55,"props":1075,"children":1076},{},[1077],{"type":41,"value":1078},"Subscription management with plan-based feature gating",{"type":35,"tag":55,"props":1080,"children":1081},{},[1082],{"type":41,"value":1083},"Checkout session creation with discount\u002Fcoupon support",{"type":35,"tag":55,"props":1085,"children":1086},{},[1087],{"type":41,"value":1088},"Invoice tracking and billing history",{"type":35,"tag":55,"props":1090,"children":1091},{},[1092],{"type":41,"value":1093},"Webhook processing with idempotency protection",{"type":35,"tag":55,"props":1095,"children":1096},{},[1097],{"type":41,"value":1098},"Plan limits enforced across all API endpoints",{"type":35,"tag":55,"props":1100,"children":1101},{},[1102],{"type":41,"value":1103},"Plan-based UI gating in settings",{"type":35,"tag":55,"props":1105,"children":1106},{},[1107],{"type":41,"value":1108},"Refund processing with hardened input validation",{"type":35,"tag":55,"props":1110,"children":1111},{},[1112],{"type":41,"value":1113},"Free plan default for new organizations",{"type":35,"tag":36,"props":1115,"children":1117},{"id":1116},"email-system",[1118],{"type":41,"value":1119},"Email System",{"type":35,"tag":51,"props":1121,"children":1122},{},[1123,1128,1133,1138,1143],{"type":35,"tag":55,"props":1124,"children":1125},{},[1126],{"type":41,"value":1127},"Configurable SMTP settings per organization",{"type":35,"tag":55,"props":1129,"children":1130},{},[1131],{"type":41,"value":1132},"Test email functionality for verifying configuration",{"type":35,"tag":55,"props":1134,"children":1135},{},[1136],{"type":41,"value":1137},"Branded email templates with organization logo support",{"type":35,"tag":55,"props":1139,"children":1140},{},[1141],{"type":41,"value":1142},"Fallback to platform SMTP logo when org has no custom logo",{"type":35,"tag":55,"props":1144,"children":1145},{},[1146],{"type":41,"value":1147},"Email notifications for leave workflows, document assignments, and more",{"type":35,"tag":36,"props":1149,"children":1151},{"id":1150},"organization-multi-tenancy",[1152],{"type":41,"value":1153},"Organization & Multi-Tenancy",{"type":35,"tag":51,"props":1155,"children":1156},{},[1157,1162,1167,1172,1177,1182],{"type":35,"tag":55,"props":1158,"children":1159},{},[1160],{"type":41,"value":1161},"Multi-tenant architecture with organization-scoped data isolation",{"type":35,"tag":55,"props":1163,"children":1164},{},[1165],{"type":41,"value":1166},"Organization onboarding workflow",{"type":35,"tag":55,"props":1168,"children":1169},{},[1170],{"type":41,"value":1171},"Department management (create, update, delete)",{"type":35,"tag":55,"props":1173,"children":1174},{},[1175],{"type":41,"value":1176},"User management with role-based access control (Employee, Department Head, Administrator, Executive)",{"type":35,"tag":55,"props":1178,"children":1179},{},[1180],{"type":41,"value":1181},"Organization statistics dashboard",{"type":35,"tag":55,"props":1183,"children":1184},{},[1185],{"type":41,"value":1186},"Data backup\u002Fexport endpoint",{"type":35,"tag":36,"props":1188,"children":1190},{"id":1189},"public-holidays",[1191],{"type":41,"value":1192},"Public Holidays",{"type":35,"tag":51,"props":1194,"children":1195},{},[1196,1201,1206,1211],{"type":35,"tag":55,"props":1197,"children":1198},{},[1199],{"type":41,"value":1200},"Country-based public holiday management",{"type":35,"tag":55,"props":1202,"children":1203},{},[1204],{"type":41,"value":1205},"Regional subdivision holiday support",{"type":35,"tag":55,"props":1207,"children":1208},{},[1209],{"type":41,"value":1210},"Per-user holiday override system",{"type":35,"tag":55,"props":1212,"children":1213},{},[1214],{"type":41,"value":1215},"Dashboard calendar displays user-specific holidays",{"type":35,"tag":36,"props":1217,"children":1219},{"id":1218},"infrastructure-deployment",[1220],{"type":41,"value":1221},"Infrastructure & Deployment",{"type":35,"tag":51,"props":1223,"children":1224},{},[1225,1230,1235,1240,1245,1250,1255,1260],{"type":35,"tag":55,"props":1226,"children":1227},{},[1228],{"type":41,"value":1229},"Docker containerization with multi-stage builds",{"type":35,"tag":55,"props":1231,"children":1232},{},[1233],{"type":41,"value":1234},"Docker Compose with PostgreSQL, Redis, and application services",{"type":35,"tag":55,"props":1236,"children":1237},{},[1238],{"type":41,"value":1239},"Environment variable configuration for all services (Stripe, SMTP, OAuth)",{"type":35,"tag":55,"props":1241,"children":1242},{},[1243],{"type":41,"value":1244},"Persistent document storage via Docker volumes",{"type":35,"tag":55,"props":1246,"children":1247},{},[1248],{"type":41,"value":1249},"Nuxt 3 full-stack framework",{"type":35,"tag":55,"props":1251,"children":1252},{},[1253],{"type":41,"value":1254},"Prisma ORM with PostgreSQL",{"type":35,"tag":55,"props":1256,"children":1257},{},[1258],{"type":41,"value":1259},"Redis for caching, rate limiting, and session management",{"type":35,"tag":55,"props":1261,"children":1262},{},[1263],{"type":41,"value":1264},"Cloudflare integration for domain management",{"type":35,"tag":36,"props":1266,"children":1268},{"id":1267},"uiux",[1269],{"type":41,"value":1270},"UI\u002FUX",{"type":35,"tag":51,"props":1272,"children":1273},{},[1274,1279,1284,1289,1294,1299],{"type":35,"tag":55,"props":1275,"children":1276},{},[1277],{"type":41,"value":1278},"Responsive design across all pages (mobile, tablet, desktop)",{"type":35,"tag":55,"props":1280,"children":1281},{},[1282],{"type":41,"value":1283},"Dark\u002Flight mode support",{"type":35,"tag":55,"props":1285,"children":1286},{},[1287],{"type":41,"value":1288},"App Launcher navigation for unified approvals and reports",{"type":35,"tag":55,"props":1290,"children":1291},{},[1292],{"type":41,"value":1293},"Sticky dashboard calendar with team visibility",{"type":35,"tag":55,"props":1295,"children":1296},{},[1297],{"type":41,"value":1298},"Custom modal components with scroll support and mobile optimization",{"type":35,"tag":55,"props":1300,"children":1301},{},[1302],{"type":41,"value":1303},"Area charts for analytics visualization",1790889966333]