[{"data":1,"prerenderedAt":970},["ShallowReactive",2],{"announcements":3,"blog-/blog/v1-0-10-launch":28,"blog-related-/blog/v1-0-10-launch":520},[4],{"id":5,"title":6,"active":7,"body":8,"description":14,"extension":19,"link":20,"linkText":21,"meta":22,"navigation":7,"order":23,"path":24,"seo":25,"stem":26,"__hash__":27},"announcements/announcements/v1-0-15-leave-cancellation-and-dashboards.md","v1.0.15 · Cancel or change time off after approval, a redesigned expenses overview, and a smarter dashboard",true,{"type":9,"value":10,"toc":15},"minimark",[11],[12,13,14],"p",{},"v1.0.15 closes the loop on the leave workflow. Employees can now edit or cancel a request that's still pending, and — when plans change after it's already approved — send a cancellation request straight to their manager to approve or decline, all from the dashboard or calendar instead of an off-system email. Approvers get a live badge counting everything waiting on them right in the sidebar, can see each requester's own local time before they decide, and spot a pending cancellation at a glance on the calendar. The expenses list gains a redesigned overview — a clickable status funnel and an interactive spend chart you can flip between monthly and daily — and the dashboard now surfaces the people you actually work with first, remembering your filters between visits. Rounding things out: a consent-first cookie banner and proactive reminders before a white-label domain is due to expire.",{"title":16,"searchDepth":17,"depth":17,"links":18},"",2,[],"md","https://changelog.bookyourpto.com/","See what's new",{},12,"/announcements/v1-0-15-leave-cancellation-and-dashboards",{"title":6,"description":14},"announcements/v1-0-15-leave-cancellation-and-dashboards","fOAAtUu1UA--6s7IzYUyobFwFKQN9-hRD4h83d1hlxg",{"id":29,"title":30,"author":31,"body":32,"date":505,"description":506,"extension":19,"image":507,"meta":508,"navigation":7,"path":509,"readTime":510,"seo":511,"stem":512,"tags":513,"__hash__":519},"blog/blog/v1-0-10-launch.md","What's New in v1.0.10: Team Matrix, Pay-Period Lockdown, Project Budgets, and a Faster App","AnHourTec Team",{"type":9,"value":33,"toc":482},[34,39,47,66,69,73,76,130,140,144,149,152,156,159,163,166,170,173,177,180,184,187,191,194,198,207,220,223,227,232,259,263,282,285,289,292,316,334,338,352,356,365,369,372,375,379,382,459,462,466,479],[35,36,38],"h2",{"id":37},"v1010-is-our-biggest-release-since-launch","v1.0.10 Is Our Biggest Release Since Launch",[12,40,41,42,46],{},"This release touches almost every corner of the product. Time tracking grew up: pay-period lockdown, configurable rounding, free-form tags, money budgets on projects, bulk edit, and cost aggregation on reports. Schedules and timesheets got a brand-new ",[43,44,45],"strong",{},"Team Matrix view"," — the enterprise \"employee × day\" grid that every serious workforce tool eventually builds. Approvals and Reports were redesigned from the ground up. Data export is now a first-class, unified experience (Excel, PDF, CSV — one dropdown, everywhere). Settings got a global search bar so you can jump to any individual toggle instead of clicking through categories.",[12,48,49,50,54,55,54,58,61,62,65],{},"And we did a full-stack performance pass. Page loads on ",[51,52,53],"code",{},"/reports",", ",[51,56,57],{},"/approvals",[51,59,60],{},"/dashboard",", and ",[51,63,64],{},"/schedules"," are meaningfully faster — in some cases seventy requests on page load became ten, and double-digit-second waits became sub-two-second waits. Nothing changed for you to configure; it just works better.",[12,67,68],{},"Here's the tour.",[35,70,72],{"id":71},"team-matrix-view-for-schedules-and-timesheets","Team Matrix View for Schedules and Timesheets",[12,74,75],{},"The calendar view overlays every visible employee's shifts or time entries onto one week × 24-hour grid. It works fine for small teams. Past 20–30 people it becomes unreadable — impossible to spot who's missing entries, who's scheduled for overtime, or what still needs approval. Every enterprise workforce tool (Workday, UKG, ADP, SAP SuccessFactors, Ceridian Dayforce) solves this the same way: one row per employee, one column per day. We built that.",[77,78,79,86,92,102,108,114,120],"ul",{},[80,81,82,85],"li",{},[43,83,84],{},"Employee × day matrix."," Each visible employee is a row; the seven days of the current week are columns. Each cell shows the aggregate (hours + status dots for timesheets; shift time + type for schedules). A Week total column on the right gives per-employee totals at a glance. The employee column and header row are sticky, so scrolling horizontally keeps the name and date context in view.",[80,87,88,91],{},[43,89,90],{},"Click-to-drill."," Click any cell with one entry or shift to open it in the edit modal. Click a cell with multiple entries to expand the row inline, grouped per day. Click an empty cell to open an Add Entry / Add Shift modal pre-seeded to that employee and date.",[80,93,94,97,98,101],{},[43,95,96],{},"Drag-resizable columns with persistence."," Every column has a drag handle; widths clamp between 60 and 600 pixels and persist per-browser in ",[51,99,100],{},"localStorage",". Double-click a handle to reset that column; a toolbar button clears every custom width at once.",[80,103,104,107],{},[43,105,106],{},"Density toggle."," Compact / Normal / Spacious, remembered across sessions. Compact fits a 30-person team on a single screen; Spacious is better for presenting or reviewing one team closely.",[80,109,110,113],{},[43,111,112],{},"Sort and filter."," Sort by name, week hours, pending count, or missing days. Filter chips toggle between All / Missing / Pending / Approved / Rejected (timesheets) or All / Unscheduled / Scheduled / 40h+ (schedules), each with a live count.",[80,115,116,119],{},[43,117,118],{},"Holiday and leave aware."," Holiday cells are tinted green with the holiday name. Cells where the employee is on leave show the leave type instead of a blank, so \"no shift scheduled\" is visibly distinct from \"scheduled off\". Unassigned open shifts render with a muted \"Open Shift\" label.",[80,121,122,125,126,129],{},[43,123,124],{},"Calendar and List views still available."," The top bar toggle is now three buttons: Team (default) / Calendar / List. The ",[51,127,128],{},"?view="," URL parameter accepts all three, so existing deep links keep working.",[12,131,132,133,135,136,139],{},"The Team view is now the default for both ",[51,134,64],{}," and ",[51,137,138],{},"/time-tracking/timesheets",".",[35,141,143],{"id":142},"time-tracking-grew-up","Time Tracking Grew Up",[145,146,148],"h3",{"id":147},"pay-period-lockdown","Pay-Period Lockdown",[12,150,151],{},"Admins can set a lockdown date after which time entries with a clock-in before that date can no longer be edited or deleted by employees. A configurable grace window (in days) lets managers close out late-submitted hours after the lock date. Only Administrators and Executives can override the lock for corrections; every override is written to the audit log with the entry's date and the lockdown cutoff, so compliance always has a reviewable trail.",[145,153,155],{"id":154},"configurable-clock-rounding","Configurable Clock Rounding",[12,157,158],{},"A new setting snaps clock-in/out to a configured interval (1–60 minutes) with UP / DOWN / NEAREST direction. Applied uniformly to live clock-in/out, manual entry, and edits so billable hours line up with the org's rounding policy regardless of how precisely the user clicks.",[145,160,162],{"id":161},"free-form-tags-on-time-entries","Free-Form Tags on Time Entries",[12,164,165],{},"Each entry can carry up to 10 tags (32 characters each) for categorisation and filtering. Tags appear in the entry modal as a comma-separated input — paste anything and the system normalises (lowercase, strips punctuation, dedupes). Filterable through the entries API.",[145,167,169],{"id":168},"project-money-budgets","Project Money Budgets",[12,171,172],{},"A new money-budget field on projects complements the hours budget with a cost ceiling. Tracked against (hours × hourly rate) of billable entries only — non-billable time never draws down the cost budget. The project detail page renders a second progress bar alongside the hours budget with matching 80% / 100% colour thresholds. Currency inherits from the organization's default.",[145,174,176],{"id":175},"bulk-delete-and-bulk-edit","Bulk Delete and Bulk Edit",[12,178,179],{},"Multi-select in the timesheet list view with a floating action bar. Bulk delete soft-deletes up to 200 entries in one request. Bulk edit supports field-level PATCH semantics — pick any combination of project, billable flag, and hourly-rate override, apply to up to 200 entries at once. Only the fields you explicitly tick get written, so one column can be restamped without touching the others. Both operations are fail-closed: if any row in the batch is blocked by lockdown or ownership rules, nothing is deleted or changed.",[145,181,183],{"id":182},"restart-timer-duplicate","Restart-Timer (Duplicate)",[12,185,186],{},"One-click duplicate on any past entry clones the project / task / description / notes and starts it as a fresh active timer. Stops any currently-running timer first so the \"one active timer per user\" invariant holds.",[145,188,190],{"id":189},"cost-aggregation-on-time-reports","Cost Aggregation on Time Reports",[12,192,193],{},"The time report now surfaces fully-loaded cost alongside hours for administrators and executives. Rate is drawn from each employee's effective Compensation record at the time each entry was logged, so mid-period raises are picked up automatically. SALARY pay types are normalised to hourly at 2080 hours/year; HOURLY is used as-is. A new Total Cost summary card appears on the report, and the Employee breakdown picks up a Cost column. Entries for employees with no Compensation on file are flagged (\"(N unpriced)\") so admins can close data gaps rather than silently under-report. Department heads continue to see hours but never cost.",[35,195,197],{"id":196},"approvals-redesigned","Approvals, Redesigned",[12,199,200,202,203,206],{},[51,201,57],{}," is now a dashboard-style overview. Four edge-joined KPI cards at the top (Total Pending, Leave Requests, Expense Reports, Timesheet Entries — the last one hidden when time tracking is off) link straight to their detail queue. A unified ",[43,204,205],{},"Pending Workload"," card shows the big-number total plus a horizontal bar breakdown per queue, followed by a Review Queues table with Queue / Status / Pending count / Review link. A pulsing amber dot in the header tells you at a glance that something is waiting; it turns green when the queues are clear.",[12,208,209,210,54,213,54,216,219],{},"Each queue has its own dedicated page — ",[51,211,212],{},"/approvals/leave",[51,214,215],{},"/approvals/expenses",[51,217,218],{},"/approvals/time"," — with a consistent layout: breadcrumb, search + filter + export toolbar, a data table with avatar cells and coloured status badges, row-click detail slideover, a three-dot action menu per row, reject modal with character counter and keyboard shortcut hint, and a bottom-pinned pagination footer with rows-per-page selector.",[12,221,222],{},"Approving or rejecting a row is now instant on every approvals page — the row drops out of the list locally without a full refetch.",[35,224,226],{"id":225},"reports-redesigned","Reports, Redesigned",[12,228,229,231],{},[51,230,53],{}," mirrors the approvals overview: five edge-joined KPI cards (Leave requests, Expenses total, Time hours, Active projects, Scheduled shifts), a two-column chart row (Expense Trend + Leave by Employee), and a three-column chart row gated on time tracking (Hours Tracked / Project Hours / Scheduled Shifts). Each chart has a settings gear with period, metric, and top-N options.",[12,233,234,235,54,238,54,241,54,244,54,247,250,251,254,255,258],{},"Five new per-type report pages — ",[51,236,237],{},"/reports/leave",[51,239,240],{},"/reports/expenses",[51,242,243],{},"/reports/time",[51,245,246],{},"/reports/projects",[51,248,249],{},"/reports/scheduling"," — each backed by a real ",[51,252,253],{},"\u003Ctable>"," with admin-style formatting, server-side pagination, exportable via the unified dropdown, and drill-down-friendly URLs. Tab navigation on both Approvals and Reports moved from hash links to query params (",[51,256,257],{},"?tab=leave","), so URLs are shareable and round-trip through the router cleanly.",[35,260,262],{"id":261},"settings-search","Settings Search",[12,264,265,266,269,270,273,274,277,278,281],{},"Every ",[51,267,268],{},"/settings/*"," page now renders a compact Stripe-style search input in the top toolbar. Press ",[51,271,272],{},"/"," anywhere to focus it. Type what you want — \"time zone\", \"auto clock out\", \"rounding\", \"lockdown\", \"audit logs\" — and results resolve to ",[51,275,276],{},"path#anchor"," deep links (e.g. ",[51,279,280],{},"/settings/general#time-zone","). Anchor IDs have been added across ~30 settings components covering General, Time Tracking, Expenses, Leave Types, Documents, Security, Notifications, Integrations, and everything in between.",[12,283,284],{},"Results are role-aware (an employee searching for \"audit logs\" gets no result) and billing-aware (locked-behind-plan features render a small 🔒 Pro / Business / Enterprise / Add-on pill). Arrow keys move the active row, Enter commits, Esc closes.",[35,286,288],{"id":287},"unified-export-excel-pdf-csv","Unified Export — Excel, PDF, CSV",[12,290,291],{},"The Export button is now one dropdown with three options — \"Export in Excel\", \"Export in PDF\", \"Export as CSV\" — applied consistently across timesheets, schedules, all three approval pages, users, and expenses.",[77,293,294,300,310],{},[80,295,296,299],{},[43,297,298],{},"Excel export"," opens a full AG Grid page with theme picker (Quartz / Alpine / Balham / Material, with dark-mode auto-switching), column visibility dropdown, Excel-style checkbox set filters per column, quick filter search across all columns, pinned bottom totals row, and CSV export of the filtered view.",[80,301,302,305,306,309],{},[43,303,304],{},"PDF export"," runs client-side via pdf-lib with a branded header (your logo + company name), paginated rows, and page-number footers. The org's logo comes from your white-label branding; if you don't have a custom domain, it falls back to ",[51,307,308],{},"SMTP_LOGO_URL"," so PDFs still look branded.",[80,311,312,315],{},[43,313,314],{},"CSV export"," respects current filters and visible columns.",[12,317,318,319,54,322,54,325,54,328,61,331,139],{},"The new \"Excel export\" pages exist at ",[51,320,321],{},"/time-tracking/timesheets/export",[51,323,324],{},"/schedules/export",[51,326,327],{},"/approvals/{leave,expense,time}-export",[51,329,330],{},"/users-export",[51,332,333],{},"/expenses-export",[35,335,337],{"id":336},"list-views-that-actually-work-at-scale","List Views That Actually Work at Scale",[12,339,340,341,344,345,344,348,351],{},"The timesheets and schedules pages now have a flat list view alongside the calendar and Team Matrix views. Columns include Date, Employee (avatar + department), Project, Description, Time, Duration, Status, and Actions. Server-side pagination (50 rows per page) keeps the API efficient; multi-select supports bulk edit and bulk delete. View mode persists in the URL query param (",[51,342,343],{},"?view=calendar"," / ",[51,346,347],{},"?view=list",[51,349,350],{},"?view=team",") so refresh doesn't flash.",[35,353,355],{"id":354},"users-page-redesign","Users Page Redesign",[12,357,358,361,362,364],{},[51,359,360],{},"/users"," matches the admin dashboard table pattern now. Inline filter dropdowns (Department, Role, Status) replace the modal-based filter; the layout is full-width; CSV and branded PDF export are one click away; and there's a full AG Grid export page at ",[51,363,330],{},". The Manage Departments modal was redesigned to a compact header/body/footer pattern with contextual icon badges per department and clickable status badges.",[35,366,368],{"id":367},"onboarding-cleaned-up","Onboarding, Cleaned Up",[12,370,371],{},"Department heads are now first-class managers of their own department's task lists — they can create, edit, delete, and manage templates scoped to their department, with auto-pinned department selection on create. Signing a document attached to an onboarding task now auto-completes the task. Due dates respect BEFORE/AFTER direction properly (a task \"7 days before hire\" is now actually before, not after). Employees can no longer mark their own onboarding tasks complete (only admins, executives, the department head of the employee's department, or the explicit task assignee). Reminders fan out to admins + executives + the assignee instead of just one person, with the employee name in the subject line. Task and instance removals now notify admins/execs/DH with the details of who removed what.",[12,373,374],{},"Drag-and-drop reordering of tasks within a template. Email CTA buttons render in the organization's brand colour. Template snapshots on each instance mean renaming or deleting a template no longer crashes the cards that referenced it.",[35,376,378],{"id":377},"a-full-stack-performance-pass","A Full-Stack Performance Pass",[12,380,381],{},"We did a directed performance audit across the hottest pages and cut request counts, round-trip time, and payload size across the board. Nothing in this section changes behaviour or API shapes — the work is entirely internal.",[77,383,384,393,399,408,417,423,437,443,453],{},[80,385,386,389,390,392],{},[43,387,388],{},"Reports overview now loads in one pass."," ",[51,391,53],{}," used to fire roughly seventy requests on mount. The summary strip now calls a single new endpoint that returns all five KPI numbers via DB aggregates; the leave-by-employee chart reads one endpoint and groups client-side instead of fanning out per user; the hours-tracked chart fetches its six monthly buckets in parallel. Typical admin loads drop from double-digit seconds to sub-2s on a 50-user org.",[80,394,395,398],{},[43,396,397],{},"Approvals overview uses one counts endpoint."," Three hidden \"tab components\" that existed purely to compute stat-card numbers are gone. One endpoint returns the three pending counts in one hop.",[80,400,401,404,405,407],{},[43,402,403],{},"Faster approvals."," Approving or rejecting on ",[51,406,218],{}," removes the row locally on success instead of refetching the entire queue. Leave and expense approvals already worked this way; timesheets are now in line.",[80,409,410,413,414,139],{},[43,411,412],{},"Dashboard reads in parallel."," The home dashboard's user-row query used to walk through five independent reads in sequence. They now run in a single ",[51,415,416],{},"Promise.all",[80,418,419,422],{},[43,420,421],{},"Schedule auto-generation cut from hundreds of queries to one."," A per-employee-per-day existence check that ran 250+ individual queries for a typical 50-person week is now a single batched query plus an in-memory check.",[80,424,425,428,429,432,433,436],{},[43,426,427],{},"People grid uses DB aggregates."," The ",[51,430,431],{},"/time-tracking/people"," endpoint was loading every time entry for the week and looping in memory. It now uses ",[51,434,435],{},"groupBy"," for the sums and only fetches the handful of actively-running timers.",[80,438,439,442],{},[43,440,441],{},"Composable fetches in parallel."," Department-head paths on the timesheet and schedule calendars now fire their two API calls in parallel instead of sequence. Preferences load once per session instead of refetching on every calendar navigation. Watcher cascades that fired together coalesce into one request via microtask debounce.",[80,444,445,448,449,452],{},[43,446,447],{},"Cross-tab notification dedup."," The unread-count poller now broadcasts results across tabs via ",[51,450,451],{},"BroadcastChannel",". Three tabs open → roughly the same load as one.",[80,454,455,458],{},[43,456,457],{},"Domain middleware merged into one query."," White-label domain lookup now loads the owning organization via a relation include on the same query, so cache-miss paths are a single DB round-trip per unique host.",[12,460,461],{},"All in: 1699 tests passing, zero behaviour changes, noticeably faster app.",[35,463,465],{"id":464},"getting-v1010","Getting v1.0.10",[12,467,468,469,471,472,474,475,478],{},"There's nothing to do — the update is live for all cloud customers. Everything above is backwards-compatible; no migrations required on your side. Open ",[51,470,64],{}," or ",[51,473,138],{}," to try the new Team view, or visit ",[51,476,477],{},"/settings/timetracking#lockdown-period-start"," to set up your first pay-period lockdown.",[12,480,481],{},"As always, if you hit anything unexpected, reach out — we read every support ticket.",{"title":16,"searchDepth":17,"depth":17,"links":483},[484,485,486,496,497,498,499,500,501,502,503,504],{"id":37,"depth":17,"text":38},{"id":71,"depth":17,"text":72},{"id":142,"depth":17,"text":143,"children":487},[488,490,491,492,493,494,495],{"id":147,"depth":489,"text":148},3,{"id":154,"depth":489,"text":155},{"id":161,"depth":489,"text":162},{"id":168,"depth":489,"text":169},{"id":175,"depth":489,"text":176},{"id":182,"depth":489,"text":183},{"id":189,"depth":489,"text":190},{"id":196,"depth":17,"text":197},{"id":225,"depth":17,"text":226},{"id":261,"depth":17,"text":262},{"id":287,"depth":17,"text":288},{"id":336,"depth":17,"text":337},{"id":354,"depth":17,"text":355},{"id":367,"depth":17,"text":368},{"id":377,"depth":17,"text":378},{"id":464,"depth":17,"text":465},"2026-04-20","v1.0.10 ships the Team Matrix view on schedules and timesheets, pay-period lockdown for payroll compliance, project money budgets, clock rounding, time-entry tags, unified Excel/PDF/CSV export, a Settings search bar, and a cross-stack performance pass.","https://images.unsplash.com/photo-1611926653458-09294b3142bf?w=1200&h=630&fit=crop",{},"/blog/v1-0-10-launch","7 min read",{"title":30,"description":506},"blog/v1-0-10-launch",[514,515,516,517,518],"release notes","time tracking","scheduling","approvals","performance","BHygeve_N_zW97jDb0ycV70YfhRqImpud3tOcc6KTAI",[521,665,816],{"id":522,"title":523,"author":31,"body":524,"date":652,"description":653,"extension":19,"image":654,"meta":655,"navigation":7,"path":656,"readTime":657,"seo":658,"stem":659,"tags":660,"__hash__":664},"blog/blog/employee-time-off-request-process.md","How to Build a Time Off Request Process That Doesn't Annoy Anyone",{"type":9,"value":525,"toc":644},[526,529,533,536,540,543,547,550,577,580,584,587,596,600,603,607,610,636],[12,527,528],{},"A clunky time off request process annoys everyone. Employees never know if their request was seen, managers lose track of who asked for what, and HR ends up chasing approvals. The fix is not more rules — it is a clearer, faster flow. Here is how to build one.",[35,530,532],{"id":531},"why-the-process-matters","Why the Process Matters",[12,534,535],{},"Time off is one of the most frequent interactions an employee has with your systems. If requesting a day off feels like filing paperwork, it colours how people feel about the whole company. A smooth process is a small thing that quietly improves morale — and a clumsy one is a small thing that quietly erodes it.",[35,537,539],{"id":538},"the-friction-of-email-and-forms","The Friction of Email and Forms",[12,541,542],{},"The classic process is \"email your manager.\" It feels lightweight but creates real problems: requests get buried, there is no record of the decision, balances are tracked separately (if at all), and no one can see whether the team is already short that week. Paper or PDF forms are worse — they add data entry on top of all the same gaps.",[35,544,546],{"id":545},"the-ideal-flow","The Ideal Flow",[12,548,549],{},"A good time off request process has four steps, and software should handle the hand-offs automatically:",[551,552,553,559,565,571],"ol",{},[80,554,555,558],{},[43,556,557],{},"Request"," — the employee picks a type and dates and submits in seconds, seeing their remaining balance before they confirm.",[80,560,561,564],{},[43,562,563],{},"Route"," — the request goes to the right approver automatically, based on your rules.",[80,566,567,570],{},[43,568,569],{},"Approve"," — the manager sees team coverage, then approves or declines in a click. Everyone is notified.",[80,572,573,576],{},[43,574,575],{},"Sync"," — the balance updates, the team calendar reflects it, and it lands in Google Calendar or Outlook.",[12,578,579],{},"No chasing, no spreadsheet update, no \"did you get my email?\"",[35,581,583],{"id":582},"make-it-self-service","Make It Self-Service",[12,585,586],{},"The biggest single improvement is letting employees submit and track their own requests. Self-service removes the HR bottleneck, and because the system validates each request against the live balance, it prevents the impossible bookings a manual process lets through. Staff also stop asking \"how many days do I have left?\" because they can simply see it.",[12,588,589,590,595],{},"An ",[591,592,594],"a",{"href":593},"/employee-time-off-tracker","employee time off tracker"," is built around exactly this flow.",[35,597,599],{"id":598},"give-managers-real-visibility","Give Managers Real Visibility",[12,601,602],{},"Approvals should never be a guess. Before saying yes, a manager should be able to see who else is already off that week. A shared team view turns approval from a gamble into an informed decision and is the single best defence against being short-staffed.",[35,604,606],{"id":605},"set-clear-simple-rules","Set Clear, Simple Rules",[12,608,609],{},"A good process still needs a few clear rules, written down where everyone can see them:",[77,611,612,618,624,630],{},[80,613,614,617],{},[43,615,616],{},"Notice periods"," — how far ahead routine requests should be made.",[80,619,620,623],{},[43,621,622],{},"Blackout dates"," — any periods when time off is restricted, and why.",[80,625,626,629],{},[43,627,628],{},"Approval chain"," — who approves, and what happens if they are away.",[80,631,632,635],{},[43,633,634],{},"Balances"," — how accruals and carry-over work.",[12,637,638,639,643],{},"Keep the rules minimal and consistent. The goal is a process so simple that booking time off is a non-event — which is exactly how it should feel. Tools like ",[591,640,642],{"href":641},"/pto-tracking-software","PTO tracking software"," let you encode these rules once so they apply automatically, every time.",{"title":16,"searchDepth":17,"depth":17,"links":645},[646,647,648,649,650,651],{"id":531,"depth":17,"text":532},{"id":538,"depth":17,"text":539},{"id":545,"depth":17,"text":546},{"id":582,"depth":17,"text":583},{"id":598,"depth":17,"text":599},{"id":605,"depth":17,"text":606},"2026-05-24","Email chains and paper forms make requesting time off painful. Here's how to design a simple, fair time off request process your whole team will actually use.","https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=1200&h=630&fit=crop",{},"/blog/employee-time-off-request-process","5 min read",{"title":523,"description":653},"blog/employee-time-off-request-process",[661,662,663],"time off","self-service","hr","MX9yUB3aRVI0XHK7Jc3VWSICo6tpXwvbKgfjNFTJBlk",{"id":666,"title":667,"author":31,"body":668,"date":804,"description":805,"extension":19,"image":806,"meta":807,"navigation":7,"path":808,"readTime":657,"seo":809,"stem":810,"tags":811,"__hash__":815},"blog/blog/vacation-tracker-small-business.md","Choosing a Vacation Tracker for Your Small Business",{"type":9,"value":669,"toc":797},[670,673,677,680,683,687,690,694,738,748,752,755,759,762,794],[12,671,672],{},"A vacation tracker is one of the first pieces of \"real\" software most small businesses adopt as they grow past a handful of people. This guide covers when you actually need one, the features worth paying attention to, and how to roll it out without disrupting your team.",[35,674,676],{"id":675},"when-spreadsheets-stop-working","When Spreadsheets Stop Working",[12,678,679],{},"A shared spreadsheet is fine for three or four people. The tipping point usually arrives somewhere around eight to ten employees, when you start seeing overlapping bookings, balances that no longer add up, and a growing pile of \"how many days do I have left?\" messages.",[12,681,682],{},"If you recognise any of those signs, you have outgrown the spreadsheet. The good news is that a dedicated vacation tracker solves all three at once.",[35,684,686],{"id":685},"what-a-vacation-tracker-should-do","What a Vacation Tracker Should Do",[12,688,689],{},"At its core, a vacation tracker should let employees request time off, route those requests for approval, and keep everyone's balance accurate automatically. Beyond that baseline, the features that separate a good tool from a frustrating one are worth knowing before you choose.",[35,691,693],{"id":692},"must-have-features","Must-Have Features",[77,695,696,702,708,714,720,726,732],{},[80,697,698,701],{},[43,699,700],{},"Automatic balances and accruals"," — the system should calculate remaining days based on your policy, not rely on someone updating a column.",[80,703,704,707],{},[43,705,706],{},"Self-service requests"," — employees book their own time off and see their balance before submitting.",[80,709,710,713],{},[43,711,712],{},"Approval workflows"," — requests route to the right manager, who can see team coverage before deciding.",[80,715,716,719],{},[43,717,718],{},"A shared team calendar"," — so clashes are visible before they are approved.",[80,721,722,725],{},[43,723,724],{},"Calendar sync"," — approved time off flows into Google Calendar and Outlook automatically.",[80,727,728,731],{},[43,729,730],{},"Multiple leave types"," — vacation, sick, and personal time tracked separately with their own rules.",[80,733,734,737],{},[43,735,736],{},"An audit trail"," — a record of who booked what and when, for payroll and disputes.",[12,739,740,741,744,745,747],{},"A capable ",[591,742,743],{"href":641},"PTO tracking tool"," covers all of these, and an ",[591,746,594],{"href":593}," puts the self-service request flow front and centre.",[35,749,751],{"id":750},"free-options-exist","Free Options Exist",[12,753,754],{},"You do not need a big budget to get started. Several tools — BookYourPTO included — offer a genuinely useful free tier for small teams, so you can replace the spreadsheet without a procurement process. Start free, and upgrade only when your headcount or feature needs grow.",[35,756,758],{"id":757},"rolling-it-out-without-disruption","Rolling It Out Without Disruption",[12,760,761],{},"A smooth rollout comes down to a few steps:",[551,763,764,770,776,782,788],{},[80,765,766,769],{},[43,767,768],{},"Write your policy first."," Decide allowances, accrual rules, notice periods, and carry-over before you configure anything.",[80,771,772,775],{},[43,773,774],{},"Import your people and set balances"," to match where everyone currently stands.",[80,777,778,781],{},[43,779,780],{},"Pick your approval flow"," — who approves, and what happens when they are away.",[80,783,784,787],{},[43,785,786],{},"Tell the team how to book"," with a two-minute walkthrough. Self-service tools rarely need more than that.",[80,789,790,793],{},[43,791,792],{},"Run it in parallel for a couple of weeks"," if it makes you comfortable, then retire the spreadsheet for good.",[12,795,796],{},"The best time to adopt a vacation tracker is just before you desperately need one. If your spreadsheet is starting to creak, a purpose-built tracker will pay for itself in saved admin and avoided scheduling headaches — often without costing anything at all to start.",{"title":16,"searchDepth":17,"depth":17,"links":798},[799,800,801,802,803],{"id":675,"depth":17,"text":676},{"id":685,"depth":17,"text":686},{"id":692,"depth":17,"text":693},{"id":750,"depth":17,"text":751},{"id":757,"depth":17,"text":758},"2026-05-20","A buyer's guide to vacation trackers for small businesses: when to stop using spreadsheets, the features that matter, and how to roll one out without disruption.","https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?w=1200&h=630&fit=crop",{},"/blog/vacation-tracker-small-business",{"title":667,"description":805},"blog/vacation-tracker-small-business",[812,813,814],"vacation tracker","small business","pto tracking","58ITSoGHqZa_sUOYkn51EbntMRNwH6sN55mtNbs1R5E",{"id":817,"title":818,"author":31,"body":819,"date":958,"description":959,"extension":19,"image":960,"meta":961,"navigation":7,"path":962,"readTime":963,"seo":964,"stem":965,"tags":966,"__hash__":969},"blog/blog/how-to-track-and-reduce-employee-absence.md","How to Track and Reduce Employee Absence",{"type":9,"value":820,"toc":949},[821,824,828,831,835,838,852,855,859,862,882,886,889,892,896,899,916,919,923,926,930,938,946],[12,822,823],{},"Every team deals with absence — vacation, sickness, appointments, emergencies. The difference between teams that cope and teams that get caught short is not luck; it is having a clear picture of who is away, why, and how often. Here is how to track absence properly and bring down the avoidable kind.",[35,825,827],{"id":826},"why-absence-tracking-matters","Why Absence Tracking Matters",[12,829,830],{},"Unrecorded absence quietly costs you in three ways: coverage gaps that hit deadlines, payroll errors when sick days are not logged, and an inability to support employees whose absence is creeping up. You cannot manage what you cannot see, and most businesses cannot see their absence clearly because it lives in inboxes and memory.",[35,832,834],{"id":833},"planned-vs-unplanned-absence","Planned vs. Unplanned Absence",[12,836,837],{},"Good absence management separates two very different things:",[77,839,840,846],{},[80,841,842,845],{},[43,843,844],{},"Planned absence"," — booked in advance: holiday, parental leave, scheduled appointments. This is about visibility and avoiding clashes.",[80,847,848,851],{},[43,849,850],{},"Unplanned absence"," — sickness, emergencies, no-shows. This is about accurate recording and spotting patterns early.",[12,853,854],{},"Treating both in one system gives you the full picture. A tool that only handles booked holiday misses half the story.",[35,856,858],{"id":857},"what-to-measure","What to Measure",[12,860,861],{},"A few simple metrics tell you most of what you need:",[77,863,864,870,876],{},[80,865,866,869],{},[43,867,868],{},"Absence rate"," — total absence days as a percentage of available working days. This is your headline number to track over time.",[80,871,872,875],{},[43,873,874],{},"Frequency"," — how many separate spells of absence someone has, not just total days. Several short, frequent absences can matter more than one long, explained one.",[80,877,878,881],{},[43,879,880],{},"Reason mix"," — how much is sickness vs. appointments vs. other, so you know where to focus.",[35,883,885],{"id":884},"spotting-patterns-early","Spotting Patterns Early",[12,887,888],{},"The point of measuring is to act early and supportively. Patterns worth noticing include repeated short absences around weekends, the same period each year, or a sudden change from someone's normal attendance. None of these are accusations — they are prompts for a supportive conversation. The earlier you can have it, the better the outcome for everyone.",[12,890,891],{},"This is almost impossible from a spreadsheet, because the data is never current and nothing surfaces a trend for you.",[35,893,895],{"id":894},"building-a-fair-absence-policy","Building a Fair Absence Policy",[12,897,898],{},"A clear, consistently applied policy is what keeps absence management fair. Document:",[77,900,901,904,907,910,913],{},[80,902,903],{},"How to report absence, and by when (e.g. before the start of a shift).",[80,905,906],{},"Who to notify and how.",[80,908,909],{},"When self-certification ends and a fit note is needed.",[80,911,912],{},"What return-to-work steps apply after longer absences.",[80,914,915],{},"How absence is recorded and who can see it.",[12,917,918],{},"Fairness comes from applying the same process to everyone — which is far easier when the process lives in one system rather than individual managers' habits.",[35,920,922],{"id":921},"reducing-avoidable-absence","Reducing Avoidable Absence",[12,924,925],{},"Once you can see absence clearly, the levers to reduce the avoidable part are well understood: tackle issues early and supportively, make booking planned time off easy so people do not \"go sick\" instead, give managers visibility so workloads stay reasonable, and keep return-to-work conversations routine rather than confrontational.",[35,927,929],{"id":928},"how-software-helps","How Software Helps",[12,931,932,933,937],{},"Dedicated ",[591,934,936],{"href":935},"/absence-management","absence management software"," records planned leave and unplanned sickness in one place, timestamps and attributes every entry, and turns those records into the absence rate and frequency trends you need — automatically. Managers get a real-time view of who is away today, and every record carries an audit trail for HR and payroll.",[12,939,940,941,945],{},"If your priority is the planned side — coordinating who is off and when — pair it with proper ",[591,942,944],{"href":943},"/leave-management","leave management"," so requests, approvals, and balances all run through the same system.",[12,947,948],{},"Absence will always happen. Managing it well is about visibility, fairness, and acting early — and that starts with getting it out of inboxes and into a system everyone can rely on.",{"title":16,"searchDepth":17,"depth":17,"links":950},[951,952,953,954,955,956,957],{"id":826,"depth":17,"text":827},{"id":833,"depth":17,"text":834},{"id":857,"depth":17,"text":858},{"id":884,"depth":17,"text":885},{"id":894,"depth":17,"text":895},{"id":921,"depth":17,"text":922},{"id":928,"depth":17,"text":929},"2026-05-13","A practical guide to absence management: what to measure, how to spot patterns early, and how to build a fair policy that reduces avoidable absence.","https://images.unsplash.com/photo-1507679799987-c73779587ccf?w=1200&h=630&fit=crop",{},"/blog/how-to-track-and-reduce-employee-absence","6 min read",{"title":818,"description":959},"blog/how-to-track-and-reduce-employee-absence",[967,663,968],"absence management","best practices","MZaVdB3xgNgc2vLBD0ZllvCRqKfkVSTjs8MBi859O2U",1780938456694]